#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 |