diff --git a/io_scene_gltf2/__init__.py b/io_scene_gltf2/__init__.py index c2704ffd0cb654afecf2bba443c46c965ba4745c..11dbdce6445a9b7624c7c440b255657028614ac6 100755 --- a/io_scene_gltf2/__init__.py +++ b/io_scene_gltf2/__init__.py @@ -4,7 +4,7 @@ bl_info = { 'name': 'glTF 2.0 format', 'author': 'Julien Duroure, Scurest, Norbert Nopper, Urs Hanselmann, Moritz Becher, Benjamin Schmithüsen, Jim Eckerlein, and many external contributors', - "version": (3, 2, 15), + "version": (3, 2, 16), 'blender': (3, 1, 0), 'location': 'File > Import-Export', 'description': 'Import-Export as glTF 2.0', diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_mesh.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_mesh.py index c898712748cc6e67dd41bd0f3a957c51b2467f80..fd334cb3ebcbf18506417ab2640687d4018665ca 100755 --- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_mesh.py +++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_mesh.py @@ -12,7 +12,6 @@ from io_scene_gltf2.io.com.gltf2_io_debug import print_console from io_scene_gltf2.io.exp.gltf2_io_user_extensions import export_user_extensions -@cached def get_mesh_cache_key(blender_mesh, blender_object, vertex_groups, diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py index 2578496062789c1b15f44fa559cfd3c70b61ff82..b0b2d4b8e693fcbc068062323e9ff6a681274f41 100755 --- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py +++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py @@ -194,28 +194,31 @@ def __gather_mesh(vnode, blender_object, export_settings): if len(modifiers) == 0: modifiers = None - # TODO for objects without any modifiers, we can keep original mesh_data - # It will instance mesh in glTF - if export_settings[gltf2_blender_export_keys.APPLY]: - armature_modifiers = {} - if export_settings[gltf2_blender_export_keys.SKINS]: - # temporarily disable Armature modifiers if exporting skins - for idx, modifier in enumerate(blender_object.modifiers): - if modifier.type == 'ARMATURE': - armature_modifiers[idx] = modifier.show_viewport - modifier.show_viewport = False - - 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 blender_object.data.keys(): - blender_mesh[prop] = blender_object.data[prop] - skip_filter = True - if export_settings[gltf2_blender_export_keys.SKINS]: - # restore Armature modifiers - for idx, show_viewport in armature_modifiers.items(): - blender_object.modifiers[idx].show_viewport = show_viewport + if export_settings[gltf2_blender_export_keys.APPLY]: + if modifiers is None: # If no modifier, use original mesh, it will instance all shared mesh in a single glTF mesh + blender_mesh = blender_object.data + skip_filter = False + else: + armature_modifiers = {} + if export_settings[gltf2_blender_export_keys.SKINS]: + # temporarily disable Armature modifiers if exporting skins + for idx, modifier in enumerate(blender_object.modifiers): + if modifier.type == 'ARMATURE': + armature_modifiers[idx] = modifier.show_viewport + modifier.show_viewport = False + + 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 blender_object.data.keys(): + blender_mesh[prop] = blender_object.data[prop] + skip_filter = True + + if export_settings[gltf2_blender_export_keys.SKINS]: + # restore Armature modifiers + for idx, show_viewport in armature_modifiers.items(): + blender_object.modifiers[idx].show_viewport = show_viewport else: blender_mesh = blender_object.data skip_filter = False @@ -249,7 +252,7 @@ def __gather_mesh(vnode, blender_object, export_settings): None, export_settings) - if export_settings[gltf2_blender_export_keys.APPLY]: + if export_settings[gltf2_blender_export_keys.APPLY] and modifiers is not None: blender_mesh_owner.to_mesh_clear() return result