From 11d98c14b7554a7181eee97afb59f5e7e38abc01 Mon Sep 17 00:00:00 2001 From: Amogh Shivaram Date: Fri, 5 Sep 2025 15:31:50 +0200 Subject: [PATCH] Fix #144258: Cycles: Subsurface scattering doesn't work with shadow linking When shadow linking is enabled, `intersect_dedicated_light` is scheduled even if the `PATH_RAY_SUBSURFACE` flag is set. This checks the flag and schedules `intersect_subsurface` instead. Pull Request: https://projects.blender.org/blender/blender/pulls/145621 --- intern/cycles/kernel/integrator/shade_surface.h | 4 ++-- .../light_linking/cycles_renders/shadow_link_subsurface.png | 3 +++ .../light_linking/eevee_renders/shadow_link_subsurface.png | 3 +++ tests/files/render/light_linking/shadow_link_subsurface.blend | 3 +++ .../storm_hydra_renders/shadow_link_subsurface.png | 3 +++ .../storm_usd_renders/shadow_link_subsurface.png | 3 +++ .../workbench_renders/shadow_link_subsurface.png | 3 +++ 7 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 tests/files/render/light_linking/cycles_renders/shadow_link_subsurface.png create mode 100644 tests/files/render/light_linking/eevee_renders/shadow_link_subsurface.png create mode 100644 tests/files/render/light_linking/shadow_link_subsurface.blend create mode 100644 tests/files/render/light_linking/storm_hydra_renders/shadow_link_subsurface.png create mode 100644 tests/files/render/light_linking/storm_usd_renders/shadow_link_subsurface.png create mode 100644 tests/files/render/light_linking/workbench_renders/shadow_link_subsurface.png diff --git a/intern/cycles/kernel/integrator/shade_surface.h b/intern/cycles/kernel/integrator/shade_surface.h index 50147b3fe0c..c5eeb0d55da 100644 --- a/intern/cycles/kernel/integrator/shade_surface.h +++ b/intern/cycles/kernel/integrator/shade_surface.h @@ -853,8 +853,8 @@ ccl_device_forceinline void integrator_shade_surface(KernelGlobals kg, #ifdef __SHADOW_LINKING__ /* No need to cast shadow linking rays at a transparent bounce: the lights will be accumulated - * via the main path in this case. */ - if ((continue_path_label & LABEL_TRANSPARENT) == 0) { + * via the main path in this case. BSSRDF bounces continue with intersect_subsurface. */ + if ((continue_path_label & (LABEL_TRANSPARENT | LABEL_SUBSURFACE_SCATTER)) == 0) { if (shadow_linking_schedule_intersection_kernel(kg, state)) { return; } diff --git a/tests/files/render/light_linking/cycles_renders/shadow_link_subsurface.png b/tests/files/render/light_linking/cycles_renders/shadow_link_subsurface.png new file mode 100644 index 00000000000..52e8c686477 --- /dev/null +++ b/tests/files/render/light_linking/cycles_renders/shadow_link_subsurface.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5a91fbde725ce09f7b1ed027b8b4189e4e438b30578ec16a0015b04872e88a5 +size 34689 diff --git a/tests/files/render/light_linking/eevee_renders/shadow_link_subsurface.png b/tests/files/render/light_linking/eevee_renders/shadow_link_subsurface.png new file mode 100644 index 00000000000..45510daa4ae --- /dev/null +++ b/tests/files/render/light_linking/eevee_renders/shadow_link_subsurface.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b6e642ab8b29384c7540dff2065879cd43c48c9ef2224313fc9e9458afce071 +size 16506 diff --git a/tests/files/render/light_linking/shadow_link_subsurface.blend b/tests/files/render/light_linking/shadow_link_subsurface.blend new file mode 100644 index 00000000000..41d0e5bee20 --- /dev/null +++ b/tests/files/render/light_linking/shadow_link_subsurface.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a9e5bf28b961e4cbb05085e49cb6282fcaf2d9606753ffbc49be6b385b8e718 +size 127031 diff --git a/tests/files/render/light_linking/storm_hydra_renders/shadow_link_subsurface.png b/tests/files/render/light_linking/storm_hydra_renders/shadow_link_subsurface.png new file mode 100644 index 00000000000..17986c2e01e --- /dev/null +++ b/tests/files/render/light_linking/storm_hydra_renders/shadow_link_subsurface.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd607c96be815874eed7b4b1ded7ec2c13b3d9b3dd1f051e775e2568189f219f +size 12579 diff --git a/tests/files/render/light_linking/storm_usd_renders/shadow_link_subsurface.png b/tests/files/render/light_linking/storm_usd_renders/shadow_link_subsurface.png new file mode 100644 index 00000000000..0a42fbe392e --- /dev/null +++ b/tests/files/render/light_linking/storm_usd_renders/shadow_link_subsurface.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:373b485614560094a60c696e9a8e8f8b8f859402b6231c3c66b8a0f6f6f5d9d7 +size 12706 diff --git a/tests/files/render/light_linking/workbench_renders/shadow_link_subsurface.png b/tests/files/render/light_linking/workbench_renders/shadow_link_subsurface.png new file mode 100644 index 00000000000..00dc25107fd --- /dev/null +++ b/tests/files/render/light_linking/workbench_renders/shadow_link_subsurface.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f16ef0f55d7dd3d501c6db2361566e6d866dec405002b0d4e86df684fa443ec7 +size 9162