146 scene->update_stats->film.times.add_entry({
"update", time});
150 device_free(device, dscene,
scene);
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;
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;