Game Development Stack Exchange is a question and answer site for professional and independent game developers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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

if(dot(WorldNormalVector(IN, o.Normal),>=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: )


share|improve this question
Are you asking about the definition of the lerp function? If so, see here: – Nathan Reed Apr 17 '13 at 22:23
@NathanReed Thanks, actually I don't understand it, why using "lerp" (an interpolation..?) to compare _Snow with the dot product? What does actually return lerp here: a different number between the frames? Or the same number, in this case, why not just put _Snow? – Paul Apr 17 '13 at 23:41
up vote 1 down vote accepted

_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.

share|improve this answer
OK, thanks Nathan ! – Paul Apr 18 '13 at 16:59
Supplemental: lerp(1, -1, _Snow) == (1 - (_Snow * 2)) – Jon Feb 12 '15 at 1:00

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.