29 if (kfilm_convert->pass_sample_count ==
PASS_UNUSED) {
30 return kfilm_convert->scale;
33 if (kfilm_convert->pass_use_filter) {
34 const uint sample_count = *(
35 (
ccl_global const uint *)(buffer + kfilm_convert->pass_sample_count));
36 return 1.0f / sample_count;
46 if (kfilm_convert->pass_sample_count ==
PASS_UNUSED) {
47 return kfilm_convert->scale_exposure;
52 if (kfilm_convert->pass_use_exposure) {
53 return scale * kfilm_convert->exposure;
65 if (kfilm_convert->pass_sample_count ==
PASS_UNUSED) {
66 *scale = kfilm_convert->scale;
67 *scale_exposure = kfilm_convert->scale_exposure;
71 const uint sample_count = *(
72 (
ccl_global const uint *)(buffer + kfilm_convert->pass_sample_count));
75 *scale_exposure = 0.0f;
79 if (kfilm_convert->pass_use_filter) {
80 *scale = 1.0f / sample_count;
86 if (kfilm_convert->pass_use_exposure) {
87 *scale_exposure = *scale * kfilm_convert->exposure;
90 *scale_exposure = *scale;
110 ccl_global const float *in = buffer + kfilm_convert->pass_offset;
113 pixel[0] = (f == 0.0f) ? 1e10f : f * scale_exposure;
126 ccl_global const float *in = buffer + kfilm_convert->pass_offset;
131 pixel[0] =
saturatef(1.0f - f * scale_exposure);
147 ccl_global const float *in = buffer + kfilm_convert->pass_offset;
163 ccl_global const float *in = buffer + kfilm_convert->pass_offset;
166 pixel[0] = f * scale_exposure;
182 ccl_global const float *in = buffer + kfilm_convert->pass_offset;
187 ccl_global const float *in_indirect = buffer + kfilm_convert->pass_indirect;
188 const float3 f_indirect =
make_float3(in_indirect[0], in_indirect[1], in_indirect[2]);
194 ccl_global const float *in_divide = buffer + kfilm_convert->pass_divide;
199 f *= kfilm_convert->exposure;
211 if (kfilm_convert->num_components >= 4) {
213 float scale, scale_exposure;
216 ccl_global const float *in_combined = buffer + kfilm_convert->pass_combined;
217 const float alpha = in_combined[3] * scale;
236 ccl_global const float *in = buffer + kfilm_convert->pass_offset;
245 if (kfilm_convert->num_components >= 4) {
247 float scale, scale_exposure;
250 ccl_global const float *in_combined = buffer + kfilm_convert->pass_combined;
251 const float alpha = in_combined[3] * scale;
273 ccl_global const float *in = buffer + kfilm_convert->pass_offset;
274 ccl_global const float *in_weight = buffer + kfilm_convert->pass_motion_weight;
276 const float weight = in_weight[0];
277 const float weight_inv = (weight > 0.0f) ? 1.0f / weight : 0.0f;
297 ccl_global const float *in = buffer + kfilm_convert->pass_offset;
304 pixel[1] = f.y * scale;
306 pixel[3] = f.w * scale;
317 float scale, scale_exposure;
320 ccl_global const float *in = buffer + kfilm_convert->pass_offset;
323 const float alpha = in[3] * scale;
343 float scale, scale_exposure;
352 ccl_global const float *in = buffer + kfilm_convert->pass_offset;
355 const float alpha = in[3] * scale;
373 float scale, scale_exposure;
376 ccl_global const float *in_catcher = buffer + kfilm_convert->pass_shadow_catcher;
378 const float3 pixel =
make_float3(in_catcher[0], in_catcher[1], in_catcher[2]) * scale_exposure;
387 x = (
b.x != 0.0f) ? a.
x /
b.x : 1.0f;
388 y = (
b.y != 0.0f) ? a.
y /
b.y : 1.0f;
389 z = (
b.z != 0.0f) ? a.
z /
b.z : 1.0f;
402 if (kfilm_convert->is_denoised) {
410 ccl_global const float *in_catcher_sample_count =
411 buffer + kfilm_convert->pass_shadow_catcher_sample_count;
412 const float num_samples = in_catcher_sample_count[0];
413 if (num_samples == 0.0f) {
418 ccl_global const float *in_catcher = buffer + kfilm_convert->pass_shadow_catcher;
428 ccl_global const float *in_combined = buffer + kfilm_convert->pass_combined;
429 ccl_global const float *in_matte = buffer + kfilm_convert->pass_shadow_catcher_matte;
433 const float3 color_catcher =
make_float3(in_catcher[0], in_catcher[1], in_catcher[2]);
434 const float3 color_combined =
make_float3(in_combined[0], in_combined[1], in_combined[2]);
441 const float3 combined_no_matte = color_combined - color_matte;
446 const float transparency = in_combined[3] * scale;
453 const float3 pixel = (1.0f - alpha) *
one_float3() + alpha * shadow_catcher;
472 float scale, scale_exposure;
477 ccl_global const float *in_matte = buffer + kfilm_convert->pass_shadow_catcher_matte;
480 const float3 color_matte =
make_float3(in_matte[0], in_matte[1], in_matte[2]) * scale_exposure;
482 const float transparency = in_matte[3] * scale;
483 const float alpha =
saturatef(1.0f - transparency);
485 const float alpha_matte = (1.0f - alpha) * (1.0f -
saturatef(
average(shadow_catcher))) + alpha;
487 if (kfilm_convert->use_approximate_shadow_catcher_background) {
490 ccl_global const float *in_background = buffer + kfilm_convert->pass_background;
492 in_background[0], in_background[1], in_background[2]) *
494 const float3 alpha_over = color_matte + color_background * (1.0f - alpha_matte);
495 return make_float4(alpha_over.
x, alpha_over.
y, alpha_over.
z, 1.0f);
498 return make_float4(color_matte.
x, color_matte.
y, color_matte.
z, alpha_matte);
510 pixel[0] = pixel_value.
x;
511 pixel[1] = pixel_value.
y;
512 pixel[2] = pixel_value.
z;
520 kernel_assert(kfilm_convert->num_components == 3 || kfilm_convert->num_components == 4);
525 pixel[0] = pixel_value.x;
526 pixel[1] = pixel_value.y;
527 pixel[2] = pixel_value.z;
528 if (kfilm_convert->num_components == 4) {
529 pixel[3] = pixel_value.w;
542 if (kfilm_convert->show_active_pixels && kfilm_convert->pass_adaptive_aux_buffer !=
PASS_UNUSED)
544 if (buffer[kfilm_convert->pass_adaptive_aux_buffer + 3] == 0.0f) {
547 pixel[0] = mix_rgb.
x;
548 pixel[1] = mix_rgb.
y;
549 pixel[2] = mix_rgb.
z;
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Brightness Control the brightness and contrast of the input color Vector Map input vector components with curves Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert Invert a color
SIMD_FORCE_INLINE const btScalar & z() const
Return the z value.
local_group_size(16, 16) .push_constant(Type b
#define kernel_assert(cond)
#define ccl_device_forceinline
#define ccl_device_inline
#define CCL_NAMESPACE_END
ccl_device_inline float average(const float2 a)
ccl_device_inline float2 interp(const float2 a, const float2 b, float t)
ccl_device_inline float3 one_float3()
CCL_NAMESPACE_BEGIN ccl_device_inline float4 zero_float4()
ccl_device_inline bool film_get_scale_and_scale_exposure(ccl_global const KernelFilmConvert *ccl_restrict kfilm_convert, ccl_global const 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_combined(ccl_global const KernelFilmConvert *ccl_restrict kfilm_convert, ccl_global const float *ccl_restrict buffer, ccl_private float *ccl_restrict pixel)
CCL_NAMESPACE_BEGIN ccl_device_forceinline float film_transparency_to_alpha(float transparency)
ccl_device_inline void film_get_pass_pixel_depth(ccl_global const KernelFilmConvert *ccl_restrict kfilm_convert, ccl_global const float *ccl_restrict buffer, ccl_private float *ccl_restrict pixel)
ccl_device_inline void film_get_pass_pixel_light_path(ccl_global const KernelFilmConvert *ccl_restrict kfilm_convert, ccl_global const float *ccl_restrict buffer, ccl_private float *ccl_restrict pixel)
ccl_device_inline void film_get_pass_pixel_float3(ccl_global const KernelFilmConvert *ccl_restrict kfilm_convert, ccl_global const float *ccl_restrict buffer, ccl_private float *ccl_restrict pixel)
ccl_device_inline void film_apply_pass_pixel_overlays_rgba(ccl_global const KernelFilmConvert *ccl_restrict kfilm_convert, ccl_global const float *ccl_restrict buffer, ccl_private float *ccl_restrict pixel)
ccl_device_inline float4 film_calculate_shadow_catcher_matte_with_shadow(ccl_global const KernelFilmConvert *ccl_restrict kfilm_convert, ccl_global const float *ccl_restrict buffer)
ccl_device_inline void film_get_pass_pixel_motion(ccl_global const KernelFilmConvert *ccl_restrict kfilm_convert, ccl_global const float *ccl_restrict buffer, ccl_private float *ccl_restrict pixel)
ccl_device_inline void film_get_pass_pixel_float4(ccl_global const KernelFilmConvert *ccl_restrict kfilm_convert, ccl_global const float *ccl_restrict buffer, ccl_private float *ccl_restrict pixel)
ccl_device_inline void film_get_pass_pixel_shadow_catcher_matte_with_shadow(ccl_global const KernelFilmConvert *ccl_restrict kfilm_convert, ccl_global const float *ccl_restrict buffer, ccl_private float *ccl_restrict pixel)
ccl_device_inline float3 safe_divide_shadow_catcher(float3 a, float3 b)
ccl_device_inline float film_get_scale(ccl_global const KernelFilmConvert *ccl_restrict kfilm_convert, ccl_global const float *ccl_restrict buffer)
ccl_device_inline void film_get_pass_pixel_float(ccl_global const KernelFilmConvert *ccl_restrict kfilm_convert, ccl_global const float *ccl_restrict buffer, ccl_private float *ccl_restrict pixel)
ccl_device_inline float film_get_scale_exposure(ccl_global const KernelFilmConvert *ccl_restrict kfilm_convert, ccl_global const float *ccl_restrict buffer)
ccl_device_inline float3 film_calculate_shadow_catcher_denoised(ccl_global const KernelFilmConvert *ccl_restrict kfilm_convert, ccl_global const float *ccl_restrict buffer)
ccl_device_inline void film_get_pass_pixel_sample_count(ccl_global const KernelFilmConvert *ccl_restrict kfilm_convert, ccl_global const float *ccl_restrict buffer, ccl_private float *ccl_restrict pixel)
ccl_device_inline void film_get_pass_pixel_mist(ccl_global const KernelFilmConvert *ccl_restrict kfilm_convert, ccl_global const float *ccl_restrict buffer, ccl_private float *ccl_restrict pixel)
ccl_device_inline float3 film_calculate_shadow_catcher(ccl_global const KernelFilmConvert *ccl_restrict kfilm_convert, ccl_global const float *ccl_restrict buffer)
ccl_device_inline void film_get_pass_pixel_shadow_catcher(ccl_global const KernelFilmConvert *ccl_restrict kfilm_convert, ccl_global const float *ccl_restrict buffer, ccl_private float *ccl_restrict pixel)
ccl_device_inline void film_get_pass_pixel_cryptomatte(ccl_global const KernelFilmConvert *ccl_restrict kfilm_convert, ccl_global const float *ccl_restrict buffer, ccl_private float *ccl_restrict pixel)
VecBase< float, 4 > float4
ccl_device_inline float3 safe_divide_even_color(float3 a, float3 b)