[Bf-blender-cvs] [ca5062071c6] blender-v3.4-release: Fix T100537: wrong depth pass for background after recent fix for gaps
Brecht Van Lommel
noreply at git.blender.org
Mon Nov 28 20:58:35 CET 2022
Commit: ca5062071c6fd2db919da776a77f61bff2ad2132
Author: Brecht Van Lommel
Date: Mon Nov 28 20:34:03 2022 +0100
Branches: blender-v3.4-release
https://developer.blender.org/rBca5062071c6fd2db919da776a77f61bff2ad2132
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