"lerp" returning value (Shader)?

| | August 8, 2015

I don’t understand the lerp example in this code :

if(dot(WorldNormalVector(IN, o.Normal), _SnowDirection.xyz)>=lerp(1,-1,_Snow))
                o.Albedo = _SnowColor.rgb;

(Snow is in the range 0..1)

The article says :
We then compare the dot value with a lerp – if our Snow level is 0 (no snow) this returns 1 and if the Snow level is 1 it will return -1 (the entire rock is covered). It’s quite normal to only vary the snow level between 0..0.5 when we use this shader so that we only have snow on surfaces that actually face the snow direction.

Why does it return 1 (with Snow at 0) and -1 (with Snow at 1) ?

(source: http://unitygems.com/noobs-guide-shaders-2/ )


One Response to “"lerp" returning value (Shader)?”

  1. _Snow is in the range 0 to 1. The dot product returns a value from -1 to 1. The lerp is being used to convert _Snow to the -1 to 1 range for comparison with the dot product. When _Snow is zero, no snow is desired, so the comparison becomes “dot product >= 1″, which will never be true (well, except at points exactly facing the snow direction). Conversely, when _Snow is 1, the comparison becomes “dot product >= -1″, which will always be true, so you’ll get snow everywhere. Intermediate values of _Snow should generate intermediate values to compare the dot product against, hence the interpolation.

Leave a Reply