[Bf-blender-cvs] [49f5a0e8964] cycles-x: Fix background "leaking" into combined in Cycles X
Sergey Sharybin
noreply at git.blender.org
Wed Jul 21 10:16:40 CEST 2021
Commit: 49f5a0e89647966a73ea20569b1a2d3647ab5aa5
Author: Sergey Sharybin
Date: Tue Jul 20 17:18:02 2021 +0200
Branches: cycles-x
https://developer.blender.org/rB49f5a0e89647966a73ea20569b1a2d3647ab5aa5
Fix background "leaking" into combined in Cycles X
Was happening when transparent film is enabled, and Environment pass
enabled.
Test file: F10230084
Differential Revision: https://developer.blender.org/D11976
===================================================================
M intern/cycles/kernel/integrator/integrator_shade_background.h
M intern/cycles/kernel/kernel_accumulate.h
===================================================================
diff --git a/intern/cycles/kernel/integrator/integrator_shade_background.h b/intern/cycles/kernel/integrator/integrator_shade_background.h
index 5181a5c42b4..b526ef2ec08 100644
--- a/intern/cycles/kernel/integrator/integrator_shade_background.h
+++ b/intern/cycles/kernel/integrator/integrator_shade_background.h
@@ -97,8 +97,11 @@ ccl_device_inline void integrate_background(INTEGRATOR_STATE_ARGS,
bool eval_background = true;
float transparent = 0.0f;
- if (kernel_data.background.transparent &&
- (INTEGRATOR_STATE(path, flag) & PATH_RAY_TRANSPARENT_BACKGROUND)) {
+ const bool is_transparent_background_ray = kernel_data.background.transparent &&
+ (INTEGRATOR_STATE(path, flag) &
+ PATH_RAY_TRANSPARENT_BACKGROUND);
+
+ if (is_transparent_background_ray) {
transparent = average(INTEGRATOR_STATE(path, throughput));
#ifdef __PASSES__
@@ -120,7 +123,8 @@ ccl_device_inline void integrate_background(INTEGRATOR_STATE_ARGS,
}
/* Write to render buffer. */
- kernel_accum_background(INTEGRATOR_STATE_PASS, L, transparent, render_buffer);
+ kernel_accum_background(
+ INTEGRATOR_STATE_PASS, L, transparent, is_transparent_background_ray, render_buffer);
}
ccl_device_inline void integrate_distant_lights(INTEGRATOR_STATE_ARGS,
diff --git a/intern/cycles/kernel/kernel_accumulate.h b/intern/cycles/kernel/kernel_accumulate.h
index 63fdf0dc912..6e819dace31 100644
--- a/intern/cycles/kernel/kernel_accumulate.h
+++ b/intern/cycles/kernel/kernel_accumulate.h
@@ -473,6 +473,7 @@ ccl_device_inline void kernel_accum_transparent(INTEGRATOR_STATE_CONST_ARGS,
ccl_device_inline void kernel_accum_background(INTEGRATOR_STATE_CONST_ARGS,
const float3 L,
const float transparent,
+ const bool is_transparent_background_ray,
ccl_global float *ccl_restrict render_buffer)
{
float3 contribution = INTEGRATOR_STATE(path, throughput) * L;
@@ -481,7 +482,13 @@ ccl_device_inline void kernel_accum_background(INTEGRATOR_STATE_CONST_ARGS,
ccl_global float *buffer = kernel_accum_pixel_render_buffer(INTEGRATOR_STATE_PASS,
render_buffer);
- kernel_accum_combined_transparent_pass(INTEGRATOR_STATE_PASS, contribution, transparent, buffer);
+ if (is_transparent_background_ray) {
+ kernel_accum_transparent(INTEGRATOR_STATE_PASS, transparent, render_buffer);
+ }
+ else {
+ kernel_accum_combined_transparent_pass(
+ INTEGRATOR_STATE_PASS, contribution, transparent, buffer);
+ }
kernel_accum_emission_or_background_pass(
INTEGRATOR_STATE_PASS, contribution, buffer, kernel_data.film.pass_background);
}
More information about the Bf-blender-cvs
mailing list