147 scene->
update_stats->film.times.add_entry({
"update", time});
153 KernelFilm *kfilm = &dscene->
data.film;
156 kfilm->exposure = exposure;
157 kfilm->pass_alpha_threshold = pass_alpha_threshold;
158 kfilm->pass_flag = 0;
160 kfilm->use_approximate_shadow_catcher = get_use_approximate_shadow_catcher();
162 kfilm->light_pass_flag = 0;
163 kfilm->pass_stride = 0;
193 kfilm->pass_volume_transmit_denoised =
PASS_UNUSED;
205 kfilm->pass_shadow_catcher_sample_count =
PASS_UNUSED;
212 bool have_cryptomatte =
false;
213 bool have_aov_color =
false;
214 bool have_aov_value =
false;
215 bool have_lightgroup =
false;
228 kfilm->pass_volume_transmit_denoised = kfilm->pass_stride;
231 kfilm->pass_volume_scatter_denoised = kfilm->pass_stride;
245 const int pass_flag = (1 << (pass->get_type() % 32));
247 kfilm->light_pass_flag |= pass_flag;
250 kfilm->pass_flag |= pass_flag;
256 if (!pass->get_lightgroup().empty()) {
257 if (!have_lightgroup) {
258 kfilm->pass_lightgroup = kfilm->pass_stride;
259 have_lightgroup =
true;
265 switch (pass->get_type()) {
267 kfilm->pass_combined = kfilm->pass_stride;
270 kfilm->pass_depth = kfilm->pass_stride;
273 kfilm->pass_normal = kfilm->pass_stride;
276 kfilm->pass_position = kfilm->pass_stride;
279 kfilm->pass_roughness = kfilm->pass_stride;
282 kfilm->pass_uv = kfilm->pass_stride;
285 kfilm->pass_motion = kfilm->pass_stride;
288 kfilm->pass_motion_weight = kfilm->pass_stride;
291 kfilm->pass_object_id = kfilm->pass_stride;
294 kfilm->pass_material_id = kfilm->pass_stride;
298 kfilm->pass_mist = kfilm->pass_stride;
301 kfilm->pass_emission = kfilm->pass_stride;
304 kfilm->pass_background = kfilm->pass_stride;
307 kfilm->pass_ao = kfilm->pass_stride;
311 kfilm->pass_diffuse_color = kfilm->pass_stride;
314 kfilm->pass_glossy_color = kfilm->pass_stride;
317 kfilm->pass_transmission_color = kfilm->pass_stride;
320 kfilm->pass_diffuse_indirect = kfilm->pass_stride;
323 kfilm->pass_glossy_indirect = kfilm->pass_stride;
326 kfilm->pass_transmission_indirect = kfilm->pass_stride;
329 kfilm->pass_volume_indirect = kfilm->pass_stride;
332 kfilm->pass_diffuse_direct = kfilm->pass_stride;
335 kfilm->pass_glossy_direct = kfilm->pass_stride;
338 kfilm->pass_transmission_direct = kfilm->pass_stride;
341 kfilm->pass_volume_direct = kfilm->pass_stride;
344 kfilm->pass_volume_scatter = kfilm->pass_stride;
347 kfilm->pass_volume_transmit = kfilm->pass_stride;
350 kfilm->pass_volume_majorant = kfilm->pass_stride;
353 kfilm->pass_volume_majorant_sample_count = kfilm->pass_stride;
357 kfilm->pass_bake_primitive = kfilm->pass_stride;
360 kfilm->pass_bake_seed = kfilm->pass_stride;
363 kfilm->pass_bake_differential = kfilm->pass_stride;
367 kfilm->pass_cryptomatte = have_cryptomatte ?
368 min(kfilm->pass_cryptomatte, kfilm->pass_stride) :
370 have_cryptomatte =
true;
374 kfilm->pass_denoising_normal = kfilm->pass_stride;
377 kfilm->pass_denoising_albedo = kfilm->pass_stride;
380 kfilm->pass_denoising_depth = kfilm->pass_stride;
384 kfilm->pass_shadow_catcher = kfilm->pass_stride;
387 kfilm->pass_shadow_catcher_sample_count = kfilm->pass_stride;
390 kfilm->pass_shadow_catcher_matte = kfilm->pass_stride;
394 kfilm->pass_adaptive_aux_buffer = kfilm->pass_stride;
397 kfilm->pass_sample_count = kfilm->pass_stride;
400 kfilm->pass_render_time = kfilm->pass_stride;
404 if (!have_aov_color) {
405 kfilm->pass_aov_color = kfilm->pass_stride;
406 have_aov_color =
true;
410 if (!have_aov_value) {
411 kfilm->pass_aov_value = kfilm->pass_stride;
412 have_aov_value =
true;
416 kfilm->pass_guiding_color = kfilm->pass_stride;
419 kfilm->pass_guiding_probability = kfilm->pass_stride;
422 kfilm->pass_guiding_avg_roughness = kfilm->pass_stride;
435 filter_table_offset_ = scene->
lookup_tables->add_table(dscene, table);
436 dscene->
data.tables.filter_table_offset = (int)filter_table_offset_;
439 kfilm->mist_start = mist_start;
440 kfilm->mist_inv_depth = (mist_depth > 0.0f) ? 1.0f / mist_depth : 0.0f;
441 kfilm->mist_falloff = mist_falloff;
443 kfilm->cryptomatte_passes = cryptomatte_passes;
444 kfilm->cryptomatte_depth = cryptomatte_depth;
515 remove_auto_passes(scene);
518 const PassType display_pass = get_display_pass();
519 add_auto_pass(scene, display_pass);
531 if (adaptive_sampling.
use) {
537 const bool use_denoise = integrator->get_use_denoise();
539 if (integrator->get_use_denoise_pass_normal()) {
542 if (integrator->get_use_denoise_pass_albedo()) {
549 const bool need_background = get_use_approximate_shadow_catcher() &&
550 !background->get_transparent();
556 if (need_background) {
566 for (
const Pass *pass : passes_immutable) {
567 const PassInfo info = pass->get_info();
595 if (use_sample_count) {
616 finalize_passes(scene, use_denoise);
623 if (have_uv_pass != prev_have_uv_pass) {
629 if (have_motion_pass != prev_have_motion_pass) {
632 if (have_ao_pass != prev_have_ao_pass) {
636 prev_have_uv_pass = have_uv_pass;
637 prev_have_motion_pass = have_motion_pass;
638 prev_have_ao_pass = have_ao_pass;
644 LOG_INFO <<
"Effective scene passes:";