fog.glsl
0 B
Empty File
#version 150
const int FOG_SHAPE_SPHERE = 0;
const int FOG_SHAPE_CYLINDER = 1;
layout(std140) uniform Fog {
vec4 FogColor;
int FogShape;
float FogStart;
float FogEnd;
float FogSkyEnd;
float FogCloudsEnd;
};
vec4 linear_fog(vec4 inColor, float vertexDistance, float fogStart, float fogEnd, vec4 fogColor) {
if (vertexDistance <= fogStart) {
return inColor;
}
float fogValue = vertexDistance < fogEnd ? smoothstep(fogStart, fogEnd, vertexDistance) : 1.0;
return vec4(mix(inColor.rgb, fogColor.rgb, fogValue * fogColor.a), inColor.a);
}
float linear_fog_fade(float vertexDistance, float fogStart, float fogEnd) {
if (vertexDistance <= fogStart) {
return 1.0;
} else if (vertexDistance >= fogEnd) {
return 0.0;
}
return smoothstep(fogEnd, fogStart, vertexDistance);
}
float fog_distance(vec3 pos, int shape) {
if (shape == FOG_SHAPE_SPHERE) {
return length(pos);
} else {
float distXZ = length(pos.xz);
float distY = abs(pos.y);
return max(distXZ, distY);
}
}