Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Duroure <julien.duroure@gmail.com>2022-03-29 18:39:41 +0300
committerJulien Duroure <julien.duroure@gmail.com>2022-03-29 18:39:41 +0300
commit1d5c8b54ee99433ff5c3ef416f1f9bc1fd8780ef (patch)
tree512ef9e654294d78c068546a8a9271147c304d4d
parentff99cb3cf86ff2824262541b1e6d981be76ea2ac (diff)
glTF exporter: Fix T96517 better instance management when no modifiers
-rwxr-xr-xio_scene_gltf2/__init__.py2
-rwxr-xr-xio_scene_gltf2/blender/exp/gltf2_blender_gather_mesh.py1
-rwxr-xr-xio_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py47
3 files changed, 26 insertions, 24 deletions
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
-@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