28 state->rng_hash = rng_hash;
32 state->branch_factor = 1.0f;
35 state->diffuse_bounce = 0;
36 state->glossy_bounce = 0;
37 state->transmission_bounce = 0;
38 state->transparent_bounce = 0;
40 #ifdef __DENOISING_FEATURES__
43 state->denoising_feature_weight = 1.0f;
47 state->denoising_feature_weight = 0.0f;
52 state->min_ray_pdf = FLT_MAX;
53 state->ray_pdf = 0.0f;
59 state->volume_bounce = 0;
60 state->volume_bounds_bounce = 0;
64 kernel_volume_stack_init(
kg, stack_sd,
state, ray,
state->volume_stack);
80 state->transparent_bounce++;
81 if (
state->transparent_bounce >=
kernel_data.integrator.transparent_max_bounce) {
107 state->volume_bounce++;
121 state->diffuse_bounce++;
127 state->glossy_bounce++;
142 state->transmission_bounce++;
143 if (
state->transmission_bounce >=
kernel_data.integrator.max_transmission_bounce) {
164 #ifdef __DENOISING_FEATURES__
176 state->volume_bounds_bounce++;
182 if (
state->volume_bounds_bounce > 1) {
215 if (
state->transparent_bounce <=
kernel_data.integrator.transparent_min_bounce) {
218 #ifdef __SHADOW_TRICKS__
230 #ifdef __SHADOW_TRICKS__
259 int bounce =
state->bounce -
state->transmission_bounce - (
state->glossy_bounce > 0);
260 return (bounce >
kernel_data.integrator.ao_bounces);
267 if (num_branches > 1) {
270 state->sample =
state->sample * num_branches + branch;
271 state->num_samples =
state->num_samples * num_branches;
272 state->branch_factor *= num_branches;
#define kernel_assert(cond)
#define ccl_device_inline
#define CCL_NAMESPACE_END
ccl_device_inline bool path_state_ao_bounce(KernelGlobals *kg, ccl_addr_space PathState *state)
ccl_device_inline void path_state_modify_bounce(ccl_addr_space PathState *state, bool increase)
ccl_device_inline void path_state_next(KernelGlobals *kg, ccl_addr_space PathState *state, int label)
ccl_device_inline float path_state_continuation_probability(KernelGlobals *kg, ccl_addr_space PathState *state, const float3 throughput)
ccl_device_inline void path_state_branch(ccl_addr_space PathState *state, int branch, int num_branches)
CCL_NAMESPACE_BEGIN ccl_device_inline void path_state_init(KernelGlobals *kg, ShaderData *stack_sd, ccl_addr_space PathState *state, uint rng_hash, int sample, ccl_addr_space Ray *ray)
ccl_device_inline uint path_state_ray_visibility(KernelGlobals *kg, ccl_addr_space PathState *state)
#define VOLUME_BOUNDS_MAX
@ PATH_RAY_STORE_SHADOW_INFO
@ PATH_RAY_TERMINATE_AFTER_TRANSPARENT
@ PATH_RAY_SHADOW_CATCHER
@ PATH_RAY_VOLUME_SCATTER
@ PATH_RAY_TERMINATE_IMMEDIATE
@ PATH_RAY_ALL_VISIBILITY
@ PATH_RAY_TRANSPARENT_BACKGROUND
@ PATH_RAY_DIFFUSE_ANCESTOR
@ LABEL_TRANSMIT_TRANSPARENT
static void sample(SocketReader *reader, int x, int y, float color[4])
ccl_device_inline float2 fabs(const float2 &a)
ccl_device_inline float3 one_float3()
ccl_device_inline float3 zero_float3()
ccl_device_inline float max3(float3 a)