Cycles: don't write light passes for shadow catcher objects
Makes it easier to composite the Combined image from these passes. Fixes T96758
This commit is contained in:
@@ -352,6 +352,12 @@ ccl_device_inline void kernel_accum_emission_or_background_pass(KernelGlobals kg
|
|||||||
pass_offset = pass;
|
pass_offset = pass;
|
||||||
}
|
}
|
||||||
else if (kernel_data.kernel_features & KERNEL_FEATURE_LIGHT_PASSES) {
|
else if (kernel_data.kernel_features & KERNEL_FEATURE_LIGHT_PASSES) {
|
||||||
|
/* Don't write any light passes for shadow catcher, for easier
|
||||||
|
* compositing back together of the combined pass. */
|
||||||
|
if (path_flag & PATH_RAY_SHADOW_CATCHER_HIT) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (path_flag & PATH_RAY_SURFACE_PASS) {
|
if (path_flag & PATH_RAY_SURFACE_PASS) {
|
||||||
/* Indirectly visible through reflection. */
|
/* Indirectly visible through reflection. */
|
||||||
const float3 diffuse_weight = INTEGRATOR_STATE(state, path, pass_diffuse_weight);
|
const float3 diffuse_weight = INTEGRATOR_STATE(state, path, pass_diffuse_weight);
|
||||||
@@ -437,6 +443,12 @@ ccl_device_inline void kernel_accum_light(KernelGlobals kg,
|
|||||||
if (kernel_data.film.light_pass_flag & PASS_ANY) {
|
if (kernel_data.film.light_pass_flag & PASS_ANY) {
|
||||||
const uint32_t path_flag = INTEGRATOR_STATE(state, shadow_path, flag);
|
const uint32_t path_flag = INTEGRATOR_STATE(state, shadow_path, flag);
|
||||||
|
|
||||||
|
/* Don't write any light passes for shadow catcher, for easier
|
||||||
|
* compositing back together of the combined pass. */
|
||||||
|
if (path_flag & PATH_RAY_SHADOW_CATCHER_HIT) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (kernel_data.kernel_features & KERNEL_FEATURE_LIGHT_PASSES) {
|
if (kernel_data.kernel_features & KERNEL_FEATURE_LIGHT_PASSES) {
|
||||||
int pass_offset = PASS_UNUSED;
|
int pass_offset = PASS_UNUSED;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user