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:
Diffstat (limited to 'io_scene_gltf2/blender/exp/gltf2_blender_gather_mesh.py')
-rwxr-xr-xio_scene_gltf2/blender/exp/gltf2_blender_gather_mesh.py85
1 files changed, 50 insertions, 35 deletions
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 4b301d22..fd334cb3 100755
--- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_mesh.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_mesh.py
@@ -1,21 +1,10 @@
+# SPDX-License-Identifier: Apache-2.0
# Copyright 2018-2021 The glTF-Blender-IO authors.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
import bpy
from typing import Optional, Dict, List, Any, Tuple
from .gltf2_blender_export_keys import MORPH
-from io_scene_gltf2.blender.exp.gltf2_blender_gather_cache import cached
+from io_scene_gltf2.blender.exp.gltf2_blender_gather_cache import cached, cached_by_key
from io_scene_gltf2.io.com import gltf2_io
from io_scene_gltf2.blender.exp import gltf2_blender_gather_primitives
from ..com.gltf2_blender_extras import generate_extras
@@ -23,31 +12,64 @@ 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,
+ modifiers,
+ skip_filter,
+ materials,
+ original_mesh,
+ export_settings):
+ # Use id of original mesh
+ # Do not use bpy.types that can be unhashable
+ # Do not use mesh name, that can be not unique (when linked)
+
+ # If materials are not exported, no need to cache by material
+ if export_settings['gltf_materials'] is None:
+ mats = None
+ else:
+ mats = tuple(id(m) if m is not None else None for m in materials)
+
+ # TODO check what is really needed for modifiers
+
+ mesh_to_id_cache = blender_mesh if original_mesh is None else original_mesh
+ return (
+ (id(mesh_to_id_cache),),
+ (modifiers,),
+ (skip_filter,), #TODO to check if still needed
+ mats
+ )
+
+@cached_by_key(key=get_mesh_cache_key)
def gather_mesh(blender_mesh: bpy.types.Mesh,
- library: Optional[str],
- blender_object: Optional[bpy.types.Object],
+ uuid_for_skined_data,
vertex_groups: Optional[bpy.types.VertexGroups],
modifiers: Optional[bpy.types.ObjectModifiers],
skip_filter: bool,
- material_names: Tuple[str],
+ materials: Tuple[bpy.types.Material],
+ original_mesh: bpy.types.Mesh,
export_settings
) -> Optional[gltf2_io.Mesh]:
- if not skip_filter and not __filter_mesh(blender_mesh, library, vertex_groups, modifiers, export_settings):
+ if not skip_filter and not __filter_mesh(blender_mesh, vertex_groups, modifiers, export_settings):
return None
mesh = gltf2_io.Mesh(
- extensions=__gather_extensions(blender_mesh, library, vertex_groups, modifiers, export_settings),
- extras=__gather_extras(blender_mesh, library, vertex_groups, modifiers, export_settings),
- name=__gather_name(blender_mesh, library, vertex_groups, modifiers, export_settings),
- weights=__gather_weights(blender_mesh, library, vertex_groups, modifiers, export_settings),
- primitives=__gather_primitives(blender_mesh, library, blender_object, vertex_groups, modifiers, material_names, export_settings),
+ extensions=__gather_extensions(blender_mesh, vertex_groups, modifiers, export_settings),
+ extras=__gather_extras(blender_mesh, vertex_groups, modifiers, export_settings),
+ name=__gather_name(blender_mesh, vertex_groups, modifiers, export_settings),
+ weights=__gather_weights(blender_mesh, vertex_groups, modifiers, export_settings),
+ primitives=__gather_primitives(blender_mesh, uuid_for_skined_data, vertex_groups, modifiers, materials, export_settings),
)
if len(mesh.primitives) == 0:
print_console("WARNING", "Mesh '{}' has no primitives and will be omitted.".format(mesh.name))
return None
+ blender_object = None
+ if uuid_for_skined_data:
+ blender_object = export_settings['vtree'].nodes[uuid_for_skined_data].blender_object
+
+
export_user_extensions('gather_mesh_hook',
export_settings,
mesh,
@@ -56,13 +78,12 @@ def gather_mesh(blender_mesh: bpy.types.Mesh,
vertex_groups,
modifiers,
skip_filter,
- material_names)
+ materials)
return mesh
def __filter_mesh(blender_mesh: bpy.types.Mesh,
- library: Optional[str],
vertex_groups: Optional[bpy.types.VertexGroups],
modifiers: Optional[bpy.types.ObjectModifiers],
export_settings
@@ -74,7 +95,6 @@ def __filter_mesh(blender_mesh: bpy.types.Mesh,
def __gather_extensions(blender_mesh: bpy.types.Mesh,
- library: Optional[str],
vertex_groups: Optional[bpy.types.VertexGroups],
modifiers: Optional[bpy.types.ObjectModifiers],
export_settings
@@ -83,7 +103,6 @@ def __gather_extensions(blender_mesh: bpy.types.Mesh,
def __gather_extras(blender_mesh: bpy.types.Mesh,
- library: Optional[str],
vertex_groups: Optional[bpy.types.VertexGroups],
modifiers: Optional[bpy.types.ObjectModifiers],
export_settings
@@ -111,7 +130,6 @@ def __gather_extras(blender_mesh: bpy.types.Mesh,
def __gather_name(blender_mesh: bpy.types.Mesh,
- library: Optional[str],
vertex_groups: Optional[bpy.types.VertexGroups],
modifiers: Optional[bpy.types.ObjectModifiers],
export_settings
@@ -120,24 +138,21 @@ def __gather_name(blender_mesh: bpy.types.Mesh,
def __gather_primitives(blender_mesh: bpy.types.Mesh,
- library: Optional[str],
- blender_object: Optional[bpy.types.Object],
+ uuid_for_skined_data,
vertex_groups: Optional[bpy.types.VertexGroups],
modifiers: Optional[bpy.types.ObjectModifiers],
- material_names: Tuple[str],
+ materials: Tuple[bpy.types.Material],
export_settings
) -> List[gltf2_io.MeshPrimitive]:
return gltf2_blender_gather_primitives.gather_primitives(blender_mesh,
- library,
- blender_object,
+ uuid_for_skined_data,
vertex_groups,
modifiers,
- material_names,
+ materials,
export_settings)
def __gather_weights(blender_mesh: bpy.types.Mesh,
- library: Optional[str],
vertex_groups: Optional[bpy.types.VertexGroups],
modifiers: Optional[bpy.types.ObjectModifiers],
export_settings