1 #ifdef FOG 2 3 #ifdef FOG_TEXTURE 4 uniform sampler2D m_FogTexture; 5 #endif 6 7 uniform vec3 m_FogColor; 8 9 // x == density 10 // y == factor 11 // z == ystart 12 // w == yend 13 uniform vec4 m_FogParams; 14 15 varying vec3 fogCoord; 16 17 void Fog_PerVertex(inout vec4 color, in vec3 wvPosition){ 18 float density = g_FogParams.x; 19 float factor = g_FogParams.y; 20 float dist = length(wvPosition.xyz); 21 22 float yf = wvPosition.y; 23 float y0 = g_FogParams.z; 24 float y1 = g_FogParams.w; 25 float yh = (y1 - y0) * 0.5; 26 27 float fogAmt1 = max(step(yh, 0.0), smoothstep(0, yh, max(y1-yf, yf-y0))); 28 float fogAmt2 = exp(-density * density * dist * dist); 29 30 color.rgb = mix(color.rgb, m_FogColor, fogAmt1 * fogAmt2); 31 } 32 33 void Fog_PerPixel(inout vec4 color){ 34 Fog_PerVertex(color, fogCoord); 35 } 36 37 void Fog_WVPos(in vec4 wvPosition){ 38 fogCoord = wvPosition.xyz; 39 } 40 41 #endif