From 7d3003be4d6219cb33329071837b8d1acad6602b Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Fri, 2 Feb 2024 10:02:25 +0100 Subject: [PATCH] Geometry Nodes: store bake item names on disk Bake items are generally identified by their (generated) identifier. This allows changing the name and reordering sockets without breaking baked data. In the future we want to have some kind of Import Bake node that ideally automatically creates its output sockets and names them correctly. For that to work, the baked data has to contain the user-defined names for each socket. Those names are not used yet. --- source/blender/blenkernel/BKE_bake_items.hh | 6 ++++++ source/blender/blenkernel/BKE_bake_items_socket.hh | 2 ++ source/blender/blenkernel/intern/bake_items_serialize.cc | 3 +++ source/blender/blenkernel/intern/bake_items_socket.cc | 6 ++++++ source/blender/nodes/geometry/nodes/node_geo_bake.cc | 2 ++ source/blender/nodes/geometry/nodes/node_geo_simulation.cc | 2 ++ 6 files changed, 21 insertions(+) diff --git a/source/blender/blenkernel/BKE_bake_items.hh b/source/blender/blenkernel/BKE_bake_items.hh index 71da8cb7ae4..13cdbebf758 100644 --- a/source/blender/blenkernel/BKE_bake_items.hh +++ b/source/blender/blenkernel/BKE_bake_items.hh @@ -17,6 +17,12 @@ namespace blender::bke::bake { */ class BakeItem { public: + /** + * User-defined name. This is not necessarily unique and might change over time. It's purpose is + * to make bakes more inspectable. + */ + std::string name; + virtual ~BakeItem() = default; }; diff --git a/source/blender/blenkernel/BKE_bake_items_socket.hh b/source/blender/blenkernel/BKE_bake_items_socket.hh index 3d3cef579c0..0f6277c4595 100644 --- a/source/blender/blenkernel/BKE_bake_items_socket.hh +++ b/source/blender/blenkernel/BKE_bake_items_socket.hh @@ -24,6 +24,8 @@ struct BakeSocketConfig { * for some socket types). */ Vector domains; + /** User-defined name of every socket. */ + Vector names; /** * Determines which geometries a field socket should be evaluated on. This can be used to * implement rules like a field should only be evaluated on the preceding or on all geometries. diff --git a/source/blender/blenkernel/intern/bake_items_serialize.cc b/source/blender/blenkernel/intern/bake_items_serialize.cc index ddb6719340d..3c9c8c28b86 100644 --- a/source/blender/blenkernel/intern/bake_items_serialize.cc +++ b/source/blender/blenkernel/intern/bake_items_serialize.cc @@ -1010,6 +1010,9 @@ static void serialize_bake_item(const BakeItem &item, BlobSharing &blob_sharing, DictionaryValue &r_io_item) { + if (!item.name.empty()) { + r_io_item.append_str("name", item.name); + } if (const auto *geometry_state_item = dynamic_cast(&item)) { r_io_item.append_str("type", "GEOMETRY"); diff --git a/source/blender/blenkernel/intern/bake_items_socket.cc b/source/blender/blenkernel/intern/bake_items_socket.cc index 2c706dcd93c..61860038ae0 100644 --- a/source/blender/blenkernel/intern/bake_items_socket.cc +++ b/source/blender/blenkernel/intern/bake_items_socket.cc @@ -101,6 +101,12 @@ Array> move_socket_values_to_bake_items(const Span &item = bake_items[i]) { + item->name = config.names[i]; + } + } + return bake_items; } diff --git a/source/blender/nodes/geometry/nodes/node_geo_bake.cc b/source/blender/nodes/geometry/nodes/node_geo_bake.cc index 71026e54c0b..8cdd8655c0f 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_bake.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_bake.cc @@ -117,6 +117,7 @@ static bake::BakeSocketConfig make_bake_socket_config(const Span