[Bf-blender-cvs] [bf9e88b] master: Cycles: Fix wrong SSS with regular path tracing and clamping enabled

Sergey Sharybin noreply at git.blender.org
Thu Nov 26 12:14:07 CET 2015


Commit: bf9e88bfbebaf5c6228363560970fa526e779c8b
Author: Sergey Sharybin
Date:   Thu Nov 26 16:11:41 2015 +0500
Branches: master
https://developer.blender.org/rBbf9e88bfbebaf5c6228363560970fa526e779c8b

Cycles: Fix wrong SSS with regular path tracing and clamping enabled

Radiance sum and reset was happening in different order after 26f1c51.

This is a quick fix to unlock Caminandes team, perhaps we can avoid having
separate variable to detect when radiance is to be sum.

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

M	intern/cycles/kernel/kernel_bake.h
M	intern/cycles/kernel/kernel_path.h

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

diff --git a/intern/cycles/kernel/kernel_bake.h b/intern/cycles/kernel/kernel_bake.h
index 3efd7ec..192cba6 100644
--- a/intern/cycles/kernel/kernel_bake.h
+++ b/intern/cycles/kernel/kernel_bake.h
@@ -77,7 +77,6 @@ ccl_device void compute_light_pass(KernelGlobals *kg, ShaderData *sd, PathRadian
 				while(ss_indirect.num_rays) {
 					kernel_path_subsurface_setup_indirect(kg,
 					                                      &ss_indirect,
-					                                      &L_sample,
 					                                      &state,
 					                                      &ray,
 					                                      &ray,
@@ -89,6 +88,12 @@ ccl_device void compute_light_pass(KernelGlobals *kg, ShaderData *sd, PathRadian
 					                     state.num_samples,
 					                     &state,
 					                     &L_sample);
+
+					/* For render passes, sum and reset indirect light pass variables
+					 * for the next samples.
+					 */
+					path_radiance_sum_indirect(&L_sample);
+					path_radiance_reset_indirect(&L_sample);
 				}
 				is_sss_sample = true;
 			}
diff --git a/intern/cycles/kernel/kernel_path.h b/intern/cycles/kernel/kernel_path.h
index 885782f..b362228 100644
--- a/intern/cycles/kernel/kernel_path.h
+++ b/intern/cycles/kernel/kernel_path.h
@@ -519,7 +519,6 @@ ccl_device bool kernel_path_subsurface_scatter(
 ccl_device void kernel_path_subsurface_setup_indirect(
         KernelGlobals *kg,
         SubsurfaceIndirectRays *ss_indirect,
-        PathRadiance *L,
         PathState *state,
         Ray *orig_ray,
         Ray *ray,
@@ -548,12 +547,6 @@ ccl_device void kernel_path_subsurface_setup_indirect(
 #endif
 
 	*ray = *indirect_ray;
-
-	/* For render passes, sum and reset indirect light pass variables
-	 * for the next samples.
-	 */
-	path_radiance_sum_indirect(L);
-	path_radiance_reset_indirect(L);
 }
 #endif
 
@@ -584,7 +577,7 @@ ccl_device float4 kernel_path_integrate(KernelGlobals *kg, RNG *rng, int sample,
 	 */
 	Ray ss_orig_ray;
 
-	for(;;) {
+	for(int ss_indirect_iter = 0; ; ss_indirect_iter++) {
 #endif
 
 	/* path iteration */
@@ -848,13 +841,20 @@ ccl_device float4 kernel_path_integrate(KernelGlobals *kg, RNG *rng, int sample,
 	}
 
 #ifdef __SUBSURFACE__
+		if(ss_indirect_iter != 0) {
+			/* For render passes, sum and reset indirect light pass variables
+			 * for the next samples.
+			 */
+			path_radiance_sum_indirect(&L);
+			path_radiance_reset_indirect(&L);
+		}
+
 		/* Trace indirect subsurface rays by restarting the loop. this uses less
 		 * stack memory than invoking kernel_path_indirect.
 		 */
 		if(ss_indirect.num_rays) {
 			kernel_path_subsurface_setup_indirect(kg,
 			                                      &ss_indirect,
-			                                      &L,
 			                                      &state,
 			                                      &ss_orig_ray,
 			                                      &ray,




More information about the Bf-blender-cvs mailing list