From 8dfc948fe310def8acec71adf0b3487ccaa5ee17 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Mon, 10 Feb 2025 22:41:30 +0300 Subject: [PATCH] update main shader --- res/shaders/main.glslf | 7 ++----- res/shaders/main.glslv | 9 +++++++++ src/graphics/render/PrecipitationRenderer.cpp | 1 + src/graphics/render/WorldRenderer.cpp | 2 ++ 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/res/shaders/main.glslf b/res/shaders/main.glslf index 12e96eab..17ca954d 100644 --- a/res/shaders/main.glslf +++ b/res/shaders/main.glslf @@ -1,20 +1,18 @@ in vec4 a_color; in vec2 a_texCoord; in float a_distance; +in float a_fog; in vec3 a_dir; out vec4 f_color; uniform sampler2D u_texture0; uniform samplerCube u_cubemap; uniform vec3 u_fogColor; -uniform float u_fogFactor; -uniform float u_fogCurve; uniform bool u_alphaClip; void main() { vec3 fogColor = texture(u_cubemap, a_dir).rgb; vec4 tex_color = texture(u_texture0, a_texCoord); - float depth = (a_distance/256.0); float alpha = a_color.a * tex_color.a; if (u_alphaClip) { if (alpha < 0.2f) @@ -24,7 +22,6 @@ void main() { if (alpha < 0.002f) discard; } - f_color = mix(a_color * tex_color, vec4(fogColor,1.0), - min(1.0, pow(depth*u_fogFactor, u_fogCurve))); + f_color = mix(a_color * tex_color, vec4(fogColor,1.0), a_fog); f_color.a = alpha; } diff --git a/res/shaders/main.glslv b/res/shaders/main.glslv index ba3687e8..7219b799 100644 --- a/res/shaders/main.glslv +++ b/res/shaders/main.glslv @@ -7,6 +7,7 @@ layout (location = 2) in float v_light; out vec4 a_color; out vec2 a_texCoord; out float a_distance; +out float a_fog; out vec3 a_dir; uniform mat4 u_model; @@ -14,6 +15,10 @@ uniform mat4 u_proj; uniform mat4 u_view; uniform vec3 u_cameraPos; uniform float u_gamma; +uniform float u_fogFactor; +uniform float u_fogCurve; +uniform float u_weatherFogOpacity; +uniform float u_weatherFogDencity; uniform samplerCube u_cubemap; uniform vec3 u_torchlightColor; @@ -35,6 +40,10 @@ void main() { a_dir = modelpos.xyz - u_cameraPos; vec3 skyLightColor = pick_sky_color(u_cubemap); a_color.rgb = max(a_color.rgb, skyLightColor.rgb*decomp_light.a); + a_distance = length(u_view * u_model * vec4(pos3d * FOG_POS_SCALE, 0.0)); + float depth = (a_distance / 256.0); + a_fog = min(1.0, max(pow(depth * u_fogFactor, u_fogCurve), + min(depth * u_weatherFogDencity, u_weatherFogOpacity))); gl_Position = u_proj * u_view * modelpos; } diff --git a/src/graphics/render/PrecipitationRenderer.cpp b/src/graphics/render/PrecipitationRenderer.cpp index 1050afd4..21dcfba4 100644 --- a/src/graphics/render/PrecipitationRenderer.cpp +++ b/src/graphics/render/PrecipitationRenderer.cpp @@ -97,6 +97,7 @@ void PrecipitationRenderer::render(const Camera& camera, float delta) { WeatherPreset weather {}; auto& fall = weather.fall; + fall.vspeed = 2.0f; fall.texture = "misc/rain"; const int radius = 6; diff --git a/src/graphics/render/WorldRenderer.cpp b/src/graphics/render/WorldRenderer.cpp index 1d1b99c3..0e40cf8a 100644 --- a/src/graphics/render/WorldRenderer.cpp +++ b/src/graphics/render/WorldRenderer.cpp @@ -119,6 +119,8 @@ void WorldRenderer::setupWorldShader( shader.uniform1f("u_gamma", settings.graphics.gamma.get()); shader.uniform1f("u_fogFactor", fogFactor); shader.uniform1f("u_fogCurve", settings.graphics.fogCurve.get()); + shader.uniform1f("u_weatherFogOpacity", 0.8f); + shader.uniform1f("u_weatherFogDencity", 2.0f); shader.uniform1f("u_dayTime", level.getWorld()->getInfo().daytime); shader.uniform2f("u_lightDir", skybox->getLightDir()); shader.uniform3f("u_cameraPos", camera.position);