forked from bartvdbraak/blender
Cycles / Decoupled Ray Marching: Skip consecutive empty steps.
This merges consecutive empty steps in the decoupled record function, which can lead to fewer iterations in the scatter functions. Only helps slightly though (1%), but doesn't hurt to have this. Differential Revision: https://developer.blender.org/D873
This commit is contained in:
parent
cdb47b9dfc
commit
064fa4baae
@ -649,6 +649,7 @@ ccl_device void kernel_volume_decoupled_record(KernelGlobals *kg, PathState *sta
|
||||
|
||||
segment->numsteps = 0;
|
||||
segment->closure_flag = 0;
|
||||
bool is_last_step_empty = false;
|
||||
|
||||
VolumeStep *step = segment->steps;
|
||||
|
||||
@ -690,12 +691,24 @@ ccl_device void kernel_volume_decoupled_record(KernelGlobals *kg, PathState *sta
|
||||
step->closure_flag = closure_flag;
|
||||
|
||||
segment->closure_flag |= closure_flag;
|
||||
|
||||
is_last_step_empty = false;
|
||||
segment->numsteps++;
|
||||
}
|
||||
else {
|
||||
/* store empty step (todo: skip consecutive empty steps) */
|
||||
step->sigma_t = make_float3(0.0f, 0.0f, 0.0f);
|
||||
step->sigma_s = make_float3(0.0f, 0.0f, 0.0f);
|
||||
step->closure_flag = 0;
|
||||
if(is_last_step_empty) {
|
||||
/* consecutive empty step, merge */
|
||||
step--;
|
||||
}
|
||||
else {
|
||||
/* store empty step */
|
||||
step->sigma_t = make_float3(0.0f, 0.0f, 0.0f);
|
||||
step->sigma_s = make_float3(0.0f, 0.0f, 0.0f);
|
||||
step->closure_flag = 0;
|
||||
|
||||
segment->numsteps++;
|
||||
is_last_step_empty = true;
|
||||
}
|
||||
}
|
||||
|
||||
step->accum_transmittance = accum_transmittance;
|
||||
@ -703,8 +716,6 @@ ccl_device void kernel_volume_decoupled_record(KernelGlobals *kg, PathState *sta
|
||||
step->t = new_t;
|
||||
step->shade_t = t + random_jitter_offset;
|
||||
|
||||
segment->numsteps++;
|
||||
|
||||
/* stop if at the end of the volume */
|
||||
t = new_t;
|
||||
if(t == ray->t)
|
||||
|
Loading…
Reference in New Issue
Block a user