[Bf-blender-cvs] [347c82be6db] master: Fix T98951: Shadow catcher objects are double-counting data passes

Lukas Stockner noreply at git.blender.org
Sat Dec 17 01:45:14 CET 2022


Commit: 347c82be6dba0e35aca1e9fe2e417b256998786f
Author: Lukas Stockner
Date:   Sun Nov 27 02:40:11 2022 +0100
Branches: master
https://developer.blender.org/rB347c82be6dba0e35aca1e9fe2e417b256998786f

Fix T98951: Shadow catcher objects are double-counting data passes

Differential Revision: https://developer.blender.org/D16627

===================================================================

M	intern/cycles/kernel/film/data_passes.h
M	intern/cycles/kernel/film/denoising_passes.h

===================================================================

diff --git a/intern/cycles/kernel/film/data_passes.h b/intern/cycles/kernel/film/data_passes.h
index 3c538a74978..0ed5828ff30 100644
--- a/intern/cycles/kernel/film/data_passes.h
+++ b/intern/cycles/kernel/film/data_passes.h
@@ -33,6 +33,12 @@ ccl_device_inline void film_write_data_passes(KernelGlobals kg,
     return;
   }
 
+  /* Don't write data passes for paths that were split off for shadow catchers
+   * to avoid double-counting. */
+  if (path_flag & PATH_RAY_SHADOW_CATCHER_PASS) {
+    return;
+  }
+
   const int flag = kernel_data.film.pass_flag;
 
   if (!(flag & PASS_ANY)) {
diff --git a/intern/cycles/kernel/film/denoising_passes.h b/intern/cycles/kernel/film/denoising_passes.h
index dfc21d787f2..0a32df19a3e 100644
--- a/intern/cycles/kernel/film/denoising_passes.h
+++ b/intern/cycles/kernel/film/denoising_passes.h
@@ -16,7 +16,8 @@ ccl_device_forceinline void film_write_denoising_features_surface(KernelGlobals
                                                                   ccl_global float *ccl_restrict
                                                                       render_buffer)
 {
-  if (!(INTEGRATOR_STATE(state, path, flag) & PATH_RAY_DENOISING_FEATURES)) {
+  const uint32_t path_flag = INTEGRATOR_STATE(state, path, flag);
+  if (!(path_flag & PATH_RAY_DENOISING_FEATURES)) {
     return;
   }
 
@@ -25,6 +26,12 @@ ccl_device_forceinline void film_write_denoising_features_surface(KernelGlobals
     return;
   }
 
+  /* Don't write denoising passes for paths that were split off for shadow catchers
+   * to avoid double-counting. */
+  if (path_flag & PATH_RAY_SHADOW_CATCHER_PASS) {
+    return;
+  }
+
   ccl_global float *buffer = film_pass_pixel_render_buffer(kg, state, render_buffer);
 
   if (kernel_data.film.pass_denoising_depth != PASS_UNUSED) {



More information about the Bf-blender-cvs mailing list