Гуру шейдеров подскажите, почему вот эта модель света дает 2 прохода ?
Честно признаться уже мозг сломал, но так и не могу понять.
Синтаксис:
Используется csharp
inline half4 LightingMyTreeLeaf (SurfaceOutput s, half3 lightDir, half3 viewDir, half atten)
{
fixed4 c;
half3 h = normalize (lightDir + viewDir);
half nl = dot (s.Normal, lightDir);
half nh = max (0, dot (s.Normal, h));
// view dependent back contribution for translucency
fixed backContrib = saturate(dot(viewDir, -lightDir));
// normally translucency is more like -nl, but looks better when it's view dependent
/////backContrib = lerp(saturate(-nl), backContrib, _TranslucencyViewDependency);
backContrib = lerp(saturate(-nl), backContrib, 0.7);
/////fixed3 translucencyColor = backContrib * s.Translucency * _TranslucencyColor;
fixed3 translucencyColor = backContrib * 0.5 * 0.5;
// wrap-around diffuse
nl = max(0, nl * 0.6 + 0.4);
c.rgb = s.Albedo * (translucencyColor * 2 + nl);
c.rgb = c.rgb * _LightColor0.rgb;
// For directional lights, apply less shadow attenuation
#if defined(DIRECTIONAL) || defined(DIRECTIONAL_COOKIE)
c.rgb *= lerp(2, atten * 2, 0.8);
c.a = 1;
#else
c.rgb *= 2*atten;
c.a = 1;
#endif
return c;
}
{
fixed4 c;
half3 h = normalize (lightDir + viewDir);
half nl = dot (s.Normal, lightDir);
half nh = max (0, dot (s.Normal, h));
// view dependent back contribution for translucency
fixed backContrib = saturate(dot(viewDir, -lightDir));
// normally translucency is more like -nl, but looks better when it's view dependent
/////backContrib = lerp(saturate(-nl), backContrib, _TranslucencyViewDependency);
backContrib = lerp(saturate(-nl), backContrib, 0.7);
/////fixed3 translucencyColor = backContrib * s.Translucency * _TranslucencyColor;
fixed3 translucencyColor = backContrib * 0.5 * 0.5;
// wrap-around diffuse
nl = max(0, nl * 0.6 + 0.4);
c.rgb = s.Albedo * (translucencyColor * 2 + nl);
c.rgb = c.rgb * _LightColor0.rgb;
// For directional lights, apply less shadow attenuation
#if defined(DIRECTIONAL) || defined(DIRECTIONAL_COOKIE)
c.rgb *= lerp(2, atten * 2, 0.8);
c.a = 1;
#else
c.rgb *= 2*atten;
c.a = 1;
#endif
return c;
}