@@ -112,7 +112,6 @@ fn generate_initial_reservoir(world_position: vec3<f32>, world_normal: vec3<f32>
112
112
reservoir . unbiased_contribution_weight = reservoir . weight_sum * inverse_target_function ;
113
113
114
114
reservoir . visibility = trace_light_visibility (reservoir . sample, world_position );
115
- reservoir . unbiased_contribution_weight *= reservoir . visibility;
116
115
}
117
116
118
117
reservoir . confidence_weight = 1.0 ;
@@ -175,8 +174,8 @@ fn load_spatial_reservoir(pixel_id: vec2<u32>, depth: f32, world_position: vec3<
175
174
}
176
175
177
176
fn get_neighbor_pixel_id (center_pixel_id : vec2 <u32 >, rng : ptr <function , u32 >) -> vec2 <u32 > {
178
- var spatial_id = vec2 <i32 >(center_pixel_id ) + vec2 < i32 >( sample_disk (SPATIAL_REUSE_RADIUS_PIXELS, rng ) );
179
- spatial_id = clamp (spatial_id , vec2 (0i ), vec2 < i32 >( view . viewport. zw) - 1i );
177
+ var spatial_id = vec2 <f32 >(center_pixel_id ) + sample_disk (SPATIAL_REUSE_RADIUS_PIXELS, rng );
178
+ spatial_id = clamp (spatial_id , vec2 (0.0 ), view . viewport. zw - 1.0 );
180
179
return vec2 <u32 >(spatial_id );
181
180
}
182
181
@@ -288,7 +287,7 @@ fn merge_reservoirs(
288
287
289
288
fn reservoir_target_function (reservoir : Reservoir , world_position : vec3 <f32 >, world_normal : vec3 <f32 >, diffuse_brdf : vec3 <f32 >) -> vec4 <f32 > {
290
289
if ! reservoir_valid (reservoir ) { return vec4 (0.0 ); }
291
- let light_contribution = calculate_light_contribution (reservoir . sample, world_position , world_normal ). radiance;
290
+ let light_contribution = calculate_light_contribution (reservoir . sample, world_position , world_normal ). radiance * reservoir . visibility ;
292
291
let target_function = luminance (light_contribution * diffuse_brdf );
293
292
return vec4 (light_contribution , target_function );
294
293
}
0 commit comments