34 eval->diffuse = value;
41 if (
dot(sc->N, wo) > 0.0f) {
62 eval->diffuse += value;
65 eval->glossy += value;
68 if (
dot(sc->N, wo) > 0.0f) {
69 eval->glossy += value;
88 eval->diffuse *= value;
89 eval->glossy *= value;
95 eval->diffuse *= value;
96 eval->glossy *= value;
130#ifdef __KERNEL_DEBUG_NAN__
132 kernel_assert(!
"Cycles sample with non-finite value detected");
140#ifdef __CLAMP_SAMPLE__
141 const float limit = (bounce > 0) ?
kernel_data.integrator.sample_clamp_indirect :
162 const int sample_offset)
194 contribution_rgb.
y * 2.0f,
195 contribution_rgb.
z * 2.0f,
204 const uint32_t path_flag,
209 pass_offset =
kernel_data.film.pass_volume_transmit;
212 pass_offset =
kernel_data.film.pass_volume_scatter;
224#ifdef __SHADOW_CATCHER__
232 const uint32_t path_flag,
244 if (kernel_shadow_catcher_is_matte_path(path_flag)) {
252 if (kernel_shadow_catcher_is_object_pass(path_flag)) {
261 const uint32_t path_flag,
263 const float transparent,
278 if (kernel_shadow_catcher_is_matte_path(path_flag)) {
289 if (kernel_shadow_catcher_is_object_pass(path_flag)) {
301 const uint32_t path_flag,
302 const float transparent,
312 if (kernel_shadow_catcher_is_matte_path(path_flag)) {
344 const uint32_t path_flag,
349#ifdef __SHADOW_CATCHER__
350 if (film_write_shadow_catcher(kg, path_flag, contribution, buffer)) {
365 const uint32_t path_flag,
368 const float transparent,
371#ifdef __SHADOW_CATCHER__
372 if (film_write_shadow_catcher_transparent(kg, path_flag, contribution, transparent, buffer)) {
406# ifdef __DENOISING_FEATURES__
410 state, path, denoising_feature_throughput);
411 const Spectrum denoising_albedo = denoising_feature_throughput * contribution;
429 else if (is_shadowcatcher) {
458 transmission_weight * contribution);
466 contribution *= diffuse_weight;
556 transmission_weight * contribution);
564 contribution *= diffuse_weight;
589 const uint32_t path_flag,
590 const float transparent,
597#ifdef __SHADOW_CATCHER__
598 film_write_shadow_catcher_transparent_only(kg, path_flag, transparent, buffer);
611 const uint32_t path_flag,
612 const float transparent,
625 const float transparent,
626 const bool is_transparent_background_ray,
635 if (is_transparent_background_ray) {
666 kg,
state, contribution, buffer,
kernel_data.film.pass_emission, lightgroup);
672 const float mis_weight,
685 kg,
state, contribution, buffer,
kernel_data.film.pass_emission, lightgroup);
MINLINE float safe_divide(float a, float b)
ATOMIC_INLINE uint32_t atomic_fetch_and_add_uint32(uint32_t *p, uint32_t x)
static T sum(const btAlignedObjectArray< T > &items)
dot(value.rgb, luminance_coefficients)") DEFINE_VALUE("REDUCE(lhs
#define kernel_assert(cond)
#define CLOSURE_IS_GLASS(type)
#define ccl_device_forceinline
#define CLOSURE_IS_BSDF_GLOSSY(type)
const ThreadKernelGlobalsCPU * KernelGlobals
#define ccl_device_inline
#define KERNEL_FEATURE_LIGHT_PASSES
#define KERNEL_FEATURE_AO_PASS
#define CLOSURE_IS_BSDF_DIFFUSE(type)
#define KERNEL_FEATURE_AO_ADDITIVE
#define CCL_NAMESPACE_END
ccl_gpu_kernel_postfix ccl_global KernelWorkTile const int ccl_global float * render_buffer
@ PATH_RAY_SHADOW_CATCHER_HIT
@ PATH_RAY_VOLUME_SCATTER
@ PATH_RAY_DENOISING_FEATURES
@ PATH_RAY_SHADOW_CATCHER_BACKGROUND
@ PATH_RAY_VOLUME_PRIMARY_TRANSMIT
ccl_device_inline float3 spectrum_to_rgb(Spectrum s)
ccl_device_inline void film_write_background(KernelGlobals kg, ConstIntegratorState state, const Spectrum L, const float transparent, const bool is_transparent_background_ray, ccl_global float *ccl_restrict render_buffer)
ccl_device_inline void film_write_surface_emission(KernelGlobals kg, ConstIntegratorState state, const Spectrum L, const float mis_weight, ccl_global float *ccl_restrict render_buffer, const int lightgroup=LIGHTGROUP_NONE)
ccl_device_inline void film_write_direct_light(KernelGlobals kg, ConstIntegratorShadowState state, ccl_global float *ccl_restrict render_buffer)
ccl_device void film_write_adaptive_buffer(KernelGlobals kg, const int sample, const Spectrum contribution, ccl_global float *ccl_restrict buffer)
ccl_device_inline void film_write_holdout(KernelGlobals kg, ConstIntegratorState state, const uint32_t path_flag, const float transparent, ccl_global float *ccl_restrict render_buffer)
ccl_device_inline bool bsdf_eval_is_zero(ccl_private BsdfEval *eval)
ccl_device_inline void film_write_volume_emission(KernelGlobals kg, ConstIntegratorState state, const Spectrum L, ccl_global float *ccl_restrict render_buffer, const int lightgroup=LIGHTGROUP_NONE)
CCL_NAMESPACE_BEGIN ccl_device_inline void bsdf_eval_init(ccl_private BsdfEval *eval, const ccl_private ShaderClosure *sc, const float3 wo, Spectrum value)
ccl_device_inline void film_write_combined_pass(KernelGlobals kg, const uint32_t path_flag, const int sample, const Spectrum contribution, ccl_global float *ccl_restrict buffer)
ccl_device_inline Spectrum bsdf_eval_pass_glossy_weight(const ccl_private BsdfEval *eval)
ccl_device_inline void bsdf_eval_accum(ccl_private BsdfEval *eval, const ccl_private ShaderClosure *sc, const float3 wo, Spectrum value)
ccl_device_inline void bsdf_eval_mul(ccl_private BsdfEval *eval, const float value)
ccl_device_inline int film_write_sample(KernelGlobals kg, ConstIntegratorState state, ccl_global float *ccl_restrict render_buffer, const int sample, const int sample_offset)
ccl_device_inline Spectrum bsdf_eval_sum(const ccl_private BsdfEval *eval)
ccl_device_inline void film_write_emission_or_background_pass(KernelGlobals kg, ConstIntegratorState state, Spectrum contribution, ccl_global float *ccl_restrict buffer, const int pass, const int lightgroup=LIGHTGROUP_NONE)
ccl_device_forceinline void film_clamp_light(KernelGlobals kg, ccl_private Spectrum *L, const int bounce)
ccl_device_inline Spectrum bsdf_eval_pass_diffuse_weight(const ccl_private BsdfEval *eval)
ccl_device_inline void film_write_transparent(KernelGlobals kg, const uint32_t path_flag, const float transparent, ccl_global float *ccl_restrict buffer)
ccl_device_inline void film_write_volume_scattering_guiding_pass(KernelGlobals kg, ccl_global float *ccl_restrict buffer, const uint32_t path_flag, const Spectrum contribution)
ccl_device_inline void film_write_combined_transparent_pass(KernelGlobals kg, const uint32_t path_flag, const int sample, const Spectrum contribution, const float transparent, ccl_global float *ccl_restrict buffer)
ccl_device_inline float ensure_finite(const float v)
ccl_device_inline bool isfinite_safe(const float f)
ccl_device_inline dual1 reduce_add(const dual< T > a)
ccl_device_inline bool is_zero(const float2 a)
ccl_device_inline float2 fabs(const float2 a)
ccl_device_inline bool sample_is_class_A(const int pattern, const int sample)
#define INTEGRATOR_STATE(state, nested_struct, member)
const IntegratorShadowStateCPU * ConstIntegratorShadowState
IntegratorStateCPU * IntegratorState
const IntegratorStateCPU * ConstIntegratorState
ccl_device_inline void film_write_pass_float4(ccl_global float *ccl_restrict buffer, const float4 value)
ccl_device_inline void film_write_pass_spectrum(ccl_global float *ccl_restrict buffer, Spectrum value)
ccl_device_forceinline ccl_global float * film_pass_pixel_render_buffer_shadow(KernelGlobals kg, ConstIntegratorShadowState state, ccl_global float *ccl_restrict render_buffer)
ccl_device_inline void film_write_pass_float(ccl_global float *ccl_restrict buffer, const float value)
CCL_NAMESPACE_BEGIN ccl_device_forceinline ccl_global float * film_pass_pixel_render_buffer(KernelGlobals kg, ConstIntegratorState state, ccl_global float *ccl_restrict render_buffer)