[Bf-blender-cvs] [5d5c6bb5efe] master: Cycles: add Russian roulette termination for volume multiple scattering.
Brecht Van Lommel
noreply at git.blender.org
Thu Feb 22 00:58:58 CET 2018
Commit: 5d5c6bb5efee9bd03004845f9b1eee9d43883525
Author: Brecht Van Lommel
Date: Tue Feb 20 15:36:07 2018 +0100
Branches: master
https://developer.blender.org/rB5d5c6bb5efee9bd03004845f9b1eee9d43883525
Cycles: add Russian roulette termination for volume multiple scattering.
This mainly helps with dense volumes, rendering can be 30% faster with
little noise increase in such scenes.
===================================================================
M intern/cycles/kernel/kernel_path_volume.h
===================================================================
diff --git a/intern/cycles/kernel/kernel_path_volume.h b/intern/cycles/kernel/kernel_path_volume.h
index b6a856baf24..6275d0d6562 100644
--- a/intern/cycles/kernel/kernel_path_volume.h
+++ b/intern/cycles/kernel/kernel_path_volume.h
@@ -99,6 +99,23 @@ bool kernel_path_volume_bounce(
/* update path state */
path_state_next(kg, state, label);
+ /* Russian roulette termination of volume ray scattering. */
+ float probability = path_state_continuation_probability(kg, state, *throughput);
+
+ if(probability == 0.0f) {
+ return false;
+ }
+ else if(probability != 1.0f) {
+ /* Use dimension from the previous bounce, has not been used yet. */
+ float terminate = path_state_rng_1D(kg, state, PRNG_TERMINATE - PRNG_BOUNCE_NUM);
+
+ if(terminate >= probability) {
+ return false;
+ }
+
+ *throughput /= probability;
+ }
+
/* setup ray */
ray->P = sd->P;
ray->D = phase_omega_in;
More information about the Bf-blender-cvs
mailing list