Commit: dbda302d13529566de6889845ea3d0c9c84b6831 Author: Brecht Van Lommel Date: Fri Jul 9 17:02:06 2021 +0200 Branches: cycles-x https://developer.blender.org/rBdbda302d13529566de6889845ea3d0c9c84b6831
Cycles X: restore shadow pass Differential Revision: https://developer.blender.org/D11896 =================================================================== M intern/cycles/blender/addon/properties.py M intern/cycles/integrator/pass_accessor.cpp M intern/cycles/integrator/pass_accessor.h M intern/cycles/integrator/pass_accessor_cpu.cpp M intern/cycles/integrator/pass_accessor_cpu.h M intern/cycles/integrator/pass_accessor_gpu.cpp M intern/cycles/integrator/pass_accessor_gpu.h M intern/cycles/kernel/device/cuda/kernel.cu M intern/cycles/kernel/integrator/integrator_shade_surface.h M intern/cycles/kernel/integrator/integrator_shade_volume.h M intern/cycles/kernel/integrator/integrator_state_template.h M intern/cycles/kernel/kernel_accumulate.h M intern/cycles/kernel/kernel_film.h M intern/cycles/kernel/kernel_types.h M intern/cycles/render/film.cpp M intern/cycles/render/light.cpp M intern/cycles/render/pass.cpp =================================================================== diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py index 96d0569bd0d..1df57e5bef2 100644 --- a/intern/cycles/blender/addon/properties.py +++ b/intern/cycles/blender/addon/properties.py @@ -132,6 +132,7 @@ enum_view3d_shading_render_pass = ( ('EMISSION', "Emission", "Show the Emission render pass"), ('BACKGROUND', "Background", "Show the Background render pass"), ('AO', "Ambient Occlusion", "Show the Ambient Occlusion render pass"), + ('SHADOW', "Shadow", "Show the Shadow render pass"), ('SHADOW_CATCHER', "Shadow Catcher", "Show the Shadow Catcher render pass"), ('', "Light", ""), diff --git a/intern/cycles/integrator/pass_accessor.cpp b/intern/cycles/integrator/pass_accessor.cpp index 00f0302838a..cc767523b4f 100644 --- a/intern/cycles/integrator/pass_accessor.cpp +++ b/intern/cycles/integrator/pass_accessor.cpp @@ -193,9 +193,6 @@ bool PassAccessor::get_render_tile_pixels(const RenderBuffers *render_buffers, /* Denoised passes store their final pixels, no need in special calculation. */ get_pass_float3(render_buffers, buffer_params, destination); } - else if (type == PASS_SHADOW) { - get_pass_shadow(render_buffers, buffer_params, destination); - } else if (pass_info.divide_type != PASS_NONE) { /* RGB lighting passes that need to divide out color */ get_pass_divide_even_color(render_buffers, buffer_params, destination); @@ -221,9 +218,6 @@ bool PassAccessor::get_render_tile_pixels(const RenderBuffers *render_buffers, /* Denoised passes store their final pixels, no need in special calculation. */ get_pass_float4(render_buffers, buffer_params, destination); } - else if (type == PASS_SHADOW) { - get_pass_shadow(render_buffers, buffer_params, destination); - } else if (type == PASS_MOTION) { get_pass_motion(render_buffers, buffer_params, destination); } diff --git a/intern/cycles/integrator/pass_accessor.h b/intern/cycles/integrator/pass_accessor.h index 88f605830dd..9aa4d995c41 100644 --- a/intern/cycles/integrator/pass_accessor.h +++ b/intern/cycles/integrator/pass_accessor.h @@ -142,9 +142,6 @@ class PassAccessor { DECLARE_PASS_ACCESSOR(shadow_catcher_matte_with_shadow) DECLARE_PASS_ACCESSOR(float4) - /* Float3 or Float4 passes. */ - DECLARE_PASS_ACCESSOR(shadow) - #undef DECLARE_PASS_ACCESSOR PassAccessInfo pass_access_info_; diff --git a/intern/cycles/integrator/pass_accessor_cpu.cpp b/intern/cycles/integrator/pass_accessor_cpu.cpp index af6890f304b..2966c28c379 100644 --- a/intern/cycles/integrator/pass_accessor_cpu.cpp +++ b/intern/cycles/integrator/pass_accessor_cpu.cpp @@ -170,9 +170,6 @@ DEFINE_PASS_ACCESSOR(shadow_catcher) DEFINE_PASS_ACCESSOR(shadow_catcher_matte_with_shadow) DEFINE_PASS_ACCESSOR(float4) -/* Float3 or Float4 passes. */ -DEFINE_PASS_ACCESSOR(shadow) - #undef DEFINE_PASS_ACCESSOR CCL_NAMESPACE_END diff --git a/intern/cycles/integrator/pass_accessor_cpu.h b/intern/cycles/integrator/pass_accessor_cpu.h index 905c7ac9980..f3cc050aa08 100644 --- a/intern/cycles/integrator/pass_accessor_cpu.h +++ b/intern/cycles/integrator/pass_accessor_cpu.h @@ -70,9 +70,6 @@ class PassAccessorCPU : public PassAccessor { DECLARE_PASS_ACCESSOR(shadow_catcher_matte_with_shadow) DECLARE_PASS_ACCESSOR(float4) - /* Float3 or Float4 passes. */ - DECLARE_PASS_ACCESSOR(shadow) - #undef DECLARE_PASS_ACCESSOR }; diff --git a/intern/cycles/integrator/pass_accessor_gpu.cpp b/intern/cycles/integrator/pass_accessor_gpu.cpp index a4a3d78ffed..19f91044b38 100644 --- a/intern/cycles/integrator/pass_accessor_gpu.cpp +++ b/intern/cycles/integrator/pass_accessor_gpu.cpp @@ -103,9 +103,6 @@ DEFINE_PASS_ACCESSOR(shadow_catcher, SHADOW_CATCHER); DEFINE_PASS_ACCESSOR(shadow_catcher_matte_with_shadow, SHADOW_CATCHER_MATTE_WITH_SHADOW); DEFINE_PASS_ACCESSOR(float4, FLOAT4); -/* Float3 or Float4 passes. */ -DEFINE_PASS_ACCESSOR(shadow, SHADOW); - #undef DEFINE_PASS_ACCESSOR CCL_NAMESPACE_END diff --git a/intern/cycles/integrator/pass_accessor_gpu.h b/intern/cycles/integrator/pass_accessor_gpu.h index 7eb16936f0c..aaf4b8321c1 100644 --- a/intern/cycles/integrator/pass_accessor_gpu.h +++ b/intern/cycles/integrator/pass_accessor_gpu.h @@ -59,9 +59,6 @@ class PassAccessorGPU : public PassAccessor { DECLARE_PASS_ACCESSOR(shadow_catcher_matte_with_shadow); DECLARE_PASS_ACCESSOR(float4); - /* Float3 or Float4 passes. */ - DECLARE_PASS_ACCESSOR(shadow); - #undef DECLARE_PASS_ACCESSOR DeviceQueue *queue_; diff --git a/intern/cycles/kernel/device/cuda/kernel.cu b/intern/cycles/kernel/device/cuda/kernel.cu index fffbe663d72..14da02cc809 100644 --- a/intern/cycles/kernel/device/cuda/kernel.cu +++ b/intern/cycles/kernel/device/cuda/kernel.cu @@ -624,8 +624,6 @@ KERNEL_FILM_CONVERT_DEFINE(shadow_catcher, rgba) KERNEL_FILM_CONVERT_DEFINE(shadow_catcher_matte_with_shadow, rgba) KERNEL_FILM_CONVERT_DEFINE(float4, rgba) -KERNEL_FILM_CONVERT_DEFINE(shadow, rgb) - # undef KERNEL_FILM_CONVERT_DEFINE # undef KERNEL_FILM_CONVERT_HALF_RGBA_DEFINE # undef KERNEL_FILM_CONVERT_PROC diff --git a/intern/cycles/kernel/integrator/integrator_shade_surface.h b/intern/cycles/kernel/integrator/integrator_shade_surface.h index eefbcad87de..aafb6f3a072 100644 --- a/intern/cycles/kernel/integrator/integrator_shade_surface.h +++ b/intern/cycles/kernel/integrator/integrator_shade_surface.h @@ -190,6 +190,10 @@ ccl_device_forceinline void integrate_surface_direct_light(INTEGRATOR_STATE_ARGS INTEGRATOR_STATE_WRITE(shadow_path, transparent_bounce) = transparent_bounce; INTEGRATOR_STATE_WRITE(shadow_path, throughput) = throughput; + if (kernel_data.kernel_features & KERNEL_FEATURE_SHADOW_PASS) { + INTEGRATOR_STATE_WRITE(shadow_path, unshadowed_throughput) = throughput; + } + /* Branch off shadow kernel. */ INTEGRATOR_SHADOW_PATH_INIT(DEVICE_KERNEL_INTEGRATOR_INTERSECT_SHADOW); } diff --git a/intern/cycles/kernel/integrator/integrator_shade_volume.h b/intern/cycles/kernel/integrator/integrator_shade_volume.h index c95ac43168c..d01f3b6cc71 100644 --- a/intern/cycles/kernel/integrator/integrator_shade_volume.h +++ b/intern/cycles/kernel/integrator/integrator_shade_volume.h @@ -598,6 +598,10 @@ ccl_device_forceinline void integrate_volume_direct_light(INTEGRATOR_STATE_ARGS, INTEGRATOR_STATE_WRITE(shadow_path, transparent_bounce) = transparent_bounce; INTEGRATOR_STATE_WRITE(shadow_path, throughput) = throughput; + if (kernel_data.kernel_features & KERNEL_FEATURE_SHADOW_PASS) { + INTEGRATOR_STATE_WRITE(shadow_path, unshadowed_throughput) = throughput; + } + integrator_state_copy_volume_stack_to_shadow(INTEGRATOR_STATE_PASS); /* Branch off shadow kernel. */ diff --git a/intern/cycles/kernel/integrator/integrator_state_template.h b/intern/cycles/kernel/integrator/integrator_state_template.h index 36a42d30dea..13f565b29de 100644 --- a/intern/cycles/kernel/integrator/integrator_state_template.h +++ b/intern/cycles/kernel/integrator/integrator_state_template.h @@ -119,6 +119,8 @@ KERNEL_STRUCT_MEMBER(shadow_path, uint32_t, queued_kernel, KERNEL_FEATURE_PATH_T KERNEL_STRUCT_MEMBER(shadow_path, uint32_t, flag, KERNEL_FEATURE_PATH_TRACING) /* Throughput. */ KERNEL_STRUCT_MEMBER(shadow_path, float3, throughput, KERNEL_FEATURE_PATH_TRACING) +/* Throughput for shadow pass. */ +KERNEL_STRUCT_MEMBER(shadow_path, float3, unshadowed_throughput, KERNEL_FEATURE_SHADOW_PASS) /* Ratio of throughput to distinguish diffuse and glossy render passes. */ KERNEL_STRUCT_MEMBER(shadow_path, float3, diffuse_glossy_ratio, KERNEL_FEATURE_LIGHT_PASSES) /* Number of intersections found by ray-tracing. */ diff --git a/intern/cycles/kernel/kernel_accumulate.h b/intern/cycles/kernel/kernel_accumulate.h index f5850ec9258..7417ad126d3 100644 --- a/intern/cycles/kernel/kernel_accumulate.h +++ b/intern/cycles/kernel/kernel_accumulate.h @@ -116,193 +116,6 @@ ccl_device_forceinline void kernel_accum_clamp(const KernelGlobals *kg, float3 * #endif } -/* -------------------------------------------------------------------- - * Legacy functions. - * - * TODO: Seems to be mainly related to shadow catcher, which is about to have new implementation. - * Some other code is related to clamping, which is done in `kernel_accum_clamp()`. Port remaining - * parts over, remove legacy code. - */ - -#if 0 -ccl_device_inline void path_radiance_accum_light(const KernelGlobals *kg, - PathRadiance *L, - ccl_addr_space PathState *state, - float3 throughput, - BsdfEval *bsdf_eval, - float3 shadow, - float shadow_fac, - bool is_lamp) -{ -# ifdef __SHADOW_TRICKS__ - if (state->flag & PATH_RAY_STORE_SHADOW_INFO) { - float3 light = throughput * bsdf_eval->sum_no_mis; - L->path_total += light; - L->path_total_shaded += shadow * light; - - if (state->flag & PATH_RAY_SHADOW_CATCHER) { - return; - } - } -# endif -} - -ccl_device_inline void path_radiance_accum_total_light(PathRadiance *L, - ccl_addr_space PathState *state, - float3 throughput, - const BsdfEval *bsdf_eval) -{ -# ifdef __SHADOW_TRICKS__ - if (state->flag & PATH_RAY_STORE_SHADOW_INFO) { - L->path_total += throughput * bsdf_eval->sum_no_mis; - } -# else - (void)L; - (void)state; - (void)throughput; - (void)bsdf_eval; -# endif -} - -ccl_device_inline void path_radiance_accum_background(const KernelGlobals *kg, - PathRadiance *L, - ccl_addr_space PathState *state, - float3 throughput, - float3 value) -{ - @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list [email protected] List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
