forked from bartvdbraak/blender
Cycles: Further tweak for Decoupled Ray Marching
Avoid some if checks when probalistic_scatter is false. Differential Revision: https://developer.blender.org/D743
This commit is contained in:
parent
c3e59379c0
commit
075f6eff74
@ -850,16 +850,16 @@ ccl_device float4 kernel_branched_path_integrate(KernelGlobals *kg, RNG *rng, in
|
||||
|
||||
VolumeIntegrateResult result = kernel_volume_decoupled_scatter(kg,
|
||||
&ps, &pray, &volume_sd, &tp, rphase, rscatter, &volume_segment, NULL, false);
|
||||
|
||||
kernel_assert(result == VOLUME_PATH_SCATTERED);
|
||||
|
||||
if(result == VOLUME_PATH_SCATTERED) {
|
||||
if(kernel_path_volume_bounce(kg, rng, &volume_sd, &tp, &ps, &L, &pray, num_samples_inv)) {
|
||||
kernel_path_indirect(kg, rng, pray, tp*num_samples_inv, num_samples, ps, &L);
|
||||
if(kernel_path_volume_bounce(kg, rng, &volume_sd, &tp, &ps, &L, &pray, num_samples_inv)) {
|
||||
kernel_path_indirect(kg, rng, pray, tp*num_samples_inv, num_samples, ps, &L);
|
||||
|
||||
/* for render passes, sum and reset indirect light pass variables
|
||||
* for the next samples */
|
||||
path_radiance_sum_indirect(&L);
|
||||
path_radiance_reset_indirect(&L);
|
||||
}
|
||||
/* for render passes, sum and reset indirect light pass variables
|
||||
* for the next samples */
|
||||
path_radiance_sum_indirect(&L);
|
||||
path_radiance_reset_indirect(&L);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -144,9 +144,8 @@ ccl_device void kernel_branched_path_volume_connect_light(KernelGlobals *kg, RNG
|
||||
|
||||
VolumeIntegrateResult result = kernel_volume_decoupled_scatter(kg,
|
||||
state, ray, sd, &tp, rphase, rscatter, segment, (ls.t != FLT_MAX)? &ls.P: NULL, false);
|
||||
|
||||
if(result != VOLUME_PATH_SCATTERED)
|
||||
continue;
|
||||
|
||||
kernel_assert(result == VOLUME_PATH_SCATTERED);
|
||||
|
||||
/* todo: split up light_sample so we don't have to call it again with new position */
|
||||
lamp_light_sample(kg, i, light_u, light_v, sd->P, &ls);
|
||||
@ -195,9 +194,8 @@ ccl_device void kernel_branched_path_volume_connect_light(KernelGlobals *kg, RNG
|
||||
|
||||
VolumeIntegrateResult result = kernel_volume_decoupled_scatter(kg,
|
||||
state, ray, sd, &tp, rphase, rscatter, segment, (ls.t != FLT_MAX)? &ls.P: NULL, false);
|
||||
|
||||
if(result != VOLUME_PATH_SCATTERED)
|
||||
continue;
|
||||
|
||||
kernel_assert(result == VOLUME_PATH_SCATTERED);
|
||||
|
||||
/* todo: split up light_sample so we don't have to call it again with new position */
|
||||
light_sample(kg, light_t, light_u, light_v, sd->time, sd->P, &ls);
|
||||
@ -234,9 +232,8 @@ ccl_device void kernel_branched_path_volume_connect_light(KernelGlobals *kg, RNG
|
||||
|
||||
VolumeIntegrateResult result = kernel_volume_decoupled_scatter(kg,
|
||||
state, ray, sd, &tp, rphase, rscatter, segment, (ls.t != FLT_MAX)? &ls.P: NULL, false);
|
||||
|
||||
if(result != VOLUME_PATH_SCATTERED)
|
||||
return;
|
||||
|
||||
kernel_assert(result == VOLUME_PATH_SCATTERED);
|
||||
|
||||
/* todo: split up light_sample so we don't have to call it again with new position */
|
||||
light_sample(kg, light_t, light_u, light_v, sd->time, sd->P, &ls);
|
||||
|
@ -732,7 +732,9 @@ ccl_device void kernel_volume_decoupled_free(KernelGlobals *kg, VolumeSegment *s
|
||||
* scattering, they always scatter if there is any non-zero scattering
|
||||
* coefficient.
|
||||
*
|
||||
* these also do not do emission or modify throughput. */
|
||||
* these also do not do emission or modify throughput.
|
||||
*
|
||||
* function is expected to return VOLUME_PATH_SCATTERED when probalistic_scatter is false */
|
||||
ccl_device VolumeIntegrateResult kernel_volume_decoupled_scatter(
|
||||
KernelGlobals *kg, PathState *state, Ray *ray, ShaderData *sd,
|
||||
float3 *throughput, float rphase, float rscatter,
|
||||
|
Loading…
Reference in New Issue
Block a user