21#ifdef __TRANSPARENT_SHADOWS__
56 volume_stack_enter_exit<true>(kg,
state, shadow_sd);
72 const int num_recorded_hits,
95 shader_setup_from_volume(shadow_sd, &ray,
OBJECT_NONE);
98 const float step_size = volume_stack_step_size<true>(kg,
state);
99 volume_shadow_ray_marching(kg,
state, &ray, shadow_sd, throughput, step_size);
102 volume_shadow_null_scattering(kg,
state, &ray, shadow_sd, throughput);
115 for (
uint hit = 0; hit < num_recorded_hits + 1; hit++) {
119 if (!integrator_state_shadow_volume_stack_is_empty(kg,
state)) {
121 integrate_transparent_volume_shadow(kg,
state, hit, num_recorded_hits, &throughput);
132 if (hit < num_recorded_hits) {
133 const Spectrum shadow = integrate_transparent_surface_shadow(kg,
state, hit);
171#ifdef __TRANSPARENT_SHADOWS__
173 const bool opaque = integrate_transparent_shadow(kg,
state, num_hits);
ccl_device_forceinline float intersection_t_offset(const float t)
#define VOLUME_BOUNDS_MAX
#define ccl_optional_struct_init
#define AS_SHADER_DATA(shader_data_tiny_storage)
#define INTEGRATOR_SHADOW_ISECT_SIZE
const ThreadKernelGlobalsCPU * KernelGlobals
#define ccl_device_inline
#define CCL_NAMESPACE_END
ccl_gpu_kernel_postfix ccl_global KernelWorkTile const int ccl_global float * render_buffer
ccl_device_forceinline void guiding_record_direct_light(KernelGlobals kg, IntegratorShadowState state)
ShaderData ShaderDataTinyStorage
@ DEVICE_KERNEL_INTEGRATOR_SHADE_SHADOW
@ DEVICE_KERNEL_INTEGRATOR_INTERSECT_SHADOW
ccl_device_inline void film_write_direct_light(KernelGlobals kg, ConstIntegratorShadowState state, ccl_global float *ccl_restrict render_buffer)
ccl_device_inline bool is_zero(const float2 a)
#define PROFILING_INIT(kg, event)
@ PROFILING_SHADE_SHADOW_SURFACE
@ PROFILING_SHADE_SHADOW_VOLUME
@ PROFILING_SHADE_SHADOW_SETUP
ccl_device void integrator_shade_shadow(KernelGlobals kg, IntegratorShadowState state, ccl_global float *ccl_restrict render_buffer)
CCL_NAMESPACE_BEGIN ccl_device_inline bool shadow_intersections_has_remaining(const uint num_hits)
ccl_device_inline void shader_setup_from_ray(KernelGlobals kg, ccl_private ShaderData *ccl_restrict sd, const ccl_private Ray *ccl_restrict ray, const ccl_private Intersection *ccl_restrict isect)
IntegratorShadowStateCPU * IntegratorShadowState
#define INTEGRATOR_STATE_WRITE(state, nested_struct, member)
#define INTEGRATOR_STATE(state, nested_struct, member)
#define INTEGRATOR_STATE_ARRAY(state, nested_struct, array_index, member)
ccl_device_forceinline void integrator_shadow_path_terminate(IntegratorShadowState state, const DeviceKernel current_kernel)
ccl_device_forceinline void integrator_shadow_path_next(IntegratorShadowState state, const DeviceKernel current_kernel, const DeviceKernel next_kernel)
ccl_device_forceinline void integrator_state_read_shadow_ray(ConstIntegratorShadowState state, ccl_private Ray *ccl_restrict ray)
ccl_device_forceinline void integrator_state_read_shadow_isect(ConstIntegratorShadowState state, ccl_private Intersection *ccl_restrict isect, const int index)
ccl_device void surface_shader_eval(KernelGlobals kg, ConstIntegratorGenericState state, ccl_private ShaderData *ccl_restrict sd, ccl_global float *ccl_restrict buffer, const uint32_t path_flag, bool use_caustics_storage=false)
ccl_device Spectrum surface_shader_transparency(const ccl_private ShaderData *sd)