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

This wasn't really a complete fix and only worked if there was a single scatter
event recorded only. Proper fix requires some more thoughts to make it correct
without memory use increase.

This reverts commit bf9e88bfbe.
This commit is contained in:
Sergey Sharybin 2015-11-27 16:41:05 +05:00
parent a28e014313
commit 175f00c89a
2 changed files with 10 additions and 15 deletions

View File

@ -77,6 +77,7 @@ 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,
@ -88,12 +89,6 @@ 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;
}

View File

@ -519,6 +519,7 @@ 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,
@ -547,6 +548,12 @@ 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
@ -577,7 +584,7 @@ ccl_device float4 kernel_path_integrate(KernelGlobals *kg, RNG *rng, int sample,
*/
Ray ss_orig_ray;
for(int ss_indirect_iter = 0; ; ss_indirect_iter++) {
for(;;) {
#endif
/* path iteration */
@ -841,20 +848,13 @@ 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,