Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2015-12-02 13:59:12 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2015-12-02 14:00:01 +0300
commitd0a9ec5efcebd66896b75010ee6093b505e99ad2 (patch)
tree652be7a8e9d6b69fa5382f1ecb0e71e9f8e09d74 /intern/cycles
parent3cd36f85b0948f1e33e1aaef9f300fd9a0323026 (diff)
Cycles: Fix SSS object not properly reflected in glossy object with indirect clamping
This fixes remained issues reported in T46908.
Diffstat (limited to 'intern/cycles')
-rw-r--r--intern/cycles/kernel/kernel_accumulate.h17
-rw-r--r--intern/cycles/kernel/kernel_path.h5
2 files changed, 21 insertions, 1 deletions
diff --git a/intern/cycles/kernel/kernel_accumulate.h b/intern/cycles/kernel/kernel_accumulate.h
index 2dc87fffcbc..29eca865384 100644
--- a/intern/cycles/kernel/kernel_accumulate.h
+++ b/intern/cycles/kernel/kernel_accumulate.h
@@ -339,6 +339,23 @@ ccl_device_inline void path_radiance_reset_indirect(PathRadiance *L)
#endif
}
+ccl_device_inline void path_radiance_copy_indirect(PathRadiance *L,
+ const PathRadiance *L_src)
+{
+#ifdef __PASSES__
+ if(L->use_light_pass) {
+ L->path_diffuse = L_src->path_diffuse;
+ L->path_glossy = L_src->path_glossy;
+ L->path_transmission = L_src->path_transmission;
+ L->path_subsurface = L_src->path_subsurface;
+ L->path_scatter = L_src->path_scatter;
+
+ L->direct_emission = L_src->direct_emission;
+ L->indirect = L_src->indirect;
+ }
+#endif
+}
+
ccl_device_inline float3 path_radiance_clamp_and_sum(KernelGlobals *kg, PathRadiance *L)
{
float3 L_sum;
diff --git a/intern/cycles/kernel/kernel_path.h b/intern/cycles/kernel/kernel_path.h
index 72c0f7a3c7b..82cad788eb0 100644
--- a/intern/cycles/kernel/kernel_path.h
+++ b/intern/cycles/kernel/kernel_path.h
@@ -497,6 +497,9 @@ ccl_device bool kernel_path_subsurface_scatter(
hit_state->rng_offset += PRNG_BOUNCE_NUM;
path_radiance_init(hit_L, kernel_data.film.use_light_pass);
+ hit_L->direct_throughput = L->direct_throughput;
+ path_radiance_copy_indirect(hit_L, L);
+
kernel_path_surface_connect_light(kg, rng, sd, *hit_tp, state, hit_L);
if(kernel_path_surface_bounce(kg,
@@ -524,7 +527,7 @@ ccl_device bool kernel_path_subsurface_scatter(
hit_state->volume_stack);
}
#endif
-
+ path_radiance_reset_indirect(L);
ss_indirect->num_rays++;
}
else {