[Bf-blender-cvs] [719ad4f93f8] master: Fix T100537: wrong depth pass for background after recent fix for gaps

Brecht Van Lommel noreply at git.blender.org
Mon Nov 28 21:06:57 CET 2022


Commit: 719ad4f93f83facca909ed2be69900a684ad27d0
Author: Brecht Van Lommel
Date:   Mon Nov 28 20:34:03 2022 +0100
Branches: master
https://developer.blender.org/rB719ad4f93f83facca909ed2be69900a684ad27d0

Fix T100537: wrong depth pass for background after recent fix for gaps

Also have to write if we hit the background and have not written any valid
value for the pass yet.

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

M	intern/cycles/kernel/film/data_passes.h
M	intern/cycles/kernel/integrator/shade_background.h

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

diff --git a/intern/cycles/kernel/film/data_passes.h b/intern/cycles/kernel/film/data_passes.h
index 4a63d6f8e7f..3c538a74978 100644
--- a/intern/cycles/kernel/film/data_passes.h
+++ b/intern/cycles/kernel/film/data_passes.h
@@ -157,4 +157,47 @@ ccl_device_inline void film_write_data_passes(KernelGlobals kg,
 #endif
 }
 
+ccl_device_inline void film_write_data_passes_background(
+    KernelGlobals kg, IntegratorState state, ccl_global float *ccl_restrict render_buffer)
+{
+#ifdef __PASSES__
+  const uint32_t path_flag = INTEGRATOR_STATE(state, path, flag);
+
+  if (!(path_flag & PATH_RAY_TRANSPARENT_BACKGROUND)) {
+    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)) {
+    return;
+  }
+
+  if (!(path_flag & PATH_RAY_SINGLE_PASS_DONE)) {
+    ccl_global float *buffer = film_pass_pixel_render_buffer(kg, state, render_buffer);
+
+    if (INTEGRATOR_STATE(state, path, sample) == 0) {
+      if (flag & PASSMASK(DEPTH)) {
+        film_overwrite_pass_float(buffer + kernel_data.film.pass_depth, 0.0f);
+      }
+      if (flag & PASSMASK(OBJECT_ID)) {
+        film_overwrite_pass_float(buffer + kernel_data.film.pass_object_id, 0.0f);
+      }
+      if (flag & PASSMASK(MATERIAL_ID)) {
+        film_overwrite_pass_float(buffer + kernel_data.film.pass_material_id, 0.0f);
+      }
+      if (flag & PASSMASK(POSITION)) {
+        film_overwrite_pass_float3(buffer + kernel_data.film.pass_position, zero_float3());
+      }
+    }
+  }
+#endif
+}
+
 CCL_NAMESPACE_END
diff --git a/intern/cycles/kernel/integrator/shade_background.h b/intern/cycles/kernel/integrator/shade_background.h
index 8fc5689683a..f35a6d308f7 100644
--- a/intern/cycles/kernel/integrator/shade_background.h
+++ b/intern/cycles/kernel/integrator/shade_background.h
@@ -3,6 +3,7 @@
 
 #pragma once
 
+#include "kernel/film/data_passes.h"
 #include "kernel/film/light_passes.h"
 
 #include "kernel/integrator/guiding.h"
@@ -131,6 +132,7 @@ ccl_device_inline void integrate_background(KernelGlobals kg,
 
   /* Write to render buffer. */
   film_write_background(kg, state, L, transparent, is_transparent_background_ray, render_buffer);
+  film_write_data_passes_background(kg, state, render_buffer);
 }
 
 ccl_device_inline void integrate_distant_lights(KernelGlobals kg,



More information about the Bf-blender-cvs mailing list