From 40a5e739e2701ee7434dcbd8acf6b740622ddf50 Mon Sep 17 00:00:00 2001 From: Hans Goudey <hans@blender.org> Date: Mon, 25 Mar 2024 21:42:07 +0100 Subject: [PATCH] Fix #119873: Bake node crash with instanced light objects 4d0936c7d74bee32cd50 explicitly avoids turning non-geometry object instances into geometry instances. This code is called to prepare geometry sets for baking, and baking currently assumes that the baked instances are always geometry sets. To fix this, just check the instance type and serialize an empty geometry set for the crashing object instance case. Compared to before the crash causing commit, there is no change in behavior, since that would have created empty geometry sets too. Pull Request: https://projects.blender.org/blender/blender/pulls/119892 --- .../blender/blenkernel/intern/bake_items_serialize.cc | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/source/blender/blenkernel/intern/bake_items_serialize.cc b/source/blender/blenkernel/intern/bake_items_serialize.cc index 28edca63a09..4bc745f4233 100644 --- a/source/blender/blenkernel/intern/bake_items_serialize.cc +++ b/source/blender/blenkernel/intern/bake_items_serialize.cc @@ -968,9 +968,14 @@ static std::shared_ptr<DictionaryValue> serialize_geometry_set(const GeometrySet auto io_references = io_instances->append_array("references"); for (const InstanceReference &reference : instances.references()) { - BLI_assert(reference.type() == InstanceReference::Type::GeometrySet); - io_references->append( - serialize_geometry_set(reference.geometry_set(), blob_writer, blob_sharing)); + if (reference.type() == InstanceReference::Type::GeometrySet) { + const GeometrySet &geometry = reference.geometry_set(); + io_references->append(serialize_geometry_set(geometry, blob_writer, blob_sharing)); + } + else { + /* TODO: Support serializing object and collection references. */ + io_references->append(serialize_geometry_set({}, blob_writer, blob_sharing)); + } } io_instances->append( -- GitLab