This commit is contained in:
JMS55 2025-07-10 14:20:41 -04:00
parent fbe2fb1e2a
commit 184ad9fef5
2 changed files with 8 additions and 8 deletions

View File

@ -98,6 +98,7 @@ fn generate_initial_reservoir(world_position: vec3<f32>, world_normal: vec3<f32>
}
reservoir.sample_point_world_position = sample_point.world_position;
reservoir.sample_point_world_normal = sample_point.world_normal;
reservoir.confidence_weight = 1.0;
let sample_point_diffuse_brdf = sample_point.material.base_color / PI;
@ -203,10 +204,8 @@ struct Reservoir {
weight_sum: f32,
radiance: vec3<f32>,
confidence_weight: f32,
sample_point_world_normal: vec3<f32>,
unbiased_contribution_weight: f32,
padding1: f32,
padding2: f32,
padding3: f32,
}
fn empty_reservoir() -> Reservoir {
@ -215,9 +214,7 @@ fn empty_reservoir() -> Reservoir {
0.0,
vec3(0.0),
0.0,
0.0,
0.0,
0.0,
vec3(0.0),
0.0,
);
}
@ -243,12 +240,14 @@ fn merge_reservoirs(canonical_reservoir: Reservoir, other_reservoir: Reservoir,
if rand_f(rng) < other_resampling_weight / combined_reservoir.weight_sum {
combined_reservoir.sample_point_world_position = other_reservoir.sample_point_world_position;
combined_reservoir.sample_point_world_normal = other_reservoir.sample_point_world_normal;
combined_reservoir.radiance = other_reservoir.radiance;
let inverse_target_function = select(0.0, 1.0 / other_target_function, other_target_function > 0.0);
combined_reservoir.unbiased_contribution_weight = combined_reservoir.weight_sum * inverse_target_function;
} else {
combined_reservoir.sample_point_world_position = canonical_reservoir.sample_point_world_position;
combined_reservoir.sample_point_world_normal = canonical_reservoir.sample_point_world_normal;
combined_reservoir.radiance = canonical_reservoir.radiance;
let inverse_target_function = select(0.0, 1.0 / canonical_target_function, canonical_target_function > 0.0);

View File

@ -191,8 +191,9 @@ fn trace_emissive_mesh_visibility(light_sample: LightSample, instance_id: u32, r
}
fn trace_point_visibility(ray_origin: vec3<f32>, point: vec3<f32>) -> f32 {
let dist = distance(ray_origin, point);
let ray_direction = (point - ray_origin) / dist;
let ray = point - ray_origin;
let dist = length(ray);
let ray_direction = ray / dist;
let ray_t_max = dist - RAY_T_MIN - RAY_T_MIN;
if ray_t_max < RAY_T_MIN { return 0.0; }