mirror of
https://github.com/PixelGuys/Cubyz.git
synced 2025-08-03 11:17:05 -04:00
The fog now uses the correct distance instead of only using the z component.
This commit is contained in:
parent
a4bef7d4be
commit
4a84b862b5
@ -8,6 +8,7 @@ layout(binding = 3) uniform sampler2D color;
|
||||
|
||||
uniform sampler2D depthTexture;
|
||||
uniform float nearPlane;
|
||||
uniform vec2 tanXY;
|
||||
|
||||
struct Fog {
|
||||
vec3 color;
|
||||
@ -38,7 +39,8 @@ float calculateFogDistance(float depthBufferValue, float fogDensity) {
|
||||
|
||||
vec3 fetch(ivec2 pos) {
|
||||
vec4 rgba = texelFetch(color, pos, 0);
|
||||
float fogDistance = calculateFogDistance(texelFetch(depthTexture, pos, 0).r, fog.density);
|
||||
float densityAdjustment = sqrt(dot(tanXY*(texCoords*2 - 1), tanXY*(texCoords*2 - 1)) + 1);
|
||||
float fogDistance = calculateFogDistance(texelFetch(depthTexture, pos, 0).r, fog.density*densityAdjustment);
|
||||
vec3 fogColor = fog.color;
|
||||
float fogFactor = exp(fogDistance);
|
||||
vec4 sourceColor = vec4(fogColor, 1);
|
||||
|
@ -142,10 +142,9 @@ float calculateFogDistance(float depthBufferValue, float fogDensity) {
|
||||
|
||||
void applyFrontfaceFog(float fogDistance, vec3 fogColor) {
|
||||
float fogFactor = exp(fogDistance);
|
||||
float oldAlpha = fragColor.a;
|
||||
fragColor.a *= 1.0/fogFactor;
|
||||
fragColor.rgb += fragColor.a*fogColor;
|
||||
fragColor.rgb -= oldAlpha*fogColor;
|
||||
fragColor.a = 1.0/fogFactor;
|
||||
fragColor.rgb = fragColor.a*fogColor;
|
||||
fragColor.rgb -= fogColor;
|
||||
}
|
||||
|
||||
void applyBackfaceFog(float fogDistance, vec3 fogColor) {
|
||||
@ -177,10 +176,10 @@ void main() {
|
||||
int textureIndex = textureData[blockType].textureIndices[faceNormal];
|
||||
textureIndex = textureIndex + time / animation[textureIndex].time % animation[textureIndex].frames;
|
||||
float normalVariation = normalVariations[faceNormal];
|
||||
float fogDistance = calculateFogDistance(texelFetch(depthTexture, ivec2(gl_FragCoord.xy), 0).r, textureData[blockType].fogDensity);
|
||||
float airFogDistance = calculateFogDistance(texelFetch(depthTexture, ivec2(gl_FragCoord.xy), 0).r, fog.density);
|
||||
float densityAdjustment = sqrt(dot(mvVertexPos, mvVertexPos))/abs(mvVertexPos.z);
|
||||
float fogDistance = calculateFogDistance(texelFetch(depthTexture, ivec2(gl_FragCoord.xy), 0).r, textureData[blockType].fogDensity*densityAdjustment);
|
||||
float airFogDistance = calculateFogDistance(texelFetch(depthTexture, ivec2(gl_FragCoord.xy), 0).r, fog.density*densityAdjustment);
|
||||
vec3 fogColor = unpackColor(textureData[blockType].fogColor);
|
||||
fragColor = vec4(0, 0, 0, 1);
|
||||
if(isBackFace == 0) {
|
||||
|
||||
vec4 textureColor = texture(texture_sampler, vec3(getTextureCoordsNormal(startPosition/16, faceNormal), textureIndex))*vec4(ambientLight*normalVariation, 1);
|
||||
|
@ -7,6 +7,7 @@ uniform sampler2D color;
|
||||
|
||||
uniform sampler2D depthTexture;
|
||||
uniform float nearPlane;
|
||||
uniform vec2 tanXY;
|
||||
|
||||
struct Fog {
|
||||
vec3 color;
|
||||
@ -37,7 +38,8 @@ float calculateFogDistance(float depthBufferValue, float fogDensity) {
|
||||
|
||||
void main() {
|
||||
fragColor = texture(color, texCoords);
|
||||
float fogDistance = calculateFogDistance(texelFetch(depthTexture, ivec2(gl_FragCoord.xy), 0).r, fog.density);
|
||||
float densityAdjustment = sqrt(dot(tanXY*(texCoords*2 - 1), tanXY*(texCoords*2 - 1)) + 1);
|
||||
float fogDistance = calculateFogDistance(texelFetch(depthTexture, ivec2(gl_FragCoord.xy), 0).r, fog.density*densityAdjustment);
|
||||
vec3 fogColor = fog.color;
|
||||
float fogFactor = exp(fogDistance);
|
||||
vec4 sourceColor = vec4(fogColor, 1);
|
||||
|
@ -35,6 +35,7 @@ var deferredUniforms: struct {
|
||||
depthTexture: c_int,
|
||||
@"fog.color": c_int,
|
||||
@"fog.density": c_int,
|
||||
tanXY: c_int,
|
||||
nearPlane: c_int,
|
||||
} = undefined;
|
||||
|
||||
@ -235,6 +236,7 @@ pub fn renderWorld(world: *World, ambientLight: Vec3f, skyColor: Vec3f, playerPo
|
||||
c.glUniform1f(deferredUniforms.@"fog.density", blocks.meshes.fogDensity(playerBlock));
|
||||
}
|
||||
c.glUniform1f(deferredUniforms.nearPlane, zNear);
|
||||
c.glUniform2f(deferredUniforms.tanXY, 1.0/game.projectionMatrix.columns[0][0], 1.0/game.projectionMatrix.columns[1][1]);
|
||||
|
||||
c.glBindFramebuffer(c.GL_FRAMEBUFFER, activeFrameBuffer);
|
||||
|
||||
@ -268,6 +270,7 @@ const Bloom = struct {
|
||||
var colorExtractUniforms: struct {
|
||||
depthTexture: c_int,
|
||||
nearPlane: c_int,
|
||||
tanXY: c_int,
|
||||
@"fog.color": c_int,
|
||||
@"fog.density": c_int,
|
||||
} = undefined;
|
||||
@ -296,14 +299,15 @@ const Bloom = struct {
|
||||
buffer1.bind();
|
||||
c.glUniform1i(colorExtractUniforms.depthTexture, 4);
|
||||
if(playerBlock.typ == 0) {
|
||||
c.glUniform3fv(deferredUniforms.@"fog.color", 1, @ptrCast(&game.fog.color));
|
||||
c.glUniform1f(deferredUniforms.@"fog.density", game.fog.density);
|
||||
c.glUniform3fv(colorExtractUniforms.@"fog.color", 1, @ptrCast(&game.fog.color));
|
||||
c.glUniform1f(colorExtractUniforms.@"fog.density", game.fog.density);
|
||||
} else {
|
||||
const fogColor = blocks.meshes.fogColor(playerBlock);
|
||||
c.glUniform3f(deferredUniforms.@"fog.color", @as(f32, @floatFromInt(fogColor >> 16 & 255))/255.0, @as(f32, @floatFromInt(fogColor >> 8 & 255))/255.0, @as(f32, @floatFromInt(fogColor >> 0 & 255))/255.0);
|
||||
c.glUniform1f(deferredUniforms.@"fog.density", blocks.meshes.fogDensity(playerBlock));
|
||||
c.glUniform3f(colorExtractUniforms.@"fog.color", @as(f32, @floatFromInt(fogColor >> 16 & 255))/255.0, @as(f32, @floatFromInt(fogColor >> 8 & 255))/255.0, @as(f32, @floatFromInt(fogColor >> 0 & 255))/255.0);
|
||||
c.glUniform1f(colorExtractUniforms.@"fog.density", blocks.meshes.fogDensity(playerBlock));
|
||||
}
|
||||
c.glUniform1f(colorExtractUniforms.nearPlane, zNear);
|
||||
c.glUniform2f(colorExtractUniforms.tanXY, 1.0/game.projectionMatrix.columns[0][0], 1.0/game.projectionMatrix.columns[1][1]);
|
||||
c.glBindVertexArray(graphics.draw.rectVAO);
|
||||
c.glDrawArrays(c.GL_TRIANGLE_STRIP, 0, 4);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user