[Bf-blender-cvs] [8919ed3] master: Cycles: Fallback to diffuse BSDF for the indirect SSS rays when BSSRDF is hit

Sergey Sharybin noreply at git.blender.org
Sat Nov 28 16:13:14 CET 2015


Commit: 8919ed3a62137259f5c94d7ebd7cfdce452371b8
Author: Sergey Sharybin
Date:   Sat Nov 28 15:38:12 2015 +0500
Branches: master
https://developer.blender.org/rB8919ed3a62137259f5c94d7ebd7cfdce452371b8

Cycles: Fallback to diffuse BSDF for the indirect SSS rays when BSSRDF is hit

This is actually how it was intended to work, just didn't notice it wasn't
really happening in the main ray loop.

Solves some memory issues reported in T46880.

===================================================================

M	intern/cycles/kernel/kernel_path.h

===================================================================

diff --git a/intern/cycles/kernel/kernel_path.h b/intern/cycles/kernel/kernel_path.h
index 251d780..850bfb2 100644
--- a/intern/cycles/kernel/kernel_path.h
+++ b/intern/cycles/kernel/kernel_path.h
@@ -448,14 +448,22 @@ ccl_device bool kernel_path_subsurface_scatter(
 
 	/* do bssrdf scatter step if we picked a bssrdf closure */
 	if(sc) {
-		/* We should never have two consecutive BSSRDF bounces,
-		 * the second one should be converted to a diffuse BSDF to
-		 * avoid this.
-		 */
-		kernel_assert(ss_indirect->num_rays == 0);
-
 		uint lcg_state = lcg_state_init(rng, state, 0x68bc21eb);
 
+		/* If indirect ray hits BSSRDF we replace it with diffuse BSDF. */
+		if(ss_indirect->num_rays) {
+			float bssrdf_u, bssrdf_v;
+			path_state_rng_2D(kg, rng, state, PRNG_BSDF_U, &bssrdf_u, &bssrdf_v);
+			subsurface_scatter_step(kg,
+			                        sd,
+			                        state->flag,
+			                        sc,
+			                        &lcg_state,
+			                        bssrdf_u, bssrdf_v,
+			                        false);
+			return false;
+		}
+
 		SubsurfaceIntersection ss_isect;
 		float bssrdf_u, bssrdf_v;
 		path_state_rng_2D(kg, rng, state, PRNG_BSDF_U, &bssrdf_u, &bssrdf_v);




More information about the Bf-blender-cvs mailing list