diff options
author | Brecht Van Lommel <brecht@blender.org> | 2021-11-18 18:07:47 +0300 |
---|---|---|
committer | Brecht Van Lommel <brecht@blender.org> | 2021-11-18 19:13:16 +0300 |
commit | f0be276514f2b7cae27c744ac80f999fbc69f12f (patch) | |
tree | d9ae4b6a4a0fdcde471893b8f3a518561bc24d1b /intern/cycles/blender | |
parent | ed91e759d1f0debce58b10261799378e1639e6c0 (diff) |
Fix T93082: Cycles baking not handling transparency correctly
For baking, replace transparent BSDF with holdout for baking. This ensure no
objects behind are baked, and that the baked image has alpha.
Diffstat (limited to 'intern/cycles/blender')
-rw-r--r-- | intern/cycles/blender/session.cpp | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/intern/cycles/blender/session.cpp b/intern/cycles/blender/session.cpp index b8ac437443b..2c4e57404b8 100644 --- a/intern/cycles/blender/session.cpp +++ b/intern/cycles/blender/session.cpp @@ -606,19 +606,6 @@ void BlenderSession::bake(BL::Depsgraph &b_depsgraph_, pass->set_type(bake_type_to_pass(bake_type, bake_filter)); pass->set_include_albedo((bake_filter & BL::BakeSettings::pass_filter_COLOR)); - if (pass->get_type() == PASS_COMBINED) { - /* Filtering settings for combined pass. */ - Integrator *integrator = scene->integrator; - integrator->set_use_direct_light((bake_filter & BL::BakeSettings::pass_filter_DIRECT) != 0); - integrator->set_use_indirect_light((bake_filter & BL::BakeSettings::pass_filter_INDIRECT) != - 0); - integrator->set_use_diffuse((bake_filter & BL::BakeSettings::pass_filter_DIFFUSE) != 0); - integrator->set_use_glossy((bake_filter & BL::BakeSettings::pass_filter_GLOSSY) != 0); - integrator->set_use_transmission((bake_filter & BL::BakeSettings::pass_filter_TRANSMISSION) != - 0); - integrator->set_use_emission((bake_filter & BL::BakeSettings::pass_filter_EMIT) != 0); - } - session->set_display_driver(nullptr); session->set_output_driver(make_unique<BlenderOutputDriver>(b_engine)); @@ -628,6 +615,24 @@ void BlenderSession::bake(BL::Depsgraph &b_depsgraph_, sync->sync_camera(b_render, b_camera_override, width, height, ""); sync->sync_data( b_render, b_depsgraph, b_v3d, b_camera_override, width, height, &python_thread_state); + + /* Filtering settings for combined pass. */ + if (pass->get_type() == PASS_COMBINED) { + Integrator *integrator = scene->integrator; + integrator->set_use_direct_light((bake_filter & BL::BakeSettings::pass_filter_DIRECT) != 0); + integrator->set_use_indirect_light((bake_filter & BL::BakeSettings::pass_filter_INDIRECT) != + 0); + integrator->set_use_diffuse((bake_filter & BL::BakeSettings::pass_filter_DIFFUSE) != 0); + integrator->set_use_glossy((bake_filter & BL::BakeSettings::pass_filter_GLOSSY) != 0); + integrator->set_use_transmission( + (bake_filter & BL::BakeSettings::pass_filter_TRANSMISSION) != 0); + integrator->set_use_emission((bake_filter & BL::BakeSettings::pass_filter_EMIT) != 0); + } + + /* Always use transpanent background for baking. */ + scene->background->set_transparent(true); + + /* Load built-in images from Blender. */ builtin_images_load(); } |