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 1.0f / sample_count;
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 = 1.0f / sample_count;
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;
170 pixel[0] = f * scale_exposure;
186 const ccl_global float *
in = buffer + kfilm_convert->pass_offset;
191 const ccl_global float *in_indirect = buffer + kfilm_convert->pass_indirect;
192 const float3 f_indirect =
make_float3(in_indirect[0], in_indirect[1], in_indirect[2]);
198 const ccl_global float *in_divide = buffer + kfilm_convert->pass_divide;
203 f *= kfilm_convert->exposure;
215 if (kfilm_convert->num_components >= 4) {
218 float scale_exposure;
221 const ccl_global float *in_combined = buffer + kfilm_convert->pass_combined;
222 const float alpha = in_combined[3] * scale;
241 const ccl_global float *
in = buffer + kfilm_convert->pass_offset;
250 if (kfilm_convert->num_components >= 4) {
253 float scale_exposure;
256 const ccl_global float *in_combined = buffer + kfilm_convert->pass_combined;
257 const float alpha = in_combined[3] * scale;
279 const ccl_global float *
in = buffer + kfilm_convert->pass_offset;
280 const ccl_global float *in_weight = buffer + kfilm_convert->pass_motion_weight;
282 const float weight = in_weight[0];
283 const float weight_inv = (weight > 0.0f) ? 1.0f / weight : 0.0f;
303 const ccl_global float *
in = buffer + kfilm_convert->pass_offset;
310 pixel[1] = f.y * scale;
312 pixel[3] = f.w * scale;
324 float scale_exposure;
327 const ccl_global float *
in = buffer + kfilm_convert->pass_offset;
330 const float alpha =
in[3] * scale;
351 float scale_exposure;
360 const ccl_global float *
in = buffer + kfilm_convert->pass_offset;
363 const float alpha =
in[3] * scale;
382 float scale_exposure;
385 const ccl_global float *in_catcher = buffer + kfilm_convert->pass_shadow_catcher;
387 const float3 pixel =
make_float3(in_catcher[0], in_catcher[1], in_catcher[2]) * scale_exposure;
398 x = (
b.x != 0.0f) ? a.
x /
b.x : 1.0f;
399 y = (
b.y != 0.0f) ? a.
y /
b.y : 1.0f;
400 z = (
b.z != 0.0f) ? a.
z /
b.z : 1.0f;
413 if (kfilm_convert->is_denoised) {
421 const ccl_global float *in_catcher_sample_count =
422 buffer + kfilm_convert->pass_shadow_catcher_sample_count;
423 const float num_samples = in_catcher_sample_count[0];
424 if (num_samples == 0.0f) {
429 const ccl_global float *in_catcher = buffer + kfilm_convert->pass_shadow_catcher;
439 const ccl_global float *in_combined = buffer + kfilm_convert->pass_combined;
440 const ccl_global float *in_matte = buffer + kfilm_convert->pass_shadow_catcher_matte;
444 const float3 color_catcher =
make_float3(in_catcher[0], in_catcher[1], in_catcher[2]);
445 const float3 color_combined =
make_float3(in_combined[0], in_combined[1], in_combined[2]);
452 const float3 combined_no_matte = color_combined - color_matte;
457 const float transparency = in_combined[3] * scale;
464 const float3 pixel = (1.0f - alpha) *
one_float3() + alpha * shadow_catcher;
484 float scale_exposure;
489 const ccl_global float *in_matte = buffer + kfilm_convert->pass_shadow_catcher_matte;
492 const float3 color_matte =
make_float3(in_matte[0], in_matte[1], in_matte[2]) * scale_exposure;
494 const float transparency = in_matte[3] * scale;
495 const float alpha =
saturatef(1.0f - transparency);
497 const float alpha_matte = (1.0f - alpha) * (1.0f -
saturatef(
average(shadow_catcher))) + alpha;
499 if (kfilm_convert->use_approximate_shadow_catcher_background) {
502 const ccl_global float *in_background = buffer + kfilm_convert->pass_background;
504 in_background[0], in_background[1], in_background[2]) *
506 const float3 alpha_over = color_matte + color_background * (1.0f - alpha_matte);
522 pixel[0] = pixel_value.
x;
523 pixel[1] = pixel_value.
y;
524 pixel[2] = pixel_value.
z;
532 kernel_assert(kfilm_convert->num_components == 3 || kfilm_convert->num_components == 4);
537 pixel[0] = pixel_value.x;
538 pixel[1] = pixel_value.y;
539 pixel[2] = pixel_value.z;
540 if (kfilm_convert->num_components == 4) {
541 pixel[3] = pixel_value.w;
554 if (kfilm_convert->show_active_pixels && kfilm_convert->pass_adaptive_aux_buffer !=
PASS_UNUSED)
556 if (buffer[kfilm_convert->pass_adaptive_aux_buffer + 3] == 0.0f) {
559 pixel[0] = mix_rgb.
x;
560 pixel[1] = mix_rgb.
y;
561 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
VecBase< float, 4 > float4
ccl_device_inline float interp(const float a, const float b, const float t)
ccl_device_inline float average(const float2 a)
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_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 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)