From b84fcfbb1934afae08f064ec6db597e3f1c556b9 Mon Sep 17 00:00:00 2001 From: Imitater967 Date: Fri, 5 Apr 2024 05:28:09 +0800 Subject: [PATCH] fix(rendering): fix bloom not working (#78) --- assets/shaders/highPass_frag.glsl | 13 ++++--------- .../rendering/dag/nodes/HighPassNode.java | 6 +++++- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/assets/shaders/highPass_frag.glsl b/assets/shaders/highPass_frag.glsl index 5c7837d..a4b667c 100644 --- a/assets/shaders/highPass_frag.glsl +++ b/assets/shaders/highPass_frag.glsl @@ -6,19 +6,14 @@ in vec2 v_uv0; uniform sampler2D tex; uniform float highPassThreshold; +uniform float highPassIntensity; layout(location = 0) out vec4 outColor; void main() { vec4 color = texture(tex, v_uv0.xy); - // vec3 brightColor = max(color.rgb - vec3(highPassThreshold), vec3(0.0)); - float relativeLuminance = dot(vec3(0.2126, 0.7152, 0.0722),color.rgb - vec3(highPassThreshold)); - // bright = smoothstep(0.0, 0.5, bright); - - if(relativeLuminance * highPassThreshold > 1.0) { - outColor.rgba = vec4(color.rgb, 1); - } else { - outColor.rgba = vec4(0); - } + float relativeLuminance = dot(vec3(0.2125, 0.7154, 0.0721), color.rgb); + relativeLuminance = clamp(relativeLuminance - highPassThreshold, 0, 1); + outColor = color * relativeLuminance * highPassIntensity; } diff --git a/src/main/java/org/terasology/corerendering/rendering/dag/nodes/HighPassNode.java b/src/main/java/org/terasology/corerendering/rendering/dag/nodes/HighPassNode.java index abfeec7..1ebc84a 100644 --- a/src/main/java/org/terasology/corerendering/rendering/dag/nodes/HighPassNode.java +++ b/src/main/java/org/terasology/corerendering/rendering/dag/nodes/HighPassNode.java @@ -35,9 +35,12 @@ public class HighPassNode extends ConditionDependentNode { public static final FboConfig HIGH_PASS_FBO_CONFIG = new FboConfig(HIGH_PASS_FBO_URI, FULL_SCALE, FBO.Type.DEFAULT); private static final ResourceUrn HIGH_PASS_MATERIAL_URN = new ResourceUrn("CoreRendering:highPass"); + @SuppressWarnings("FieldCanBeLocal") + @Range(min = 0.0f, max = 1.0f) + private float highPassThreshold = 0.02f; @SuppressWarnings("FieldCanBeLocal") @Range(min = 0.0f, max = 5.0f) - private float highPassThreshold = 0.05f; + private float highPassIntensity = 0.6f; private Material highPass; private Mesh renderQuad; @@ -86,6 +89,7 @@ public void process() { PerformanceMonitor.startActivity("rendering/" + getUri()); highPass.setFloat("highPassThreshold", highPassThreshold, true); + highPass.setFloat("highPassIntensity", highPassIntensity, true); renderQuad.render();