From b5499256e91f3245d1cf0b262f2964ae2dae48df Mon Sep 17 00:00:00 2001 From: Julien Duroure Date: Tue, 13 Aug 2024 19:13:27 +0200 Subject: [PATCH 1/3] Fix custom prop when apply modifier --- .../blender/exp/gltf2_blender_gather_nodes.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py b/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py index 0e6651627..789441436 100644 --- a/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py +++ b/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py @@ -303,8 +303,10 @@ def __gather_mesh(vnode, blender_object, export_settings): depsgraph = bpy.context.evaluated_depsgraph_get() blender_mesh_owner = blender_object.evaluated_get(depsgraph) blender_mesh = blender_mesh_owner.to_mesh(preserve_all_data_layers=True, depsgraph=depsgraph) - for prop in [p for p in blender_object.data.keys() if p not in BLACK_LIST]: - blender_mesh[prop] = blender_object.data[prop] + # Seems now (from 4.2) the custom properties are copied, so no need to copy them + # But we need to remove some properties that are not needed + for prop in [p for p in blender_object.data.keys() if p in BLACK_LIST]: + del blender_mesh[prop] if export_settings['gltf_skins']: # restore Armature modifiers From dfae932ea35d32020dea9976086d9267ca4f3110 Mon Sep 17 00:00:00 2001 From: Julien Duroure Date: Wed, 21 Aug 2024 08:41:17 +0200 Subject: [PATCH 2/3] Fix non regression --- .../blender/exp/gltf2_blender_gather_nodes.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py b/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py index 789441436..4d69c38f4 100644 --- a/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py +++ b/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py @@ -303,10 +303,16 @@ def __gather_mesh(vnode, blender_object, export_settings): depsgraph = bpy.context.evaluated_depsgraph_get() blender_mesh_owner = blender_object.evaluated_get(depsgraph) blender_mesh = blender_mesh_owner.to_mesh(preserve_all_data_layers=True, depsgraph=depsgraph) - # Seems now (from 4.2) the custom properties are copied, so no need to copy them + # Seems now (from 4.2) the custom properties are copied when evaluate a mesh that will not be changed + # so no need to copy them in that case # But we need to remove some properties that are not needed - for prop in [p for p in blender_object.data.keys() if p in BLACK_LIST]: - del blender_mesh[prop] + if len(blender_mesh.keys()) == 0: + # Copy custom properties + for prop in [p for p in blender_object.data.keys() if p not in BLACK_LIST]: + blender_mesh[prop] = blender_object.data[prop] + else: + for prop in [p for p in blender_object.data.keys() if p in BLACK_LIST]: + del blender_mesh[prop] if export_settings['gltf_skins']: # restore Armature modifiers From 04e1af7c8dc73f90417d8166cb8fb8c6e38630c5 Mon Sep 17 00:00:00 2001 From: Julien Duroure Date: Wed, 21 Aug 2024 09:21:55 +0200 Subject: [PATCH 3/3] Fix comments --- .../blender/exp/gltf2_blender_gather_nodes.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py b/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py index 4d69c38f4..a4b1a600d 100644 --- a/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py +++ b/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py @@ -303,14 +303,14 @@ def __gather_mesh(vnode, blender_object, export_settings): depsgraph = bpy.context.evaluated_depsgraph_get() blender_mesh_owner = blender_object.evaluated_get(depsgraph) blender_mesh = blender_mesh_owner.to_mesh(preserve_all_data_layers=True, depsgraph=depsgraph) - # Seems now (from 4.2) the custom properties are copied when evaluate a mesh that will not be changed - # so no need to copy them in that case - # But we need to remove some properties that are not needed + # Seems now (from 4.2) the custom properties are Statically Typed + # so no need to copy them in that case, because overwriting them will crash if len(blender_mesh.keys()) == 0: # Copy custom properties for prop in [p for p in blender_object.data.keys() if p not in BLACK_LIST]: blender_mesh[prop] = blender_object.data[prop] else: + # But we need to remove some properties that are not needed for prop in [p for p in blender_object.data.keys() if p in BLACK_LIST]: del blender_mesh[prop]