146 scene->
update_stats->film.times.add_entry({
"update", time});
152 KernelFilm *kfilm = &dscene->
data.film;
155 kfilm->exposure = exposure;
156 kfilm->pass_alpha_threshold = pass_alpha_threshold;
157 kfilm->pass_flag = 0;
159 kfilm->use_approximate_shadow_catcher = get_use_approximate_shadow_catcher();
161 kfilm->light_pass_flag = 0;
162 kfilm->pass_stride = 0;
198 kfilm->pass_shadow_catcher_sample_count =
PASS_UNUSED;
205 bool have_cryptomatte =
false;
206 bool have_aov_color =
false;
207 bool have_aov_value =
false;
208 bool have_lightgroup =
false;
232 const int pass_flag = (1 << (pass->get_type() % 32));
234 kfilm->light_pass_flag |= pass_flag;
237 kfilm->pass_flag |= pass_flag;
243 if (!pass->get_lightgroup().empty()) {
244 if (!have_lightgroup) {
245 kfilm->pass_lightgroup = kfilm->pass_stride;
246 have_lightgroup =
true;
252 switch (pass->get_type()) {
254 kfilm->pass_combined = kfilm->pass_stride;
257 kfilm->pass_depth = kfilm->pass_stride;
260 kfilm->pass_normal = kfilm->pass_stride;
263 kfilm->pass_position = kfilm->pass_stride;
266 kfilm->pass_roughness = kfilm->pass_stride;
269 kfilm->pass_uv = kfilm->pass_stride;
272 kfilm->pass_motion = kfilm->pass_stride;
275 kfilm->pass_motion_weight = kfilm->pass_stride;
278 kfilm->pass_object_id = kfilm->pass_stride;
281 kfilm->pass_material_id = kfilm->pass_stride;
285 kfilm->pass_mist = kfilm->pass_stride;
288 kfilm->pass_emission = kfilm->pass_stride;
291 kfilm->pass_background = kfilm->pass_stride;
294 kfilm->pass_ao = kfilm->pass_stride;
298 kfilm->pass_diffuse_color = kfilm->pass_stride;
301 kfilm->pass_glossy_color = kfilm->pass_stride;
304 kfilm->pass_transmission_color = kfilm->pass_stride;
307 kfilm->pass_diffuse_indirect = kfilm->pass_stride;
310 kfilm->pass_glossy_indirect = kfilm->pass_stride;
313 kfilm->pass_transmission_indirect = kfilm->pass_stride;
316 kfilm->pass_volume_indirect = kfilm->pass_stride;
319 kfilm->pass_diffuse_direct = kfilm->pass_stride;
322 kfilm->pass_glossy_direct = kfilm->pass_stride;
325 kfilm->pass_transmission_direct = kfilm->pass_stride;
328 kfilm->pass_volume_direct = kfilm->pass_stride;
332 kfilm->pass_bake_primitive = kfilm->pass_stride;
335 kfilm->pass_bake_seed = kfilm->pass_stride;
338 kfilm->pass_bake_differential = kfilm->pass_stride;
342 kfilm->pass_cryptomatte = have_cryptomatte ?
343 min(kfilm->pass_cryptomatte, kfilm->pass_stride) :
345 have_cryptomatte =
true;
349 kfilm->pass_denoising_normal = kfilm->pass_stride;
352 kfilm->pass_denoising_albedo = kfilm->pass_stride;
355 kfilm->pass_denoising_depth = kfilm->pass_stride;
359 kfilm->pass_shadow_catcher = kfilm->pass_stride;
362 kfilm->pass_shadow_catcher_sample_count = kfilm->pass_stride;
365 kfilm->pass_shadow_catcher_matte = kfilm->pass_stride;
369 kfilm->pass_adaptive_aux_buffer = kfilm->pass_stride;
372 kfilm->pass_sample_count = kfilm->pass_stride;
376 if (!have_aov_color) {
377 kfilm->pass_aov_color = kfilm->pass_stride;
378 have_aov_color =
true;
382 if (!have_aov_value) {
383 kfilm->pass_aov_value = kfilm->pass_stride;
384 have_aov_value =
true;
388 kfilm->pass_guiding_color = kfilm->pass_stride;
391 kfilm->pass_guiding_probability = kfilm->pass_stride;
394 kfilm->pass_guiding_avg_roughness = kfilm->pass_stride;
407 filter_table_offset_ = scene->
lookup_tables->add_table(dscene, table);
408 dscene->
data.tables.filter_table_offset = (int)filter_table_offset_;
411 kfilm->mist_start = mist_start;
412 kfilm->mist_inv_depth = (mist_depth > 0.0f) ? 1.0f / mist_depth : 0.0f;
413 kfilm->mist_falloff = mist_falloff;
415 kfilm->cryptomatte_passes = cryptomatte_passes;
416 kfilm->cryptomatte_depth = cryptomatte_depth;
487 remove_auto_passes(scene);
490 const PassType display_pass = get_display_pass();
491 add_auto_pass(scene, display_pass);
503 if (adaptive_sampling.
use) {
509 const bool use_denoise = integrator->get_use_denoise();
511 if (integrator->get_use_denoise_pass_normal()) {
514 if (integrator->get_use_denoise_pass_albedo()) {
521 const bool need_background = get_use_approximate_shadow_catcher() &&
522 !background->get_transparent();
528 if (need_background) {
538 for (
const Pass *pass : passes_immutable) {
539 const PassInfo info = pass->get_info();
567 if (use_sample_count) {
574 finalize_passes(scene, use_denoise);
581 if (have_uv_pass != prev_have_uv_pass) {
587 if (have_motion_pass != prev_have_motion_pass) {
590 if (have_ao_pass != prev_have_ao_pass) {
594 prev_have_uv_pass = have_uv_pass;
595 prev_have_motion_pass = have_motion_pass;
596 prev_have_ao_pass = have_ao_pass;