mirror of
https://github.com/PixelGuys/Cubyz.git
synced 2025-08-03 19:28:49 -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 sampler2D depthTexture;
|
||||||
uniform float nearPlane;
|
uniform float nearPlane;
|
||||||
|
uniform vec2 tanXY;
|
||||||
|
|
||||||
struct Fog {
|
struct Fog {
|
||||||
vec3 color;
|
vec3 color;
|
||||||
@ -38,7 +39,8 @@ float calculateFogDistance(float depthBufferValue, float fogDensity) {
|
|||||||
|
|
||||||
vec3 fetch(ivec2 pos) {
|
vec3 fetch(ivec2 pos) {
|
||||||
vec4 rgba = texelFetch(color, pos, 0);
|
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;
|
vec3 fogColor = fog.color;
|
||||||
float fogFactor = exp(fogDistance);
|
float fogFactor = exp(fogDistance);
|
||||||
vec4 sourceColor = vec4(fogColor, 1);
|
vec4 sourceColor = vec4(fogColor, 1);
|
||||||
|
@ -142,10 +142,9 @@ float calculateFogDistance(float depthBufferValue, float fogDensity) {
|
|||||||
|
|
||||||
void applyFrontfaceFog(float fogDistance, vec3 fogColor) {
|
void applyFrontfaceFog(float fogDistance, vec3 fogColor) {
|
||||||
float fogFactor = exp(fogDistance);
|
float fogFactor = exp(fogDistance);
|
||||||
float oldAlpha = fragColor.a;
|
fragColor.a = 1.0/fogFactor;
|
||||||
fragColor.a *= 1.0/fogFactor;
|
fragColor.rgb = fragColor.a*fogColor;
|
||||||
fragColor.rgb += fragColor.a*fogColor;
|
fragColor.rgb -= fogColor;
|
||||||
fragColor.rgb -= oldAlpha*fogColor;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void applyBackfaceFog(float fogDistance, vec3 fogColor) {
|
void applyBackfaceFog(float fogDistance, vec3 fogColor) {
|
||||||
@ -177,10 +176,10 @@ void main() {
|
|||||||
int textureIndex = textureData[blockType].textureIndices[faceNormal];
|
int textureIndex = textureData[blockType].textureIndices[faceNormal];
|
||||||
textureIndex = textureIndex + time / animation[textureIndex].time % animation[textureIndex].frames;
|
textureIndex = textureIndex + time / animation[textureIndex].time % animation[textureIndex].frames;
|
||||||
float normalVariation = normalVariations[faceNormal];
|
float normalVariation = normalVariations[faceNormal];
|
||||||
float fogDistance = calculateFogDistance(texelFetch(depthTexture, ivec2(gl_FragCoord.xy), 0).r, textureData[blockType].fogDensity);
|
float densityAdjustment = sqrt(dot(mvVertexPos, mvVertexPos))/abs(mvVertexPos.z);
|
||||||
float airFogDistance = calculateFogDistance(texelFetch(depthTexture, ivec2(gl_FragCoord.xy), 0).r, fog.density);
|
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);
|
vec3 fogColor = unpackColor(textureData[blockType].fogColor);
|
||||||
fragColor = vec4(0, 0, 0, 1);
|
|
||||||
if(isBackFace == 0) {
|
if(isBackFace == 0) {
|
||||||
|
|
||||||
vec4 textureColor = texture(texture_sampler, vec3(getTextureCoordsNormal(startPosition/16, faceNormal), textureIndex))*vec4(ambientLight*normalVariation, 1);
|
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 sampler2D depthTexture;
|
||||||
uniform float nearPlane;
|
uniform float nearPlane;
|
||||||
|
uniform vec2 tanXY;
|
||||||
|
|
||||||
struct Fog {
|
struct Fog {
|
||||||
vec3 color;
|
vec3 color;
|
||||||
@ -37,7 +38,8 @@ float calculateFogDistance(float depthBufferValue, float fogDensity) {
|
|||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
fragColor = texture(color, texCoords);
|
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;
|
vec3 fogColor = fog.color;
|
||||||
float fogFactor = exp(fogDistance);
|
float fogFactor = exp(fogDistance);
|
||||||
vec4 sourceColor = vec4(fogColor, 1);
|
vec4 sourceColor = vec4(fogColor, 1);
|
||||||
|
@ -35,6 +35,7 @@ var deferredUniforms: struct {
|
|||||||
depthTexture: c_int,
|
depthTexture: c_int,
|
||||||
@"fog.color": c_int,
|
@"fog.color": c_int,
|
||||||
@"fog.density": c_int,
|
@"fog.density": c_int,
|
||||||
|
tanXY: c_int,
|
||||||
nearPlane: c_int,
|
nearPlane: c_int,
|
||||||
} = undefined;
|
} = 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.@"fog.density", blocks.meshes.fogDensity(playerBlock));
|
||||||
}
|
}
|
||||||
c.glUniform1f(deferredUniforms.nearPlane, zNear);
|
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);
|
c.glBindFramebuffer(c.GL_FRAMEBUFFER, activeFrameBuffer);
|
||||||
|
|
||||||
@ -268,6 +270,7 @@ const Bloom = struct {
|
|||||||
var colorExtractUniforms: struct {
|
var colorExtractUniforms: struct {
|
||||||
depthTexture: c_int,
|
depthTexture: c_int,
|
||||||
nearPlane: c_int,
|
nearPlane: c_int,
|
||||||
|
tanXY: c_int,
|
||||||
@"fog.color": c_int,
|
@"fog.color": c_int,
|
||||||
@"fog.density": c_int,
|
@"fog.density": c_int,
|
||||||
} = undefined;
|
} = undefined;
|
||||||
@ -296,14 +299,15 @@ const Bloom = struct {
|
|||||||
buffer1.bind();
|
buffer1.bind();
|
||||||
c.glUniform1i(colorExtractUniforms.depthTexture, 4);
|
c.glUniform1i(colorExtractUniforms.depthTexture, 4);
|
||||||
if(playerBlock.typ == 0) {
|
if(playerBlock.typ == 0) {
|
||||||
c.glUniform3fv(deferredUniforms.@"fog.color", 1, @ptrCast(&game.fog.color));
|
c.glUniform3fv(colorExtractUniforms.@"fog.color", 1, @ptrCast(&game.fog.color));
|
||||||
c.glUniform1f(deferredUniforms.@"fog.density", game.fog.density);
|
c.glUniform1f(colorExtractUniforms.@"fog.density", game.fog.density);
|
||||||
} else {
|
} else {
|
||||||
const fogColor = blocks.meshes.fogColor(playerBlock);
|
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.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(deferredUniforms.@"fog.density", blocks.meshes.fogDensity(playerBlock));
|
c.glUniform1f(colorExtractUniforms.@"fog.density", blocks.meshes.fogDensity(playerBlock));
|
||||||
}
|
}
|
||||||
c.glUniform1f(colorExtractUniforms.nearPlane, zNear);
|
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.glBindVertexArray(graphics.draw.rectVAO);
|
||||||
c.glDrawArrays(c.GL_TRIANGLE_STRIP, 0, 4);
|
c.glDrawArrays(c.GL_TRIANGLE_STRIP, 0, 4);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user