33 if (kfilm_convert->pass_sample_count ==
PASS_UNUSED) {
34 return kfilm_convert->scale;
37 if (kfilm_convert->pass_use_filter) {
38 const uint sample_count = *(
39 (
const ccl_global uint *)(buffer + kfilm_convert->pass_sample_count));
40 return kfilm_convert->scale / sample_count;
43 return kfilm_convert->scale;
50 if (kfilm_convert->pass_sample_count ==
PASS_UNUSED) {
51 return kfilm_convert->scale_exposure;
56 if (kfilm_convert->pass_use_exposure) {
57 return scale * kfilm_convert->exposure;
69 if (kfilm_convert->pass_sample_count ==
PASS_UNUSED) {
70 *scale = kfilm_convert->scale;
71 *scale_exposure = kfilm_convert->scale_exposure;
75 const uint sample_count = *(
76 (
const ccl_global uint *)(buffer + kfilm_convert->pass_sample_count));
79 *scale_exposure = 0.0f;
83 if (kfilm_convert->pass_use_filter) {
84 *scale = kfilm_convert->scale / sample_count;
87 *scale = kfilm_convert->scale;
90 if (kfilm_convert->pass_use_exposure) {
91 *scale_exposure = *scale * kfilm_convert->exposure;
94 *scale_exposure = *scale;
114 const ccl_global float *
in = buffer + kfilm_convert->pass_offset;
117 pixel[0] = (f == 0.0f) ? 1e10f : f * scale_exposure;
130 const ccl_global float *
in = buffer + kfilm_convert->pass_offset;
135 pixel[0] =
saturatef(1.0f - f * scale_exposure);
151 const ccl_global float *
in = buffer + kfilm_convert->pass_offset;
167 const ccl_global float *
in = buffer + kfilm_convert->pass_offset;
171 pixel[0] = (*
count != 0.0f) ?
expf(-(f * scale_exposure) / *
count) : 0.0f;
182 const ccl_global float *
in = buffer + kfilm_convert->pass_offset;
200 const ccl_global float *
in = buffer + kfilm_convert->pass_offset;
203 pixel[0] = f * scale_exposure;
219 const ccl_global float *
in = buffer + kfilm_convert->pass_offset;
224 const ccl_global float *in_indirect = buffer + kfilm_convert->pass_indirect;
225 const float3 f_indirect =
make_float3(in_indirect[0], in_indirect[1], in_indirect[2]);
231 const ccl_global float *in_divide = buffer + kfilm_convert->pass_divide;
236 f *= kfilm_convert->exposure;
248 if (kfilm_convert->num_components >= 4) {
251 float scale_exposure;
254 const ccl_global float *in_combined = buffer + kfilm_convert->pass_combined;
255 const float alpha = in_combined[3] * scale;
274 const ccl_global float *
in = buffer + kfilm_convert->pass_offset;
283 if (kfilm_convert->num_components >= 4) {
286 float scale_exposure;
289 const ccl_global float *in_combined = buffer + kfilm_convert->pass_combined;
290 const float alpha = in_combined[3] * scale;
312 const ccl_global float *
in = buffer + kfilm_convert->pass_offset;
313 const ccl_global float *in_weight = buffer + kfilm_convert->pass_motion_weight;
315 const float weight = in_weight[0];
316 const float weight_inv = (weight > 0.0f) ? 1.0f / weight : 0.0f;
336 const ccl_global float *
in = buffer + kfilm_convert->pass_offset;
343 pixel[1] = f.
y * scale;
345 pixel[3] = f.
w * scale;
357 float scale_exposure;
360 const ccl_global float *
in = buffer + kfilm_convert->pass_offset;
363 const float alpha =
in[3] * scale;
384 float scale_exposure;
393 const ccl_global float *
in = buffer + kfilm_convert->pass_offset;
396 const float alpha =
in[3] * scale;
415 float scale_exposure;
418 const ccl_global float *in_catcher = buffer + kfilm_convert->pass_shadow_catcher;
420 const float3 pixel =
make_float3(in_catcher[0], in_catcher[1], in_catcher[2]) * scale_exposure;
431 x = (
b.x != 0.0f) ? a.
x /
b.x : 1.0f;
432 y = (
b.y != 0.0f) ? a.
y /
b.y : 1.0f;
433 z = (
b.z != 0.0f) ? a.
z /
b.z : 1.0f;
446 if (kfilm_convert->is_denoised) {
454 const ccl_global float *in_catcher_sample_count =
455 buffer + kfilm_convert->pass_shadow_catcher_sample_count;
456 const float num_samples = in_catcher_sample_count[0];
457 if (num_samples == 0.0f) {
462 const ccl_global float *in_catcher = buffer + kfilm_convert->pass_shadow_catcher;
472 const ccl_global float *in_combined = buffer + kfilm_convert->pass_combined;
473 const ccl_global float *in_matte = buffer + kfilm_convert->pass_shadow_catcher_matte;
477 const float3 color_catcher =
make_float3(in_catcher[0], in_catcher[1], in_catcher[2]);
478 const float3 color_combined =
make_float3(in_combined[0], in_combined[1], in_combined[2]);
485 const float3 combined_no_matte = color_combined - color_matte;
490 const float transparency = in_combined[3] * scale;
497 const float3 pixel = (1.0f - alpha) *
one_float3() + alpha * shadow_catcher;
517 float scale_exposure;
522 const ccl_global float *in_matte = buffer + kfilm_convert->pass_shadow_catcher_matte;
525 const float3 color_matte =
make_float3(in_matte[0], in_matte[1], in_matte[2]) * scale_exposure;
527 const float transparency = in_matte[3] * scale;
528 const float alpha =
saturatef(1.0f - transparency);
530 const float alpha_matte = (1.0f - alpha) * (1.0f -
saturatef(
average(shadow_catcher))) + alpha;
532 if (kfilm_convert->use_approximate_shadow_catcher_background) {
535 const ccl_global float *in_background = buffer + kfilm_convert->pass_background;
537 in_background[0], in_background[1], in_background[2]) *
539 const float3 alpha_over = color_matte + color_background * (1.0f - alpha_matte);
555 pixel[0] = pixel_value.
x;
556 pixel[1] = pixel_value.
y;
557 pixel[2] = pixel_value.
z;
565 kernel_assert(kfilm_convert->num_components == 3 || kfilm_convert->num_components == 4);
570 pixel[0] = pixel_value.
x;
571 pixel[1] = pixel_value.
y;
572 pixel[2] = pixel_value.
z;
573 if (kfilm_convert->num_components == 4) {
574 pixel[3] = pixel_value.
w;
587 if (kfilm_convert->show_active_pixels && kfilm_convert->pass_adaptive_aux_buffer !=
PASS_UNUSED)
589 if (buffer[kfilm_convert->pass_adaptive_aux_buffer + 3] == 0.0f) {
592 pixel[0] = mix_rgb.
x;
593 pixel[1] = mix_rgb.
y;
594 pixel[2] = mix_rgb.
z;
SIMD_FORCE_INLINE const btScalar & z() const
Return the z value.
ccl_device_inline float3 safe_divide_even_color(const float3 a, const float3 b)
#define kernel_assert(cond)
#define ccl_device_forceinline
#define ccl_device_inline
#define CCL_NAMESPACE_END
ccl_device_inline float interp(const float a, const float b, const float t)
ccl_device_inline float3 one_float3()
CCL_NAMESPACE_BEGIN ccl_device_inline float4 zero_float4()
ccl_device_inline float3 film_calculate_shadow_catcher(const ccl_global KernelFilmConvert *ccl_restrict kfilm_convert, const ccl_global float *ccl_restrict buffer)
ccl_device_inline void film_get_pass_pixel_sample_count(const ccl_global KernelFilmConvert *ccl_restrict kfilm_convert, const ccl_global float *ccl_restrict buffer, ccl_private float *ccl_restrict pixel)
ccl_device_inline void film_get_pass_pixel_depth(const ccl_global KernelFilmConvert *ccl_restrict kfilm_convert, const ccl_global float *ccl_restrict buffer, ccl_private float *ccl_restrict pixel)
ccl_device_inline void film_get_pass_pixel_light_path(const ccl_global KernelFilmConvert *ccl_restrict kfilm_convert, const ccl_global float *ccl_restrict buffer, ccl_private float *ccl_restrict pixel)
ccl_device_inline void film_get_pass_pixel_cryptomatte(const ccl_global KernelFilmConvert *ccl_restrict kfilm_convert, const ccl_global float *ccl_restrict buffer, ccl_private float *ccl_restrict pixel)
ccl_device_inline float4 film_calculate_shadow_catcher_matte_with_shadow(const ccl_global KernelFilmConvert *ccl_restrict kfilm_convert, const ccl_global float *ccl_restrict buffer)
ccl_device_inline void film_get_pass_pixel_shadow_catcher(const ccl_global KernelFilmConvert *ccl_restrict kfilm_convert, const ccl_global float *ccl_restrict buffer, ccl_private float *ccl_restrict pixel)
ccl_device_inline void film_get_pass_pixel_rgbe(const ccl_global KernelFilmConvert *ccl_restrict kfilm_convert, const ccl_global float *ccl_restrict buffer, ccl_private float *ccl_restrict pixel)
ccl_device_inline void film_get_pass_pixel_mist(const ccl_global KernelFilmConvert *ccl_restrict kfilm_convert, const ccl_global float *ccl_restrict buffer, ccl_private float *ccl_restrict pixel)
ccl_device_inline void film_get_pass_pixel_float3(const ccl_global KernelFilmConvert *ccl_restrict kfilm_convert, const ccl_global float *ccl_restrict buffer, ccl_private float *ccl_restrict pixel)
ccl_device_inline bool film_get_scale_and_scale_exposure(const ccl_global KernelFilmConvert *ccl_restrict kfilm_convert, const ccl_global float *ccl_restrict buffer, ccl_private float *ccl_restrict scale, ccl_private float *ccl_restrict scale_exposure)
ccl_device_inline void film_get_pass_pixel_float(const ccl_global KernelFilmConvert *ccl_restrict kfilm_convert, const ccl_global float *ccl_restrict buffer, ccl_private float *ccl_restrict pixel)
CCL_NAMESPACE_BEGIN ccl_device_forceinline float film_transparency_to_alpha(const float transparency)
ccl_device_inline void film_get_pass_pixel_shadow_catcher_matte_with_shadow(const ccl_global KernelFilmConvert *ccl_restrict kfilm_convert, const ccl_global float *ccl_restrict buffer, ccl_private float *ccl_restrict pixel)
ccl_device_inline void film_get_pass_pixel_motion(const ccl_global KernelFilmConvert *ccl_restrict kfilm_convert, const ccl_global float *ccl_restrict buffer, ccl_private float *ccl_restrict pixel)
ccl_device_inline float3 film_calculate_shadow_catcher_denoised(const ccl_global KernelFilmConvert *ccl_restrict kfilm_convert, const ccl_global float *ccl_restrict buffer)
ccl_device_inline float3 safe_divide_shadow_catcher(const float3 a, const float3 b)
ccl_device_inline void film_get_pass_pixel_volume_majorant(const ccl_global KernelFilmConvert *ccl_restrict kfilm_convert, const ccl_global float *ccl_restrict buffer, ccl_private float *ccl_restrict pixel)
ccl_device_inline float film_get_scale(const ccl_global KernelFilmConvert *ccl_restrict kfilm_convert, const ccl_global float *ccl_restrict buffer)
ccl_device_inline void film_get_pass_pixel_float4(const ccl_global KernelFilmConvert *ccl_restrict kfilm_convert, const ccl_global float *ccl_restrict buffer, ccl_private float *ccl_restrict pixel)
ccl_device_inline void film_apply_pass_pixel_overlays_rgba(const ccl_global KernelFilmConvert *ccl_restrict kfilm_convert, const ccl_global float *ccl_restrict buffer, ccl_private float *ccl_restrict pixel)
ccl_device_inline void film_get_pass_pixel_combined(const ccl_global KernelFilmConvert *ccl_restrict kfilm_convert, const ccl_global float *ccl_restrict buffer, ccl_private float *ccl_restrict pixel)
ccl_device_inline float film_get_scale_exposure(const ccl_global KernelFilmConvert *ccl_restrict kfilm_convert, const ccl_global float *ccl_restrict buffer)
ccl_device_inline float3 rgbe_to_rgb(const RGBE rgbe)