#import "Common/ShaderLib/GLSLCompat.glsllib" uniform vec4 m_Diffuse; uniform sampler2D m_BarkMap; uniform bool m_HasBarkMap; in vec2 texCoord; in vec3 worldNormal; void main() { vec3 n = normalize(worldNormal); // Sun at ~45° elevation from SE — good contrast on vertical cylinders vec3 sunDir = normalize(vec3(0.6, 0.7, 0.4)); vec3 fillDir = normalize(vec3(-0.5, 0.3, -0.4)); vec3 rimDir = normalize(vec3(-0.3, 0.5, 0.7)); float sun = max(dot(n, sunDir), 0.0); float fill = max(dot(n, fillDir), 0.0) * 0.22; float rim = max(dot(n, rimDir), 0.0) * 0.14; float sky = dot(n, vec3(0.0, 1.0, 0.0)) * 0.4 + 0.4; // [0.0, 0.8] float light = sun * 0.75 + fill + rim + sky * 0.09 + 0.05; vec3 baseColor = m_HasBarkMap ? texture2D(m_BarkMap, texCoord).rgb * m_Diffuse.rgb : m_Diffuse.rgb; gl_FragColor = vec4(baseColor * clamp(light, 0.0, 1.0), m_Diffuse.a); }