aboutsummaryrefslogtreecommitdiff
path: root/engine/src/core-data/Common/ShaderLib/Fog.glsllib
blob: 0a28362cca1f9d6aa47be215c3281fe1de701c85 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#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