diff --git a/blender_asset_tracer/blendfile/__init__.py b/blender_asset_tracer/blendfile/__init__.py index 3b23c81..fe4c952 100644 --- a/blender_asset_tracer/blendfile/__init__.py +++ b/blender_asset_tracer/blendfile/__init__.py @@ -633,8 +633,8 @@ class BlendFileBlock: self.bfile.fileobj.seek(self.file_offset, os.SEEK_SET) return self.bfile.fileobj.read(self.size) - def as_string(self) -> str: - """Interpret the bytes of this datablock as null-terminated utf8 string.""" + def as_bytes_string(self) -> bytes: + """Interpret the bytes of this datablock as null-terminated string of raw bytes.""" the_bytes = self.raw_data() try: first_null = the_bytes.index(0) @@ -642,6 +642,11 @@ class BlendFileBlock: pass else: the_bytes = the_bytes[:first_null] + return the_bytes + + def as_string(self) -> str: + """Interpret the bytes of this datablock as null-terminated utf8 string.""" + the_bytes = self.as_bytes_string() return the_bytes.decode() def get_recursive_iter( @@ -820,6 +825,10 @@ class BlendFileBlock: def __setitem__(self, item: bytes, value) -> None: self.set(item, value) + def has_field(self, name: bytes) -> bool: + dna_struct = self.bfile.structs[self.sdna_index] + return dna_struct.has_field(name) + def keys(self) -> typing.Iterator[bytes]: """Generator, yields all field names of this block.""" return (f.name.name_only for f in self.dna_type.fields) diff --git a/blender_asset_tracer/blendfile/iterators.py b/blender_asset_tracer/blendfile/iterators.py index 21849a6..6fcdfc7 100644 --- a/blender_asset_tracer/blendfile/iterators.py +++ b/blender_asset_tracer/blendfile/iterators.py @@ -20,6 +20,7 @@ # (c) 2014, Blender Foundation - Campbell Barton # (c) 2018, Blender Foundation - Sybren A. Stüvel import typing +import copy from blender_asset_tracer import cdefs from . import BlendFileBlock @@ -70,3 +71,24 @@ def modifiers(object_block: BlendFileBlock) -> typing.Iterator[BlendFileBlock]: # 'ob->modifiers[...]' mods = object_block.get_pointer((b"modifiers", b"first")) yield from listbase(mods, next_path=(b"modifier", b"next")) + + +def dynamic_array(block: BlendFileBlock) -> typing.Iterator[BlendFileBlock]: + """ + Generator that yields each element of a dynamic array as a separate block. + + Dynamic arrays are multiple contiguous elements accessed via a single + pointer. BAT interprets these as a single data block, making it hard to + access individual elements. This function divides the array into individual + blocks by creating modified copies of the original block. + """ + + element_size = block.dna_type.size + + sub_block = copy.copy(block) + sub_block.size = element_size + + for i in range(block.count): + # When sub_block's data is read, it'll be read from this offset in the blend file. + sub_block.file_offset = block.file_offset + i * element_size + yield sub_block diff --git a/blender_asset_tracer/cdefs.py b/blender_asset_tracer/cdefs.py index c5b7fd1..916b9b4 100644 --- a/blender_asset_tracer/cdefs.py +++ b/blender_asset_tracer/cdefs.py @@ -52,6 +52,14 @@ eModifierType_MeshSequenceCache = 52 eModifierType_Fluid = 56 eModifierType_Nodes = 57 +# NodesModifierBakeFlag +NODES_MODIFIER_BAKE_CUSTOM_PATH = 1 << 1 + +# NodesModifierBakeTarget +NODES_MODIFIER_BAKE_TARGET_INHERIT = 0 +NODES_MODIFIER_BAKE_TARGET_PACKED = 1 +NODES_MODIFIER_BAKE_TARGET_DISK = 2 + # DNA_particle_types.h PART_DRAW_OB = 7 PART_DRAW_GR = 8 diff --git a/blender_asset_tracer/trace/modifier_walkers.py b/blender_asset_tracer/trace/modifier_walkers.py index 597c287..a4d29b7 100644 --- a/blender_asset_tracer/trace/modifier_walkers.py +++ b/blender_asset_tracer/trace/modifier_walkers.py @@ -27,6 +27,7 @@ import logging import typing from blender_asset_tracer import blendfile, bpathlib, cdefs +from blender_asset_tracer.blendfile import iterators from . import result log = logging.getLogger(__name__) @@ -337,7 +338,7 @@ def modifier_dynamic_paint( surfaces = canvas_settings.get_pointer((b"surfaces", b"first")) - for surf_idx, surface in enumerate(blendfile.iterators.listbase(surfaces)): + for surf_idx, surface in enumerate(iterators.listbase(surfaces)): surface_block_name = block_name + b".canvas_settings.surfaces[%d]" % (surf_idx) point_cache = surface.get_pointer(b"pointcache") if point_cache is None: @@ -351,3 +352,62 @@ def modifier_dynamic_paint( yield from _walk_point_cache( ctx, surface_block_name, modifier.bfile, point_cache, cdefs.PTCACHE_EXT ) + + +@mod_handler(cdefs.eModifierType_Nodes) +def modifier_nodes( + ctx: ModifierContext, modifier: blendfile.BlendFileBlock, block_name: bytes +) -> typing.Iterator[result.BlockUsage]: + if not modifier.has_field(b"simulation_bake_directory"): + return + + mod_directory_ptr, mod_directory_field = modifier.get( + b"simulation_bake_directory", return_field=True + ) + + bakes = modifier.get_pointer(b"bakes") + if not bakes: + return + + mod_bake_target = modifier.get(b"bake_target") + + for bake_idx, bake in enumerate(iterators.dynamic_array(bakes)): + # Check for packed data. + bake_target = bake.get(b"bake_target") + if bake_target == cdefs.NODES_MODIFIER_BAKE_TARGET_INHERIT: + bake_target = mod_bake_target + if bake_target == cdefs.NODES_MODIFIER_BAKE_TARGET_PACKED: + # This data is packed in the blend file, it's not a dependency to trace. + continue + + flag = bake.get(b"flag") + use_custom_directory = bool(flag & cdefs.NODES_MODIFIER_BAKE_CUSTOM_PATH) + + if use_custom_directory: + bake_directory_ptr, bake_directory_field = bake.get( + b"directory", return_field=True + ) + directory_ptr = bake_directory_ptr + field = bake_directory_field + block = bake + else: + directory_ptr = mod_directory_ptr + field = mod_directory_field + block = modifier + + if not directory_ptr: + continue + directory = bake.bfile.dereference_pointer(directory_ptr) + if not directory: + continue + + bpath = bpathlib.BlendPath(directory.as_bytes_string()) + bake_block_name = block_name + b".bakes[%d]" % bake_idx + + yield result.BlockUsage( + block, + bpath, + block_name=bake_block_name, + path_full_field=field, + is_sequence=True, + ) diff --git a/tests/blendfiles/geometry-nodes-sim/bakePath/blobs/00001_00000.blob b/tests/blendfiles/geometry-nodes-sim/bakePath/blobs/00001_00000.blob new file mode 100644 index 0000000..419ed85 Binary files /dev/null and b/tests/blendfiles/geometry-nodes-sim/bakePath/blobs/00001_00000.blob differ diff --git a/tests/blendfiles/geometry-nodes-sim/bakePath/blobs/00002_00000.blob b/tests/blendfiles/geometry-nodes-sim/bakePath/blobs/00002_00000.blob new file mode 100644 index 0000000..8860feb Binary files /dev/null and b/tests/blendfiles/geometry-nodes-sim/bakePath/blobs/00002_00000.blob differ diff --git a/tests/blendfiles/geometry-nodes-sim/bakePath/blobs/00003_00000.blob b/tests/blendfiles/geometry-nodes-sim/bakePath/blobs/00003_00000.blob new file mode 100644 index 0000000..6f2a848 Binary files /dev/null and b/tests/blendfiles/geometry-nodes-sim/bakePath/blobs/00003_00000.blob differ diff --git a/tests/blendfiles/geometry-nodes-sim/bakePath/blobs/00004_00000.blob b/tests/blendfiles/geometry-nodes-sim/bakePath/blobs/00004_00000.blob new file mode 100644 index 0000000..0368bd4 Binary files /dev/null and b/tests/blendfiles/geometry-nodes-sim/bakePath/blobs/00004_00000.blob differ diff --git a/tests/blendfiles/geometry-nodes-sim/bakePath/meta/00001_00000.json b/tests/blendfiles/geometry-nodes-sim/bakePath/meta/00001_00000.json new file mode 100644 index 0000000..fc67fa9 --- /dev/null +++ b/tests/blendfiles/geometry-nodes-sim/bakePath/meta/00001_00000.json @@ -0,0 +1 @@ +{"version":3,"items":{"0":{"name":"Geometry","type":"GEOMETRY","data":{"mesh":{"num_vertices":2012,"num_edges":3978,"num_polygons":1968,"num_corners":7872,"poly_offsets":{"name":"00001_00000.blob","start":0,"size":7876},"materials":[],"attributes":[{"name":".corner_edge","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":7876,"size":31488}},{"name":"position","domain":"POINT","type":"FLOAT_VECTOR","data":{"name":"00001_00000.blob","start":39364,"size":24144}},{"name":".edge_verts","domain":"EDGE","type":"INT32_2D","data":{"name":"00001_00000.blob","start":63508,"size":31824}},{"name":".corner_vert","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":95332,"size":31488}},{"name":"UVMap","domain":"CORNER","type":"FLOAT2","data":{"name":"00001_00000.blob","start":126820,"size":62976}},{"name":".uv_select_vert","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".uv_select_edge","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".select_vert","domain":"POINT","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":197668,"size":2012}},{"name":".select_edge","domain":"EDGE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":199680,"size":3978}},{"name":".select_poly","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":203658,"size":1968}},{"name":".uv_select_face","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":205626,"size":1968}}]}}}}} \ No newline at end of file diff --git a/tests/blendfiles/geometry-nodes-sim/bakePath/meta/00002_00000.json b/tests/blendfiles/geometry-nodes-sim/bakePath/meta/00002_00000.json new file mode 100644 index 0000000..ee51a38 --- /dev/null +++ b/tests/blendfiles/geometry-nodes-sim/bakePath/meta/00002_00000.json @@ -0,0 +1 @@ +{"version":3,"items":{"0":{"name":"Geometry","type":"GEOMETRY","data":{"mesh":{"num_vertices":2012,"num_edges":3978,"num_polygons":1968,"num_corners":7872,"poly_offsets":{"name":"00001_00000.blob","start":0,"size":7876},"materials":[],"attributes":[{"name":".corner_edge","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":7876,"size":31488}},{"name":"position","domain":"POINT","type":"FLOAT_VECTOR","data":{"name":"00002_00000.blob","start":0,"size":24144}},{"name":".edge_verts","domain":"EDGE","type":"INT32_2D","data":{"name":"00001_00000.blob","start":63508,"size":31824}},{"name":".corner_vert","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":95332,"size":31488}},{"name":"UVMap","domain":"CORNER","type":"FLOAT2","data":{"name":"00001_00000.blob","start":126820,"size":62976}},{"name":".uv_select_vert","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".uv_select_edge","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".select_vert","domain":"POINT","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":197668,"size":2012}},{"name":".select_edge","domain":"EDGE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":199680,"size":3978}},{"name":".select_poly","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":203658,"size":1968}},{"name":".uv_select_face","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":205626,"size":1968}}]}}}}} \ No newline at end of file diff --git a/tests/blendfiles/geometry-nodes-sim/bakePath/meta/00003_00000.json b/tests/blendfiles/geometry-nodes-sim/bakePath/meta/00003_00000.json new file mode 100644 index 0000000..47b9087 --- /dev/null +++ b/tests/blendfiles/geometry-nodes-sim/bakePath/meta/00003_00000.json @@ -0,0 +1 @@ +{"version":3,"items":{"0":{"name":"Geometry","type":"GEOMETRY","data":{"mesh":{"num_vertices":2012,"num_edges":3978,"num_polygons":1968,"num_corners":7872,"poly_offsets":{"name":"00001_00000.blob","start":0,"size":7876},"materials":[],"attributes":[{"name":".corner_edge","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":7876,"size":31488}},{"name":"position","domain":"POINT","type":"FLOAT_VECTOR","data":{"name":"00003_00000.blob","start":0,"size":24144}},{"name":".edge_verts","domain":"EDGE","type":"INT32_2D","data":{"name":"00001_00000.blob","start":63508,"size":31824}},{"name":".corner_vert","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":95332,"size":31488}},{"name":"UVMap","domain":"CORNER","type":"FLOAT2","data":{"name":"00001_00000.blob","start":126820,"size":62976}},{"name":".uv_select_vert","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".uv_select_edge","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".select_vert","domain":"POINT","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":197668,"size":2012}},{"name":".select_edge","domain":"EDGE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":199680,"size":3978}},{"name":".select_poly","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":203658,"size":1968}},{"name":".uv_select_face","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":205626,"size":1968}}]}}}}} \ No newline at end of file diff --git a/tests/blendfiles/geometry-nodes-sim/bakePath/meta/00004_00000.json b/tests/blendfiles/geometry-nodes-sim/bakePath/meta/00004_00000.json new file mode 100644 index 0000000..0f6d801 --- /dev/null +++ b/tests/blendfiles/geometry-nodes-sim/bakePath/meta/00004_00000.json @@ -0,0 +1 @@ +{"version":3,"items":{"0":{"name":"Geometry","type":"GEOMETRY","data":{"mesh":{"num_vertices":2012,"num_edges":3978,"num_polygons":1968,"num_corners":7872,"poly_offsets":{"name":"00001_00000.blob","start":0,"size":7876},"materials":[],"attributes":[{"name":".corner_edge","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":7876,"size":31488}},{"name":"position","domain":"POINT","type":"FLOAT_VECTOR","data":{"name":"00004_00000.blob","start":0,"size":24144}},{"name":".edge_verts","domain":"EDGE","type":"INT32_2D","data":{"name":"00001_00000.blob","start":63508,"size":31824}},{"name":".corner_vert","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":95332,"size":31488}},{"name":"UVMap","domain":"CORNER","type":"FLOAT2","data":{"name":"00001_00000.blob","start":126820,"size":62976}},{"name":".uv_select_vert","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".uv_select_edge","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".select_vert","domain":"POINT","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":197668,"size":2012}},{"name":".select_edge","domain":"EDGE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":199680,"size":3978}},{"name":".select_poly","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":203658,"size":1968}},{"name":".uv_select_face","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":205626,"size":1968}}]}}}}} \ No newline at end of file diff --git a/tests/blendfiles/geometry-nodes-sim/config-on-sim-node/1260770905/blobs/00001_00000.blob b/tests/blendfiles/geometry-nodes-sim/config-on-sim-node/1260770905/blobs/00001_00000.blob new file mode 100644 index 0000000..419ed85 Binary files /dev/null and b/tests/blendfiles/geometry-nodes-sim/config-on-sim-node/1260770905/blobs/00001_00000.blob differ diff --git a/tests/blendfiles/geometry-nodes-sim/config-on-sim-node/1260770905/blobs/00002_00000.blob b/tests/blendfiles/geometry-nodes-sim/config-on-sim-node/1260770905/blobs/00002_00000.blob new file mode 100644 index 0000000..8860feb Binary files /dev/null and b/tests/blendfiles/geometry-nodes-sim/config-on-sim-node/1260770905/blobs/00002_00000.blob differ diff --git a/tests/blendfiles/geometry-nodes-sim/config-on-sim-node/1260770905/blobs/00003_00000.blob b/tests/blendfiles/geometry-nodes-sim/config-on-sim-node/1260770905/blobs/00003_00000.blob new file mode 100644 index 0000000..6f2a848 Binary files /dev/null and b/tests/blendfiles/geometry-nodes-sim/config-on-sim-node/1260770905/blobs/00003_00000.blob differ diff --git a/tests/blendfiles/geometry-nodes-sim/config-on-sim-node/1260770905/blobs/00004_00000.blob b/tests/blendfiles/geometry-nodes-sim/config-on-sim-node/1260770905/blobs/00004_00000.blob new file mode 100644 index 0000000..0368bd4 Binary files /dev/null and b/tests/blendfiles/geometry-nodes-sim/config-on-sim-node/1260770905/blobs/00004_00000.blob differ diff --git a/tests/blendfiles/geometry-nodes-sim/config-on-sim-node/1260770905/meta/00001_00000.json b/tests/blendfiles/geometry-nodes-sim/config-on-sim-node/1260770905/meta/00001_00000.json new file mode 100644 index 0000000..fc67fa9 --- /dev/null +++ b/tests/blendfiles/geometry-nodes-sim/config-on-sim-node/1260770905/meta/00001_00000.json @@ -0,0 +1 @@ +{"version":3,"items":{"0":{"name":"Geometry","type":"GEOMETRY","data":{"mesh":{"num_vertices":2012,"num_edges":3978,"num_polygons":1968,"num_corners":7872,"poly_offsets":{"name":"00001_00000.blob","start":0,"size":7876},"materials":[],"attributes":[{"name":".corner_edge","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":7876,"size":31488}},{"name":"position","domain":"POINT","type":"FLOAT_VECTOR","data":{"name":"00001_00000.blob","start":39364,"size":24144}},{"name":".edge_verts","domain":"EDGE","type":"INT32_2D","data":{"name":"00001_00000.blob","start":63508,"size":31824}},{"name":".corner_vert","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":95332,"size":31488}},{"name":"UVMap","domain":"CORNER","type":"FLOAT2","data":{"name":"00001_00000.blob","start":126820,"size":62976}},{"name":".uv_select_vert","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".uv_select_edge","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".select_vert","domain":"POINT","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":197668,"size":2012}},{"name":".select_edge","domain":"EDGE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":199680,"size":3978}},{"name":".select_poly","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":203658,"size":1968}},{"name":".uv_select_face","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":205626,"size":1968}}]}}}}} \ No newline at end of file diff --git a/tests/blendfiles/geometry-nodes-sim/config-on-sim-node/1260770905/meta/00002_00000.json b/tests/blendfiles/geometry-nodes-sim/config-on-sim-node/1260770905/meta/00002_00000.json new file mode 100644 index 0000000..ee51a38 --- /dev/null +++ b/tests/blendfiles/geometry-nodes-sim/config-on-sim-node/1260770905/meta/00002_00000.json @@ -0,0 +1 @@ +{"version":3,"items":{"0":{"name":"Geometry","type":"GEOMETRY","data":{"mesh":{"num_vertices":2012,"num_edges":3978,"num_polygons":1968,"num_corners":7872,"poly_offsets":{"name":"00001_00000.blob","start":0,"size":7876},"materials":[],"attributes":[{"name":".corner_edge","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":7876,"size":31488}},{"name":"position","domain":"POINT","type":"FLOAT_VECTOR","data":{"name":"00002_00000.blob","start":0,"size":24144}},{"name":".edge_verts","domain":"EDGE","type":"INT32_2D","data":{"name":"00001_00000.blob","start":63508,"size":31824}},{"name":".corner_vert","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":95332,"size":31488}},{"name":"UVMap","domain":"CORNER","type":"FLOAT2","data":{"name":"00001_00000.blob","start":126820,"size":62976}},{"name":".uv_select_vert","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".uv_select_edge","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".select_vert","domain":"POINT","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":197668,"size":2012}},{"name":".select_edge","domain":"EDGE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":199680,"size":3978}},{"name":".select_poly","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":203658,"size":1968}},{"name":".uv_select_face","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":205626,"size":1968}}]}}}}} \ No newline at end of file diff --git a/tests/blendfiles/geometry-nodes-sim/config-on-sim-node/1260770905/meta/00003_00000.json b/tests/blendfiles/geometry-nodes-sim/config-on-sim-node/1260770905/meta/00003_00000.json new file mode 100644 index 0000000..47b9087 --- /dev/null +++ b/tests/blendfiles/geometry-nodes-sim/config-on-sim-node/1260770905/meta/00003_00000.json @@ -0,0 +1 @@ +{"version":3,"items":{"0":{"name":"Geometry","type":"GEOMETRY","data":{"mesh":{"num_vertices":2012,"num_edges":3978,"num_polygons":1968,"num_corners":7872,"poly_offsets":{"name":"00001_00000.blob","start":0,"size":7876},"materials":[],"attributes":[{"name":".corner_edge","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":7876,"size":31488}},{"name":"position","domain":"POINT","type":"FLOAT_VECTOR","data":{"name":"00003_00000.blob","start":0,"size":24144}},{"name":".edge_verts","domain":"EDGE","type":"INT32_2D","data":{"name":"00001_00000.blob","start":63508,"size":31824}},{"name":".corner_vert","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":95332,"size":31488}},{"name":"UVMap","domain":"CORNER","type":"FLOAT2","data":{"name":"00001_00000.blob","start":126820,"size":62976}},{"name":".uv_select_vert","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".uv_select_edge","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".select_vert","domain":"POINT","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":197668,"size":2012}},{"name":".select_edge","domain":"EDGE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":199680,"size":3978}},{"name":".select_poly","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":203658,"size":1968}},{"name":".uv_select_face","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":205626,"size":1968}}]}}}}} \ No newline at end of file diff --git a/tests/blendfiles/geometry-nodes-sim/config-on-sim-node/1260770905/meta/00004_00000.json b/tests/blendfiles/geometry-nodes-sim/config-on-sim-node/1260770905/meta/00004_00000.json new file mode 100644 index 0000000..0f6d801 --- /dev/null +++ b/tests/blendfiles/geometry-nodes-sim/config-on-sim-node/1260770905/meta/00004_00000.json @@ -0,0 +1 @@ +{"version":3,"items":{"0":{"name":"Geometry","type":"GEOMETRY","data":{"mesh":{"num_vertices":2012,"num_edges":3978,"num_polygons":1968,"num_corners":7872,"poly_offsets":{"name":"00001_00000.blob","start":0,"size":7876},"materials":[],"attributes":[{"name":".corner_edge","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":7876,"size":31488}},{"name":"position","domain":"POINT","type":"FLOAT_VECTOR","data":{"name":"00004_00000.blob","start":0,"size":24144}},{"name":".edge_verts","domain":"EDGE","type":"INT32_2D","data":{"name":"00001_00000.blob","start":63508,"size":31824}},{"name":".corner_vert","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":95332,"size":31488}},{"name":"UVMap","domain":"CORNER","type":"FLOAT2","data":{"name":"00001_00000.blob","start":126820,"size":62976}},{"name":".uv_select_vert","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".uv_select_edge","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".select_vert","domain":"POINT","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":197668,"size":2012}},{"name":".select_edge","domain":"EDGE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":199680,"size":3978}},{"name":".select_poly","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":203658,"size":1968}},{"name":".uv_select_face","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":205626,"size":1968}}]}}}}} \ No newline at end of file diff --git a/tests/blendfiles/geometry-nodes-sim/geonodes-sim-cache.blend b/tests/blendfiles/geometry-nodes-sim/geonodes-sim-cache.blend new file mode 100644 index 0000000..a6bf4c7 Binary files /dev/null and b/tests/blendfiles/geometry-nodes-sim/geonodes-sim-cache.blend differ diff --git a/tests/blendfiles/geometry-nodes-sim/only-set-on-modifier/1260770905/blobs/00001_00000.blob b/tests/blendfiles/geometry-nodes-sim/only-set-on-modifier/1260770905/blobs/00001_00000.blob new file mode 100644 index 0000000..419ed85 Binary files /dev/null and b/tests/blendfiles/geometry-nodes-sim/only-set-on-modifier/1260770905/blobs/00001_00000.blob differ diff --git a/tests/blendfiles/geometry-nodes-sim/only-set-on-modifier/1260770905/blobs/00002_00000.blob b/tests/blendfiles/geometry-nodes-sim/only-set-on-modifier/1260770905/blobs/00002_00000.blob new file mode 100644 index 0000000..8860feb Binary files /dev/null and b/tests/blendfiles/geometry-nodes-sim/only-set-on-modifier/1260770905/blobs/00002_00000.blob differ diff --git a/tests/blendfiles/geometry-nodes-sim/only-set-on-modifier/1260770905/blobs/00003_00000.blob b/tests/blendfiles/geometry-nodes-sim/only-set-on-modifier/1260770905/blobs/00003_00000.blob new file mode 100644 index 0000000..6f2a848 Binary files /dev/null and b/tests/blendfiles/geometry-nodes-sim/only-set-on-modifier/1260770905/blobs/00003_00000.blob differ diff --git a/tests/blendfiles/geometry-nodes-sim/only-set-on-modifier/1260770905/blobs/00004_00000.blob b/tests/blendfiles/geometry-nodes-sim/only-set-on-modifier/1260770905/blobs/00004_00000.blob new file mode 100644 index 0000000..0368bd4 Binary files /dev/null and b/tests/blendfiles/geometry-nodes-sim/only-set-on-modifier/1260770905/blobs/00004_00000.blob differ diff --git a/tests/blendfiles/geometry-nodes-sim/only-set-on-modifier/1260770905/meta/00001_00000.json b/tests/blendfiles/geometry-nodes-sim/only-set-on-modifier/1260770905/meta/00001_00000.json new file mode 100644 index 0000000..fc67fa9 --- /dev/null +++ b/tests/blendfiles/geometry-nodes-sim/only-set-on-modifier/1260770905/meta/00001_00000.json @@ -0,0 +1 @@ +{"version":3,"items":{"0":{"name":"Geometry","type":"GEOMETRY","data":{"mesh":{"num_vertices":2012,"num_edges":3978,"num_polygons":1968,"num_corners":7872,"poly_offsets":{"name":"00001_00000.blob","start":0,"size":7876},"materials":[],"attributes":[{"name":".corner_edge","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":7876,"size":31488}},{"name":"position","domain":"POINT","type":"FLOAT_VECTOR","data":{"name":"00001_00000.blob","start":39364,"size":24144}},{"name":".edge_verts","domain":"EDGE","type":"INT32_2D","data":{"name":"00001_00000.blob","start":63508,"size":31824}},{"name":".corner_vert","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":95332,"size":31488}},{"name":"UVMap","domain":"CORNER","type":"FLOAT2","data":{"name":"00001_00000.blob","start":126820,"size":62976}},{"name":".uv_select_vert","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".uv_select_edge","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".select_vert","domain":"POINT","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":197668,"size":2012}},{"name":".select_edge","domain":"EDGE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":199680,"size":3978}},{"name":".select_poly","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":203658,"size":1968}},{"name":".uv_select_face","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":205626,"size":1968}}]}}}}} \ No newline at end of file diff --git a/tests/blendfiles/geometry-nodes-sim/only-set-on-modifier/1260770905/meta/00002_00000.json b/tests/blendfiles/geometry-nodes-sim/only-set-on-modifier/1260770905/meta/00002_00000.json new file mode 100644 index 0000000..ee51a38 --- /dev/null +++ b/tests/blendfiles/geometry-nodes-sim/only-set-on-modifier/1260770905/meta/00002_00000.json @@ -0,0 +1 @@ +{"version":3,"items":{"0":{"name":"Geometry","type":"GEOMETRY","data":{"mesh":{"num_vertices":2012,"num_edges":3978,"num_polygons":1968,"num_corners":7872,"poly_offsets":{"name":"00001_00000.blob","start":0,"size":7876},"materials":[],"attributes":[{"name":".corner_edge","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":7876,"size":31488}},{"name":"position","domain":"POINT","type":"FLOAT_VECTOR","data":{"name":"00002_00000.blob","start":0,"size":24144}},{"name":".edge_verts","domain":"EDGE","type":"INT32_2D","data":{"name":"00001_00000.blob","start":63508,"size":31824}},{"name":".corner_vert","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":95332,"size":31488}},{"name":"UVMap","domain":"CORNER","type":"FLOAT2","data":{"name":"00001_00000.blob","start":126820,"size":62976}},{"name":".uv_select_vert","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".uv_select_edge","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".select_vert","domain":"POINT","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":197668,"size":2012}},{"name":".select_edge","domain":"EDGE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":199680,"size":3978}},{"name":".select_poly","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":203658,"size":1968}},{"name":".uv_select_face","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":205626,"size":1968}}]}}}}} \ No newline at end of file diff --git a/tests/blendfiles/geometry-nodes-sim/only-set-on-modifier/1260770905/meta/00003_00000.json b/tests/blendfiles/geometry-nodes-sim/only-set-on-modifier/1260770905/meta/00003_00000.json new file mode 100644 index 0000000..47b9087 --- /dev/null +++ b/tests/blendfiles/geometry-nodes-sim/only-set-on-modifier/1260770905/meta/00003_00000.json @@ -0,0 +1 @@ +{"version":3,"items":{"0":{"name":"Geometry","type":"GEOMETRY","data":{"mesh":{"num_vertices":2012,"num_edges":3978,"num_polygons":1968,"num_corners":7872,"poly_offsets":{"name":"00001_00000.blob","start":0,"size":7876},"materials":[],"attributes":[{"name":".corner_edge","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":7876,"size":31488}},{"name":"position","domain":"POINT","type":"FLOAT_VECTOR","data":{"name":"00003_00000.blob","start":0,"size":24144}},{"name":".edge_verts","domain":"EDGE","type":"INT32_2D","data":{"name":"00001_00000.blob","start":63508,"size":31824}},{"name":".corner_vert","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":95332,"size":31488}},{"name":"UVMap","domain":"CORNER","type":"FLOAT2","data":{"name":"00001_00000.blob","start":126820,"size":62976}},{"name":".uv_select_vert","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".uv_select_edge","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".select_vert","domain":"POINT","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":197668,"size":2012}},{"name":".select_edge","domain":"EDGE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":199680,"size":3978}},{"name":".select_poly","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":203658,"size":1968}},{"name":".uv_select_face","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":205626,"size":1968}}]}}}}} \ No newline at end of file diff --git a/tests/blendfiles/geometry-nodes-sim/only-set-on-modifier/1260770905/meta/00004_00000.json b/tests/blendfiles/geometry-nodes-sim/only-set-on-modifier/1260770905/meta/00004_00000.json new file mode 100644 index 0000000..0f6d801 --- /dev/null +++ b/tests/blendfiles/geometry-nodes-sim/only-set-on-modifier/1260770905/meta/00004_00000.json @@ -0,0 +1 @@ +{"version":3,"items":{"0":{"name":"Geometry","type":"GEOMETRY","data":{"mesh":{"num_vertices":2012,"num_edges":3978,"num_polygons":1968,"num_corners":7872,"poly_offsets":{"name":"00001_00000.blob","start":0,"size":7876},"materials":[],"attributes":[{"name":".corner_edge","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":7876,"size":31488}},{"name":"position","domain":"POINT","type":"FLOAT_VECTOR","data":{"name":"00004_00000.blob","start":0,"size":24144}},{"name":".edge_verts","domain":"EDGE","type":"INT32_2D","data":{"name":"00001_00000.blob","start":63508,"size":31824}},{"name":".corner_vert","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":95332,"size":31488}},{"name":"UVMap","domain":"CORNER","type":"FLOAT2","data":{"name":"00001_00000.blob","start":126820,"size":62976}},{"name":".uv_select_vert","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".uv_select_edge","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".select_vert","domain":"POINT","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":197668,"size":2012}},{"name":".select_edge","domain":"EDGE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":199680,"size":3978}},{"name":".select_poly","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":203658,"size":1968}},{"name":".uv_select_face","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":205626,"size":1968}}]}}}}} \ No newline at end of file diff --git a/tests/blendfiles/geometry-nodes-sim/set-on-node/blobs/00001_00000.blob b/tests/blendfiles/geometry-nodes-sim/set-on-node/blobs/00001_00000.blob new file mode 100644 index 0000000..419ed85 Binary files /dev/null and b/tests/blendfiles/geometry-nodes-sim/set-on-node/blobs/00001_00000.blob differ diff --git a/tests/blendfiles/geometry-nodes-sim/set-on-node/blobs/00002_00000.blob b/tests/blendfiles/geometry-nodes-sim/set-on-node/blobs/00002_00000.blob new file mode 100644 index 0000000..8860feb Binary files /dev/null and b/tests/blendfiles/geometry-nodes-sim/set-on-node/blobs/00002_00000.blob differ diff --git a/tests/blendfiles/geometry-nodes-sim/set-on-node/blobs/00003_00000.blob b/tests/blendfiles/geometry-nodes-sim/set-on-node/blobs/00003_00000.blob new file mode 100644 index 0000000..6f2a848 Binary files /dev/null and b/tests/blendfiles/geometry-nodes-sim/set-on-node/blobs/00003_00000.blob differ diff --git a/tests/blendfiles/geometry-nodes-sim/set-on-node/blobs/00004_00000.blob b/tests/blendfiles/geometry-nodes-sim/set-on-node/blobs/00004_00000.blob new file mode 100644 index 0000000..0368bd4 Binary files /dev/null and b/tests/blendfiles/geometry-nodes-sim/set-on-node/blobs/00004_00000.blob differ diff --git a/tests/blendfiles/geometry-nodes-sim/set-on-node/meta/00001_00000.json b/tests/blendfiles/geometry-nodes-sim/set-on-node/meta/00001_00000.json new file mode 100644 index 0000000..fc67fa9 --- /dev/null +++ b/tests/blendfiles/geometry-nodes-sim/set-on-node/meta/00001_00000.json @@ -0,0 +1 @@ +{"version":3,"items":{"0":{"name":"Geometry","type":"GEOMETRY","data":{"mesh":{"num_vertices":2012,"num_edges":3978,"num_polygons":1968,"num_corners":7872,"poly_offsets":{"name":"00001_00000.blob","start":0,"size":7876},"materials":[],"attributes":[{"name":".corner_edge","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":7876,"size":31488}},{"name":"position","domain":"POINT","type":"FLOAT_VECTOR","data":{"name":"00001_00000.blob","start":39364,"size":24144}},{"name":".edge_verts","domain":"EDGE","type":"INT32_2D","data":{"name":"00001_00000.blob","start":63508,"size":31824}},{"name":".corner_vert","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":95332,"size":31488}},{"name":"UVMap","domain":"CORNER","type":"FLOAT2","data":{"name":"00001_00000.blob","start":126820,"size":62976}},{"name":".uv_select_vert","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".uv_select_edge","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".select_vert","domain":"POINT","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":197668,"size":2012}},{"name":".select_edge","domain":"EDGE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":199680,"size":3978}},{"name":".select_poly","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":203658,"size":1968}},{"name":".uv_select_face","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":205626,"size":1968}}]}}}}} \ No newline at end of file diff --git a/tests/blendfiles/geometry-nodes-sim/set-on-node/meta/00002_00000.json b/tests/blendfiles/geometry-nodes-sim/set-on-node/meta/00002_00000.json new file mode 100644 index 0000000..ee51a38 --- /dev/null +++ b/tests/blendfiles/geometry-nodes-sim/set-on-node/meta/00002_00000.json @@ -0,0 +1 @@ +{"version":3,"items":{"0":{"name":"Geometry","type":"GEOMETRY","data":{"mesh":{"num_vertices":2012,"num_edges":3978,"num_polygons":1968,"num_corners":7872,"poly_offsets":{"name":"00001_00000.blob","start":0,"size":7876},"materials":[],"attributes":[{"name":".corner_edge","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":7876,"size":31488}},{"name":"position","domain":"POINT","type":"FLOAT_VECTOR","data":{"name":"00002_00000.blob","start":0,"size":24144}},{"name":".edge_verts","domain":"EDGE","type":"INT32_2D","data":{"name":"00001_00000.blob","start":63508,"size":31824}},{"name":".corner_vert","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":95332,"size":31488}},{"name":"UVMap","domain":"CORNER","type":"FLOAT2","data":{"name":"00001_00000.blob","start":126820,"size":62976}},{"name":".uv_select_vert","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".uv_select_edge","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".select_vert","domain":"POINT","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":197668,"size":2012}},{"name":".select_edge","domain":"EDGE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":199680,"size":3978}},{"name":".select_poly","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":203658,"size":1968}},{"name":".uv_select_face","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":205626,"size":1968}}]}}}}} \ No newline at end of file diff --git a/tests/blendfiles/geometry-nodes-sim/set-on-node/meta/00003_00000.json b/tests/blendfiles/geometry-nodes-sim/set-on-node/meta/00003_00000.json new file mode 100644 index 0000000..47b9087 --- /dev/null +++ b/tests/blendfiles/geometry-nodes-sim/set-on-node/meta/00003_00000.json @@ -0,0 +1 @@ +{"version":3,"items":{"0":{"name":"Geometry","type":"GEOMETRY","data":{"mesh":{"num_vertices":2012,"num_edges":3978,"num_polygons":1968,"num_corners":7872,"poly_offsets":{"name":"00001_00000.blob","start":0,"size":7876},"materials":[],"attributes":[{"name":".corner_edge","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":7876,"size":31488}},{"name":"position","domain":"POINT","type":"FLOAT_VECTOR","data":{"name":"00003_00000.blob","start":0,"size":24144}},{"name":".edge_verts","domain":"EDGE","type":"INT32_2D","data":{"name":"00001_00000.blob","start":63508,"size":31824}},{"name":".corner_vert","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":95332,"size":31488}},{"name":"UVMap","domain":"CORNER","type":"FLOAT2","data":{"name":"00001_00000.blob","start":126820,"size":62976}},{"name":".uv_select_vert","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".uv_select_edge","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".select_vert","domain":"POINT","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":197668,"size":2012}},{"name":".select_edge","domain":"EDGE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":199680,"size":3978}},{"name":".select_poly","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":203658,"size":1968}},{"name":".uv_select_face","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":205626,"size":1968}}]}}}}} \ No newline at end of file diff --git a/tests/blendfiles/geometry-nodes-sim/set-on-node/meta/00004_00000.json b/tests/blendfiles/geometry-nodes-sim/set-on-node/meta/00004_00000.json new file mode 100644 index 0000000..0f6d801 --- /dev/null +++ b/tests/blendfiles/geometry-nodes-sim/set-on-node/meta/00004_00000.json @@ -0,0 +1 @@ +{"version":3,"items":{"0":{"name":"Geometry","type":"GEOMETRY","data":{"mesh":{"num_vertices":2012,"num_edges":3978,"num_polygons":1968,"num_corners":7872,"poly_offsets":{"name":"00001_00000.blob","start":0,"size":7876},"materials":[],"attributes":[{"name":".corner_edge","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":7876,"size":31488}},{"name":"position","domain":"POINT","type":"FLOAT_VECTOR","data":{"name":"00004_00000.blob","start":0,"size":24144}},{"name":".edge_verts","domain":"EDGE","type":"INT32_2D","data":{"name":"00001_00000.blob","start":63508,"size":31824}},{"name":".corner_vert","domain":"CORNER","type":"INT","data":{"name":"00001_00000.blob","start":95332,"size":31488}},{"name":"UVMap","domain":"CORNER","type":"FLOAT2","data":{"name":"00001_00000.blob","start":126820,"size":62976}},{"name":".uv_select_vert","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".uv_select_edge","domain":"CORNER","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":189796,"size":7872}},{"name":".select_vert","domain":"POINT","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":197668,"size":2012}},{"name":".select_edge","domain":"EDGE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":199680,"size":3978}},{"name":".select_poly","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":203658,"size":1968}},{"name":".uv_select_face","domain":"FACE","type":"BOOLEAN","data":{"name":"00001_00000.blob","start":205626,"size":1968}}]}}}}} \ No newline at end of file diff --git a/tests/blendfiles/multiple_geometry_nodes_bakes.blend b/tests/blendfiles/multiple_geometry_nodes_bakes.blend new file mode 100644 index 0000000..cb977c1 Binary files /dev/null and b/tests/blendfiles/multiple_geometry_nodes_bakes.blend differ diff --git a/tests/test_blendfile_loading.py b/tests/test_blendfile_loading.py index 4dea438..355d1a1 100644 --- a/tests/test_blendfile_loading.py +++ b/tests/test_blendfile_loading.py @@ -297,6 +297,29 @@ class ArrayTest(AbstractBlendFileTest): self.assertEqual(name, tex.id_name) +class DynamicArrayTest(AbstractBlendFileTest): + def test_dynamic_array_of_bakes(self): + self.bf = blendfile.BlendFile(self.blendfiles / "multiple_geometry_nodes_bakes.blend") + obj = self.bf.code_index[b"OB"][0] + assert isinstance(obj, blendfile.BlendFileBlock) + modifier = obj.get_pointer((b"modifiers", b"first")) + assert isinstance(modifier, blendfile.BlendFileBlock) + bakes = modifier.get_pointer(b"bakes") + + bake_count = bakes.count + self.assertEqual(3, bake_count) + + for i, bake in enumerate(blendfile.iterators.dynamic_array(bakes)): + if i == 0: + frame_start = 37 + if i == 1: + frame_start = 5 + if i == 2: + frame_start = 12 + + self.assertEqual(frame_start, bake.get(b"frame_start")) + + class CompressionRecognitionTest(AbstractBlendFileTest): def _find_compression_type(self, filename: str) -> magic_compression.Compression: path = self.blendfiles / filename diff --git a/tests/test_tracer.py b/tests/test_tracer.py index 68699e8..3ad6600 100644 --- a/tests/test_tracer.py +++ b/tests/test_tracer.py @@ -1,4 +1,5 @@ import collections +import functools import logging import sys import typing @@ -552,6 +553,56 @@ class DepsTest(AbstractTracerTest): }, ) + def test_geonodes_sim_data(self) -> None: + # Simplify the rest of the code by putting the values that are the same of all cases here: + expect_bake = functools.partial( + Expect, + dirname_field=None, + basename_field=None, + is_sequence=True, + ) + expects = { + # Two objects that use "Inherit from Modifer": + b"OBCustom Bake Path.modifiers[0].bakes[0]": [ + # Custom path set on the sim node, so this is sim node data. + expect_bake( + type="NodesModifierBake", + full_field="*directory", + asset_path=b"//bakePath", + ), + ], + b"OBDefault Bake Path.modifiers[0].bakes[0]": [ + # NO custom path set on the sim node, so this follows the modifier data. + expect_bake( + type="NodesModifierData", + full_field="*simulation_bake_directory", + asset_path=b"//config-on-sim-node", + ), + ], + # Two objects that have the config only on the node itself: + b"OBCustom Bake Path.001.modifiers[0].bakes[0]": [ + expect_bake( + type="NodesModifierBake", + full_field="*directory", + asset_path=b"//set-on-node", + ), + ], + b"OBDefault Bake Path.001.modifiers[0].bakes[0]": [ + expect_bake( + type="NodesModifierData", + full_field="*simulation_bake_directory", + asset_path=b"//only-set-on-modifier", + ), + ], + } + + # NOTE: there are two more objects in the scene, 'Packed Bake' and + # 'Packed Bake.001'. But, because those use packed data (on the modifier + # resp. bake level), they should not be listed as dependencies. + + self.maxDiff = None + self.assert_deps("geometry-nodes-sim/geonodes-sim-cache.blend", expects) + def test_recursion_loop(self): infinite_bfile = self.blendfiles / "recursive_dependency_1.blend"