[Bf-extensions-cvs] [1d5c8b54] master: glTF exporter: Fix T96517 better instance management when no modifiers

Julien Duroure noreply at git.blender.org
Tue Mar 29 17:39:49 CEST 2022


Commit: 1d5c8b54ee99433ff5c3ef416f1f9bc1fd8780ef
Author: Julien Duroure
Date:   Tue Mar 29 17:39:41 2022 +0200
Branches: master
https://developer.blender.org/rBA1d5c8b54ee99433ff5c3ef416f1f9bc1fd8780ef

glTF exporter: Fix T96517 better instance management when no modifiers

===================================================================

M	io_scene_gltf2/__init__.py
M	io_scene_gltf2/blender/exp/gltf2_blender_gather_mesh.py
M	io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py

===================================================================

diff --git a/io_scene_gltf2/__init__.py b/io_scene_gltf2/__init__.py
index c2704ffd..11dbdce6 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 c8987127..fd334cb3 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
 
 
- at 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 25784960..b0b2d4b8 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



More information about the Bf-extensions-cvs mailing list