#ifdef FOG #ifdef FOG_TEXTURE uniform sampler2D m_FogTexture; #endif uniform vec3 m_FogColor; // x == density // y == factor // z == ystart // w == yend uniform vec4 m_FogParams; varying vec3 fogCoord; void Fog_PerVertex(inout vec4 color, in vec3 wvPosition){ float density = g_FogParams.x; float factor = g_FogParams.y; float dist = length(wvPosition.xyz); float yf = wvPosition.y; float y0 = g_FogParams.z; float y1 = g_FogParams.w; float yh = (y1 - y0) * 0.5; float fogAmt1 = max(step(yh, 0.0), smoothstep(0, yh, max(y1-yf, yf-y0))); float fogAmt2 = exp(-density * density * dist * dist); color.rgb = mix(color.rgb, m_FogColor, fogAmt1 * fogAmt2); } void Fog_PerPixel(inout vec4 color){ Fog_PerVertex(color, fogCoord); } void Fog_WVPos(in vec4 wvPosition){ fogCoord = wvPosition.xyz; } #endif