- Home /
Light direction based Lerp
I'm new to CG [first shader actually] but I want to lerp between two textures based the light direction.
As it is I've tried to use a dot product of the light vector and surface normal to try and create the interpolator for the lerp below
the code - Shader "DS/LightDirBasedLerp" {
Properties
{
_MainTex ("Base (RGB)", 2D) = "white" {}
_Ramp2D ("Gradient Ramp",2D) = "gray" {}
_RampColor("Ramp color", Color) = (.5,.5,.5,1)
_DiffLit("Lit Diffuse", 2D) = "white" {}
_DiffUnlit("Unlit Diffuse", 2D) = "black" {}
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200
CGPROGRAM
#pragma surface surf Ramp
#pragma target 3.0
sampler2D _MainTex;
sampler2D _Ramp2D;
float4 _RampColor;
sampler2D _DiffLit;
sampler2D _DiffUnlit;
struct Input
{
float2 uv_MainTex;
};
half4 LightingRamp (SurfaceOutput s, half3 lightDir, half3 viewDir, half atten)
{
float NdotL = dot(s.Normal, lightDir);
float NdotE = dot(s.Normal, viewDir);
float diff = (NdotL * 0.3) + 0.5;
float2 gradRampUV = float2(NdotE* 0.8, diff);
float3 gradRamp = tex2D(_Ramp2D, gradRampUV.xy).rgb;
float3 lerpedTex = lerp(_DiffLit, _DiffUnlit, gradRamp.x);
float4 c;
c.rgb = lerpedTex;
c.a = s.Alpha;
return c;
}
void surf (Input IN, inout SurfaceOutput o)
{
half4 c = _RampColor;
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
issue being I'm getting an error on line 44 saying - 'unable to find compatible overloaded function "lerp(sampler2D, sampler2D, Float)'
float3 lerpedTex = lerp(_DiffLit, _DiffUnlit, gradRamp.x);
as far as I know that's fine, right? anyone know the solution?
[Edited] You are lerping between 2 sampler2ds, not color information. You need to get that information from each sampler via tex2d() like you are doing with the ramp, and lerp between that.
but how would I write that, as I said I'm new to code, tried the ways I think I'd do what you said but can't work it out.
Your answer
Follow this Question
Related Questions
How to force the compilation of a shader in Unity? 5 Answers
Weird artifacts in cg shader with lerp() 1 Answer
Shader compiler: internal error compiling shader snippet type=0 platform=0: 1 Answer
How to determine shader center? 0 Answers
Unity crashes when trying to run depth shader with color lerp. 1 Answer