From 40225cb13f624618d4f31a7cef9c9a392d8cec8f Mon Sep 17 00:00:00 2001 From: coolGi Date: Tue, 20 Jun 2023 00:01:54 +0930 Subject: [PATCH] Started work on putting fog in its own shader --- core/src/main/resources/shaders/fog/fog.frag | 55 ++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 core/src/main/resources/shaders/fog/fog.frag diff --git a/core/src/main/resources/shaders/fog/fog.frag b/core/src/main/resources/shaders/fog/fog.frag new file mode 100644 index 000000000..aa12832f6 --- /dev/null +++ b/core/src/main/resources/shaders/fog/fog.frag @@ -0,0 +1,55 @@ +#version 150 core + + +in vec4 vertexColor; +in vec3 vertexWorldPos; +in float vertexYPos; +in vec4 vPos; + +out vec4 fragColor; + + +uniform float fogScale; +uniform float fogVerticalScale; +uniform float nearFogStart; +uniform float nearFogLength; +uniform int fullFogMode; + +uniform vec4 fogColor; + + + +// method definitions +// ==== The below 5 methods will be run-time generated. ==== +float getNearFogThickness(float dist); +float getFarFogThickness(float dist); +float getHeightFogThickness(float dist); +float calculateFarFogDepth(float horizontal, float dist, float nearFogStart); +float calculateHeightFogDepth(float vertical, float realY); +float mixFogThickness(float near, float far, float height); +// ========================================================= + + + + +/** + * Fragment shader for fog. + * This should be passed last so it applies above other affects like AO + * + * version: 7-2-2023 + */ +void main() { + float horizontalDist = length(vertexWorldPos.xz) * fogScale; + float heightDist = calculateHeightFogDepth( + vertexWorldPos.y, vertexYPos) * fogVerticalScale; + float farDist = calculateFarFogDepth(horizontalDist, + length(vertexWorldPos.xyz) * fogScale, nearFogStart); + + float nearFogThickness = getNearFogThickness(horizontalDist); + float farFogThickness = getFarFogThickness(farDist); + float heightFogThickness = getHeightFogThickness(heightDist); + float mixedFogThickness = clamp(mixFogThickness( + nearFogThickness, farFogThickness, heightFogThickness), 0.0, 1.0); + + fragColor = mix(vertexColor, vec4(fogColor.rgb, 1.0), mixedFogThickness); +} \ No newline at end of file