uniform float uTime; uniform vec3 uLightDir; uniform float uG; uniform float uG2; uniform float uExposure; uniform sampler2D uStarfield; varying vec2 vUV; varying vec3 vRayleighColor; varying vec3 vMieColor; varying vec3 vDirection; varying float vOpacity; varying float vHeight; void main(void) { float cos = dot(uLightDir, vDirection) / length(vDirection); float cos2 = cos*cos; float rayleighPhase = 0.75 * (1.0 + 0.5*cos2); float miePhase = 1.5 * ((1.0 - uG2) / (2.0 + uG2)) * (1.0 + cos2) / pow(1.0 + uG2 - 2.0 * uG * cos, 1.5); #ifdef LDR gl_FragColor = vec4((1.0 - exp(-uExposure * (rayleighPhase * vRayleighColor + miePhase * vMieColor))), vOpacity); #else // HDR gl_FragColor = vec4(rayleighPhase * vRayleighColor + miePhase * vMieColor, vOpacity); #endif // LDR float nightmult = clamp(1.0 - max(gl_FragColor.x, max(gl_FragColor.y, gl_FragColor.z)) * 10.0, 0.0, 1.0); //#ifdef STARFIELD gl_FragColor.xyz += nightmult * (vec3(0.05, 0.05, 0.1) * (2.0 - 0.75*clamp(-uLightDir.y, 0.0, 1.0)) * pow(vHeight,3.0) + texture2D(uStarfield, vUV + uTime).rgb * (0.35 + clamp(-uLightDir.y * 0.45, 0.0, 1.0))); //#else // NO STARFIELD // gl_FragColor.xyz += nightmult * (vec3(0.05, 0.05, 0.1) * (2.0 - 0.75*clamp(-uLightDir.y, 0.0, 1.0)) * pow(vHeight,3.0)); //#endif // STARFIELD }