[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