Sometimes it seems normal & simple to add a load of maths in the (frag) shader, but it isn't optimal. Not if you can pre-calculate it in the vertex shader or even for the whole material - property level. So take a bit of if-else maths as an example, where b is a shader property: a = b < .5 ? b*.8 : .4 + ((b-.5)*2.0); I imagine the cost is as follows: 1. (fastest, ugly) Pre-calculate a new property for the material (in C#) - pass an extra property to shader 2. (next fastest, but more vertex data) Pre-calculate in vertex shader - pass to fragment 3. (slowest) Just do the maths in fragment At a guess, is it worth removing (from frag) small if-else maths like this if you are supporting more basic desktop GPUs and/or mobile devices? And is there only minor penalty for doing in vertex shader (assuming not ultra-high poly counts!)? Are if-else statements still a note-worthy penalty on mobile and older GPUs?