mirror of
https://github.com/PixelGuys/Cubyz.git
synced 2025-09-08 19:50:23 -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);
|
vec4 rgba = texelFetch(color, pos, 0);
|
||||||
float densityAdjustment = sqrt(dot(tanXY*(normalizedTexCoords*2 - 1), tanXY*(normalizedTexCoords*2 - 1)) + 1);
|
float densityAdjustment = sqrt(dot(tanXY*(normalizedTexCoords*2 - 1), tanXY*(normalizedTexCoords*2 - 1)) + 1);
|
||||||
float dist = zFromDepth(texelFetch(depthTexture, pos, 0).r);
|
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;
|
vec3 fogColor = fog.color;
|
||||||
rgba.rgb = applyFrontfaceFog(fogDistance, fog.color, rgba.rgb);
|
rgba.rgb = applyFrontfaceFog(fogDistance, fog.color, rgba.rgb);
|
||||||
return rgba.rgb/rgba.a;
|
return rgba.rgb/rgba.a;
|
||||||
|
@ -137,9 +137,8 @@ void main() {
|
|||||||
float normalVariation = lightVariation(normal);
|
float normalVariation = lightVariation(normal);
|
||||||
float densityAdjustment = sqrt(dot(mvVertexPos, mvVertexPos))/abs(mvVertexPos.y);
|
float densityAdjustment = sqrt(dot(mvVertexPos, mvVertexPos))/abs(mvVertexPos.y);
|
||||||
float dist = zFromDepth(texelFetch(depthTexture, ivec2(gl_FragCoord.xy), 0).r);
|
float dist = zFromDepth(texelFetch(depthTexture, ivec2(gl_FragCoord.xy), 0).r);
|
||||||
float playerZ = playerPositionFraction.z + playerPositionInteger.z;
|
float fogDistance = calculateFogDistance(dist, densityAdjustment, playerPositionFraction.z, normalize(direction).z, fogData[int(animatedTextureIndex)].fogDensity, 1e10, 1e10);
|
||||||
float fogDistance = calculateFogDistance(dist, densityAdjustment, playerZ, 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);
|
||||||
float airFogDistance = calculateFogDistance(dist, densityAdjustment, playerZ, normalize(direction).z, fog.density, fog.fogLower, fog.fogHigher);
|
|
||||||
vec3 fogColor = unpackColor(fogData[int(animatedTextureIndex)].fogColor);
|
vec3 fogColor = unpackColor(fogData[int(animatedTextureIndex)].fogColor);
|
||||||
vec3 pixelLight = max(light*normalVariation, texture(emissionSampler, textureCoords).r*4);
|
vec3 pixelLight = max(light*normalVariation, texture(emissionSampler, textureCoords).r*4);
|
||||||
vec4 textureColor = texture(texture_sampler, textureCoords)*vec4(pixelLight, 1);
|
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 densityAdjustment = sqrt(dot(tanXY*(clampedTexCoords*2 - 1), tanXY*(clampedTexCoords*2 - 1)) + 1);
|
||||||
float dist = zFromDepth(texture(depthTexture, texCoords).r);
|
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);
|
fragColor.rgb = applyFrontfaceFog(fogDistance, fog.color, fragColor.rgb);
|
||||||
float maxColor = max(1.0, max(fragColor.r, max(fragColor.g, fragColor.b)));
|
float maxColor = max(1.0, max(fragColor.r, max(fragColor.g, fragColor.b)));
|
||||||
fragColor.rgb = fragColor.rgb/maxColor;
|
fragColor.rgb = fragColor.rgb/maxColor;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user