diff options
author | Brecht Van Lommel <brecht@blender.org> | 2021-11-22 21:07:03 +0300 |
---|---|---|
committer | Brecht Van Lommel <brecht@blender.org> | 2021-11-22 22:58:09 +0300 |
commit | e2b736aa406e3e87a839d2f96ac9a1718ec253e3 (patch) | |
tree | 6c87cbc8af9ffb59874aa72592f0ead8dfef1a79 /intern/cycles | |
parent | ee0277271c28c49eb18b049e7ef40a45e7fa7b22 (diff) |
Fix part of T93278: transparent glass option not working with environment pass
Diffstat (limited to 'intern/cycles')
-rw-r--r-- | intern/cycles/kernel/closure/bsdf.h | 2 | ||||
-rw-r--r-- | intern/cycles/kernel/film/accumulate.h | 2 | ||||
-rw-r--r-- | intern/cycles/kernel/film/passes.h | 2 | ||||
-rw-r--r-- | intern/cycles/kernel/integrator/path_state.h | 4 | ||||
-rw-r--r-- | intern/cycles/kernel/svm/aov.h | 3 |
5 files changed, 7 insertions, 6 deletions
diff --git a/intern/cycles/kernel/closure/bsdf.h b/intern/cycles/kernel/closure/bsdf.h index 28c889f2841..f0ce45d1c2c 100644 --- a/intern/cycles/kernel/closure/bsdf.h +++ b/intern/cycles/kernel/closure/bsdf.h @@ -438,7 +438,7 @@ ccl_device_inline int bsdf_sample(KernelGlobals kg, if (label & LABEL_TRANSMIT) { float threshold_squared = kernel_data.background.transparent_roughness_squared_threshold; - if (threshold_squared >= 0.0f) { + if (threshold_squared >= 0.0f && !(label & LABEL_DIFFUSE)) { if (bsdf_get_specular_roughness_squared(sc) <= threshold_squared) { label |= LABEL_TRANSMIT_TRANSPARENT; } diff --git a/intern/cycles/kernel/film/accumulate.h b/intern/cycles/kernel/film/accumulate.h index ce338936376..d66d7d6fb70 100644 --- a/intern/cycles/kernel/film/accumulate.h +++ b/intern/cycles/kernel/film/accumulate.h @@ -499,7 +499,7 @@ ccl_device_inline void kernel_accum_light(KernelGlobals kg, /* Write shadow pass. */ if (kernel_data.film.pass_shadow != PASS_UNUSED && (path_flag & PATH_RAY_SHADOW_FOR_LIGHT) && - (path_flag & PATH_RAY_CAMERA)) { + (path_flag & PATH_RAY_TRANSPARENT_BACKGROUND)) { const float3 unshadowed_throughput = INTEGRATOR_STATE( state, shadow_path, unshadowed_throughput); const float3 shadowed_throughput = INTEGRATOR_STATE(state, shadow_path, throughput); diff --git a/intern/cycles/kernel/film/passes.h b/intern/cycles/kernel/film/passes.h index 77761709a78..269e3620388 100644 --- a/intern/cycles/kernel/film/passes.h +++ b/intern/cycles/kernel/film/passes.h @@ -177,7 +177,7 @@ ccl_device_inline void kernel_write_data_passes(KernelGlobals kg, #ifdef __PASSES__ const uint32_t path_flag = INTEGRATOR_STATE(state, path, flag); - if (!(path_flag & PATH_RAY_CAMERA)) { + if (!(path_flag & PATH_RAY_TRANSPARENT_BACKGROUND)) { return; } diff --git a/intern/cycles/kernel/integrator/path_state.h b/intern/cycles/kernel/integrator/path_state.h index eac9ceeae70..e79497320af 100644 --- a/intern/cycles/kernel/integrator/path_state.h +++ b/intern/cycles/kernel/integrator/path_state.h @@ -122,7 +122,7 @@ ccl_device_inline void path_state_next(KernelGlobals kg, IntegratorState state, /* volume scatter */ flag |= PATH_RAY_VOLUME_SCATTER; flag &= ~PATH_RAY_TRANSPARENT_BACKGROUND; - if (bounce == 1) { + if (!(flag & PATH_RAY_ANY_PASS)) { flag |= PATH_RAY_VOLUME_PASS; } @@ -184,7 +184,7 @@ ccl_device_inline void path_state_next(KernelGlobals kg, IntegratorState state, } /* Render pass categories. */ - if (bounce == 1) { + if (!(flag & PATH_RAY_ANY_PASS) && !(flag & PATH_RAY_TRANSPARENT_BACKGROUND)) { flag |= PATH_RAY_SURFACE_PASS; } } diff --git a/intern/cycles/kernel/svm/aov.h b/intern/cycles/kernel/svm/aov.h index 21ee7af7639..0beaf0babc6 100644 --- a/intern/cycles/kernel/svm/aov.h +++ b/intern/cycles/kernel/svm/aov.h @@ -23,7 +23,8 @@ CCL_NAMESPACE_BEGIN ccl_device_inline bool svm_node_aov_check(const uint32_t path_flag, ccl_global float *render_buffer) { - bool is_primary = (path_flag & PATH_RAY_CAMERA) && (!(path_flag & PATH_RAY_SINGLE_PASS_DONE)); + bool is_primary = (path_flag & PATH_RAY_TRANSPARENT_BACKGROUND) && + (!(path_flag & PATH_RAY_SINGLE_PASS_DONE)); return ((render_buffer != NULL) && is_primary); } |