Files
enter_the_fog/resources/shaders/fog.fs
2026-03-26 14:46:39 -05:00

45 lines
1.3 KiB
GLSL

#version 330
// Input vertex attributes
in vec3 fragPosition;
in vec2 fragTexCoord;
in vec4 fragColor;
in vec3 fragNormal;
// Input uniform values
uniform sampler2D texture0;
uniform vec4 colDiffuse;
// Fog uniforms
uniform vec3 viewPos;
uniform float fogDensity;
uniform float fogStart; // <--- New Uniform: Distance where fog begins
// Output fragment color
out vec4 finalColor;
void main()
{
// 1. Get the base color
vec4 texelColor = texture(texture0, fragTexCoord);
vec4 baseColor = texelColor * colDiffuse * fragColor;
// 2. Calculate distance from camera to fragment
float dist = length(viewPos - fragPosition);
// 3. Calculate effective distance (distance minus the clear zone)
// We use max() to ensure we don't get negative distance inside the fogStart radius
float effectiveDist = max(0.0, dist - fogStart);
// 4. Calculate fog factor using Exponential Squared formula
// We use effectiveDist so fog only begins accumulating after fogStart
float fogFactor = exp(-pow(effectiveDist * fogDensity, 2.0));
fogFactor = clamp(fogFactor, 0.0, 1.0);
// 5. Define fog color
vec3 fogColor = vec3(0.47, 0.7, 0.70);
// 6. Final Mix
finalColor = vec4(mix(fogColor, baseColor.rgb, fogFactor), baseColor.a);
}