struct appdata_full { vec4 vertex; vec3 normal; }; struct v2f { vec4 pos; vec3 backContrib; vec3 nl; }; uniform vec3 _TerrainTreeLightDirections[4]; uniform float _TranslucencyViewDependency; v2f vert(in appdata_full v) { v2f o; vec3 viewDir; o.pos = v.vertex; viewDir = v.vertex.xyz; // Do we unroll this loop? // At some point we didn't since the loop body was deemed "too large" for (int j = 0; j < 3; j++) { vec3 lightDir = _TerrainTreeLightDirections[j]; float nl = dot(v.normal, lightDir); float backContrib = dot(viewDir, -lightDir); o.backContrib[ j ] = mix(-nl, backContrib, _TranslucencyViewDependency); o.nl[ j ] = max(0.0, (nl * 0.6) + 0.4); } return o; } void main() { v2f xl_retval; appdata_full xlt_v; xlt_v.vertex = gl_Vertex; xlt_v.normal = gl_Normal; xl_retval = vert(xlt_v); gl_Position = xl_retval.pos; gl_TexCoord[2] = vec4(xl_retval.backContrib, 0.0); gl_TexCoord[3] = vec4(xl_retval.nl, 0.0); }