Skip to content

Commit a3b711c

Browse files
Swicthing to logarithmic z-slicing
1 parent 0ed6c39 commit a3b711c

3 files changed

Lines changed: 8 additions & 5 deletions

File tree

src/shaders/clustered_deferred_fullscreen.fs.wgsl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ fn main(in: FragmentInput) -> @location(0) vec4f {
9090

9191
let nearP = camera_uniforms.nearPlane;
9292
let farP = camera_uniforms.farPlane;
93-
let t: f32 = clamp((d - nearP) / (farP - nearP), 0.0, 1.0);
93+
let t: f32 = log(d / nearP) / log(farP / nearP);
9494
let zTile: u32 = u32(clamp(t * f32(Z_SLICES), 0.0, f32(Z_SLICES - 1u)));
9595

9696
let cIdx: u32 = clusterIndex(xTile, yTile, zTile);

src/shaders/clustering.cs.wgsl

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,13 @@ fn compute_cluster_bounds(ix: u32, iy: u32, iz: u32) -> AABB {
8585
let tanY = camera_uniforms.tanHalfFovY;
8686
let tanX = camera_uniforms.tanHalfFovX;
8787

88+
// Logarithmic Z slicing
89+
let nearP = camera_uniforms.nearPlane;
90+
let farP = camera_uniforms.farPlane;
8891
let t0 = f32(iz) / f32(Z_SLICES);
8992
let t1 = f32(iz + 1u) / f32(Z_SLICES);
90-
let z_near_d = lerp(camera_uniforms.nearPlane, camera_uniforms.farPlane, t0);
91-
let z_far_d = lerp(camera_uniforms.nearPlane, camera_uniforms.farPlane, t1);
93+
let z_near_d = nearP * pow(farP / nearP, t0);
94+
let z_far_d = nearP * pow(farP / nearP, t1);
9295

9396
let z0 = -z_near_d;
9497
let z1 = -z_far_d;

src/shaders/forward_plus.fs.wgsl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,10 @@ fn main(in: FragmentInput) -> @location(0) vec4f {
7979
let yTile = u32(clamp((ny * 0.5 + 0.5) * f32(Y_SLICES),
8080
0.0, f32(Y_SLICES - 1u)));
8181

82-
// Z slice (linear)
82+
// Z slice (logarithmic)
8383
let nearP = camera_uniforms.nearPlane;
8484
let farP = camera_uniforms.farPlane;
85-
let t = clamp((d - nearP) / (farP - nearP), 0.0, 1.0);
85+
let t = log(d / nearP) / log(farP / nearP);
8686
let zTile = u32(clamp(t * f32(Z_SLICES), 0.0, f32(Z_SLICES - 1u)));
8787

8888
let cIdx = clusterIndex(xTile, yTile, zTile);

0 commit comments

Comments
 (0)