mirror of
https://github.com/PixelGuys/Cubyz.git
synced 2025-08-03 11:17:05 -04:00
Fix floating point precision issue in the fog gradient calculation, which lead to weird black lines.
fixes #1034
This commit is contained in:
parent
1bcd5095da
commit
5d37993132
@ -80,7 +80,7 @@ vec3 fetch(ivec2 pos) {
|
||||
vec4 rgba = texelFetch(color, pos, 0);
|
||||
float densityAdjustment = sqrt(dot(tanXY*(normalizedTexCoords*2 - 1), tanXY*(normalizedTexCoords*2 - 1)) + 1);
|
||||
float dist = zFromDepth(texelFetch(depthTexture, pos, 0).r);
|
||||
float fogDistance = calculateFogDistance(dist, densityAdjustment, playerPositionInteger.z + playerPositionFraction.z, normalize(direction).z, fog.density, fog.fogLower, fog.fogHigher);
|
||||
float fogDistance = calculateFogDistance(dist, densityAdjustment, playerPositionFraction.z, normalize(direction).z, fog.density, fog.fogLower - playerPositionInteger.z, fog.fogHigher - playerPositionInteger.z);
|
||||
vec3 fogColor = fog.color;
|
||||
rgba.rgb = applyFrontfaceFog(fogDistance, fog.color, rgba.rgb);
|
||||
return rgba.rgb/rgba.a;
|
||||
|
@ -137,9 +137,8 @@ void main() {
|
||||
float normalVariation = lightVariation(normal);
|
||||
float densityAdjustment = sqrt(dot(mvVertexPos, mvVertexPos))/abs(mvVertexPos.y);
|
||||
float dist = zFromDepth(texelFetch(depthTexture, ivec2(gl_FragCoord.xy), 0).r);
|
||||
float playerZ = playerPositionFraction.z + playerPositionInteger.z;
|
||||
float fogDistance = calculateFogDistance(dist, densityAdjustment, playerZ, normalize(direction).z, fogData[int(animatedTextureIndex)].fogDensity, 1e10, 1e10);
|
||||
float airFogDistance = calculateFogDistance(dist, densityAdjustment, playerZ, normalize(direction).z, fog.density, fog.fogLower, fog.fogHigher);
|
||||
float fogDistance = calculateFogDistance(dist, densityAdjustment, playerPositionFraction.z, normalize(direction).z, fogData[int(animatedTextureIndex)].fogDensity, 1e10, 1e10);
|
||||
float airFogDistance = calculateFogDistance(dist, densityAdjustment, playerPositionFraction.z, normalize(direction).z, fog.density, fog.fogLower - playerPositionInteger.z, fog.fogHigher - playerPositionInteger.z);
|
||||
vec3 fogColor = unpackColor(fogData[int(animatedTextureIndex)].fogColor);
|
||||
vec3 pixelLight = max(light*normalVariation, texture(emissionSampler, textureCoords).r*4);
|
||||
vec4 textureColor = texture(texture_sampler, textureCoords)*vec4(pixelLight, 1);
|
||||
|
@ -86,7 +86,7 @@ void main() {
|
||||
);
|
||||
float densityAdjustment = sqrt(dot(tanXY*(clampedTexCoords*2 - 1), tanXY*(clampedTexCoords*2 - 1)) + 1);
|
||||
float dist = zFromDepth(texture(depthTexture, texCoords).r);
|
||||
float fogDistance = calculateFogDistance(dist, densityAdjustment, playerPositionInteger.z + playerPositionFraction.z, normalize(direction).z, fog.density, fog.fogLower, fog.fogHigher);
|
||||
float fogDistance = calculateFogDistance(dist, densityAdjustment, playerPositionFraction.z, normalize(direction).z, fog.density, fog.fogLower - playerPositionInteger.z, fog.fogHigher - playerPositionInteger.z);
|
||||
fragColor.rgb = applyFrontfaceFog(fogDistance, fog.color, fragColor.rgb);
|
||||
float maxColor = max(1.0, max(fragColor.r, max(fragColor.g, fragColor.b)));
|
||||
fragColor.rgb = fragColor.rgb/maxColor;
|
||||
|
Loading…
x
Reference in New Issue
Block a user