Skip to content

Commit 81c6700

Browse files
slimbuckMartin Valigursky
authored andcommitted
Prevent division by zero in CAS sharpening shader (#8532)
1 parent fb99391 commit 81c6700

File tree

2 files changed

+5
-5
lines changed

2 files changed

+5
-5
lines changed

src/scene/shader-lib/glsl/chunks/render-pass/frag/compose/compose-cas.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export default /* glsl */`
1111
#ifdef CAS_HDR
1212
float maxComponent(float x, float y, float z) { return max(x, max(y, z)); }
1313
vec3 toSDR(vec3 c) { return c / (1.0 + maxComponent(c.r, c.g, c.b)); }
14-
vec3 toHDR(vec3 c) { return c / (1.0 - maxComponent(c.r, c.g, c.b)); }
14+
vec3 toHDR(vec3 c) { return c / max(1.0 - maxComponent(c.r, c.g, c.b), 1e-4); }
1515
#else
1616
vec3 toSDR(vec3 c) { return c; }
1717
vec3 toHDR(vec3 c) { return c; }
@@ -31,7 +31,7 @@ export default /* glsl */`
3131
// apply the sharpening
3232
float min_g = min(a.g, min(b.g, min(c.g, min(d.g, e.g))));
3333
float max_g = max(a.g, max(b.g, max(c.g, max(d.g, e.g))));
34-
float sharpening_amount = sqrt(min(1.0 - max_g, min_g) / max_g);
34+
float sharpening_amount = sqrt(min(1.0 - max_g, min_g) / max(max_g, 1e-4));
3535
float w = sharpening_amount * sharpness;
3636
vec3 res = (w * (a + b + d + e) + c) / (4.0 * w + 1.0);
3737

src/scene/shader-lib/wgsl/chunks/render-pass/frag/compose/compose-cas.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export default /* wgsl */`
1111
#ifdef CAS_HDR
1212
fn maxComponent(x: f32, y: f32, z: f32) -> f32 { return max(x, max(y, z)); }
1313
fn toSDR(c: vec3f) -> vec3f { return c / (1.0 + maxComponent(c.r, c.g, c.b)); }
14-
fn toHDR(c: vec3f) -> vec3f { return c / (1.0 - maxComponent(c.r, c.g, c.b)); }
14+
fn toHDR(c: vec3f) -> vec3f { return c / max(1.0 - maxComponent(c.r, c.g, c.b), 1e-4); }
1515
#else
1616
fn toSDR(c: vec3f) -> vec3f { return c; }
1717
fn toHDR(c: vec3f) -> vec3f { return c; }
@@ -31,8 +31,8 @@ export default /* wgsl */`
3131
// apply the sharpening
3232
let min_g = min(a.g, min(b.g, min(c.g, min(d.g, e.g))));
3333
let max_g = max(a.g, max(b.g, max(c.g, max(d.g, e.g))));
34-
let sharpening_amount = sqrt(min(half(1.0) - max_g, min_g) / max_g);
35-
let w = sharpening_amount * half(uniform.sharpness);
34+
let sharpening_amount = sqrt(min(half(1.0) - max_g, min_g) / max(max_g, half(1e-4)));
35+
let w = sharpening_amount * half(sharpness);
3636
var res = (w * (a + b + d + e) + c) / (half(4.0) * w + half(1.0));
3737
3838
// remove negative colors

0 commit comments

Comments
 (0)