void xll_clip(float x) { if ( x<0.0 ) discard; } struct v2f { vec4 pos; vec2 uv; vec3 color; vec3 backContrib; vec3 nl; vec3 nh; }; uniform sampler2D _BumpSpecMap; uniform float _Cutoff; uniform sampler2D _MainTex; uniform vec4 _SpecColor; uniform vec4 _TerrainTreeLightColors[4]; uniform vec3 _TranslucencyColor; uniform sampler2D _TranslucencyMap; vec4 frag( in v2f i ) { vec4 col; vec3 albedo; float specular; vec4 trngls; float gloss; vec3 light; vec3 backContribs; int j = 0; vec3 lightColor; vec3 translucencyColor; float nl; float nh; float spec; vec4 c; col = texture2D( _MainTex, i.uv); xll_clip( (col.w - _Cutoff) ); albedo = (col.xyz * i.color); specular = (texture2D( _BumpSpecMap, i.uv).x * 128.000); trngls = texture2D( _TranslucencyMap, i.uv); gloss = trngls.w ; light = (vec3( gl_LightModel.ambient) * albedo); backContribs = (i.backContrib * trngls.z ); for ( ; (j < 3); ( j++ )) { lightColor = _TerrainTreeLightColors[ j ].xyz ; translucencyColor = (backContribs[ j ] * _TranslucencyColor); nl = i.nl[ j ]; nh = i.nh[ j ]; spec = (pow( nh, specular) * gloss); light += (((albedo * (translucencyColor + nl)) + (_SpecColor.xyz * spec)) * lightColor); } c.xyz = (light * 2.00000); c.w = 1.00000; return c; } void main() { vec4 xl_retval; v2f xlt_i; xlt_i.pos = vec4(0.0); xlt_i.uv = vec2( gl_TexCoord[0]); xlt_i.color = vec3( gl_TexCoord[1]); xlt_i.backContrib = vec3( gl_TexCoord[2]); xlt_i.nl = vec3( gl_TexCoord[3]); xlt_i.nh = vec3( gl_TexCoord[4]); xl_retval = frag( xlt_i); gl_FragData[0] = vec4( xl_retval); }