[Bf-extensions-cvs] [42493a36] master: glTF exporter: Manage material at object level: instances with different colors
Julien Duroure
noreply at git.blender.org
Thu Jun 6 21:26:05 CEST 2019
Commit: 42493a36ed9b712e46965a30480f59af65a64b83
Author: Julien Duroure
Date: Thu Jun 6 21:25:29 2019 +0200
Branches: master
https://developer.blender.org/rBA42493a36ed9b712e46965a30480f59af65a64b83
glTF exporter: Manage material at object level: instances with different colors
===================================================================
M io_scene_gltf2/__init__.py
M io_scene_gltf2/blender/exp/gltf2_blender_extract.py
M io_scene_gltf2/blender/exp/gltf2_blender_gather_mesh.py
M io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py
M io_scene_gltf2/blender/exp/gltf2_blender_gather_primitives.py
===================================================================
diff --git a/io_scene_gltf2/__init__.py b/io_scene_gltf2/__init__.py
index ba8b750e..ce044ab1 100755
--- a/io_scene_gltf2/__init__.py
+++ b/io_scene_gltf2/__init__.py
@@ -15,7 +15,7 @@
bl_info = {
'name': 'glTF 2.0 format',
'author': 'Julien Duroure, Norbert Nopper, Urs Hanselmann, Moritz Becher, Benjamin Schmithüsen, Jim Eckerlein, and many external contributors',
- "version": (0, 9, 23),
+ "version": (0, 9, 24),
'blender': (2, 80, 0),
'location': 'File > Import-Export',
'description': 'Import-Export as glTF 2.0',
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_extract.py b/io_scene_gltf2/blender/exp/gltf2_blender_extract.py
index 4c6d2555..b48b76ea 100755
--- a/io_scene_gltf2/blender/exp/gltf2_blender_extract.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_extract.py
@@ -423,26 +423,23 @@ def extract_primitives(glTF, blender_mesh, blender_vertex_groups, modifiers, exp
# Directory of materials with its primitive.
#
no_material_primitives = {
- MATERIAL_ID: '',
+ MATERIAL_ID: 0,
INDICES_ID: [],
ATTRIBUTES_ID: no_material_attributes
}
- material_name_to_primitives = {'': no_material_primitives}
+ material_idx_to_primitives = {0: no_material_primitives}
#
vertex_index_to_new_indices = {}
- material_map[''] = vertex_index_to_new_indices
+ material_map[0] = vertex_index_to_new_indices
#
# Create primitive for each material.
#
- for blender_material in blender_mesh.materials:
- if blender_material is None:
- continue
-
+ for (mat_idx, _) in enumerate(blender_mesh.materials):
attributes = {
POSITION_ATTRIBUTE: [],
NORMAL_ATTRIBUTE: []
@@ -452,18 +449,18 @@ def extract_primitives(glTF, blender_mesh, blender_vertex_groups, modifiers, exp
attributes[TANGENT_ATTRIBUTE] = []
primitive = {
- MATERIAL_ID: blender_material.name,
+ MATERIAL_ID: mat_idx,
INDICES_ID: [],
ATTRIBUTES_ID: attributes
}
- material_name_to_primitives[blender_material.name] = primitive
+ material_idx_to_primitives[mat_idx] = primitive
#
vertex_index_to_new_indices = {}
- material_map[blender_material.name] = vertex_index_to_new_indices
+ material_map[mat_idx] = vertex_index_to_new_indices
tex_coord_max = 0
if blender_mesh.uv_layers.active:
@@ -519,13 +516,12 @@ def extract_primitives(glTF, blender_mesh, blender_vertex_groups, modifiers, exp
#
- if blender_polygon.material_index < 0 or blender_polygon.material_index >= len(blender_mesh.materials) or \
- blender_mesh.materials[blender_polygon.material_index] is None:
- primitive = material_name_to_primitives['']
- vertex_index_to_new_indices = material_map['']
+ if not blender_polygon.material_index in material_idx_to_primitives:
+ primitive = material_idx_to_primitives[0]
+ vertex_index_to_new_indices = material_map[0]
else:
- primitive = material_name_to_primitives[blender_mesh.materials[blender_polygon.material_index].name]
- vertex_index_to_new_indices = material_map[blender_mesh.materials[blender_polygon.material_index].name]
+ primitive = material_idx_to_primitives[blender_polygon.material_index]
+ vertex_index_to_new_indices = material_map[blender_polygon.material_index]
#
attributes = primitive[ATTRIBUTES_ID]
@@ -920,7 +916,7 @@ def extract_primitives(glTF, blender_mesh, blender_vertex_groups, modifiers, exp
result_primitives = []
- for material_name, primitive in material_name_to_primitives.items():
+ for material_idx, primitive in material_idx_to_primitives.items():
export_color = True
#
@@ -993,7 +989,7 @@ def extract_primitives(glTF, blender_mesh, blender_vertex_groups, modifiers, exp
pending_attributes[TANGENT_ATTRIBUTE] = []
pending_primitive = {
- MATERIAL_ID: material_name,
+ MATERIAL_ID: material_idx,
INDICES_ID: [],
ATTRIBUTES_ID: pending_attributes
}
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 7e24319f..c2202b9e 100755
--- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_mesh.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_mesh.py
@@ -13,7 +13,7 @@
# limitations under the License.
import bpy
-from typing import Optional, Dict, List, Any
+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.io.com import gltf2_io
@@ -23,21 +23,22 @@ from io_scene_gltf2.io.com.gltf2_io_debug import print_console
@cached
-def gather_mesh(blender_mesh: bpy.types.Mesh,
+def gather_mesh(blender_mesh_name: str,
vertex_groups: Optional[bpy.types.VertexGroups],
modifiers: Optional[bpy.types.ObjectModifiers],
skip_filter: bool,
+ material_names: Tuple[str],
export_settings
) -> Optional[gltf2_io.Mesh]:
- if not skip_filter and not __filter_mesh(blender_mesh, vertex_groups, modifiers, export_settings):
+ if not skip_filter and not __filter_mesh(blender_mesh_name, vertex_groups, modifiers, export_settings):
return None
mesh = gltf2_io.Mesh(
- 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),
- primitives=__gather_primitives(blender_mesh, vertex_groups, modifiers, export_settings),
- weights=__gather_weights(blender_mesh, vertex_groups, modifiers, export_settings)
+ extensions=__gather_extensions(blender_mesh_name, vertex_groups, modifiers, export_settings),
+ extras=__gather_extras(blender_mesh_name, vertex_groups, modifiers, export_settings),
+ name=__gather_name(blender_mesh_name, vertex_groups, modifiers, export_settings),
+ primitives=__gather_primitives(blender_mesh_name, vertex_groups, modifiers, material_names, export_settings),
+ weights=__gather_weights(blender_mesh_name, vertex_groups, modifiers, export_settings)
)
if len(mesh.primitives) == 0:
@@ -46,17 +47,18 @@ def gather_mesh(blender_mesh: bpy.types.Mesh,
return mesh
-def __filter_mesh(blender_mesh: bpy.types.Mesh,
+def __filter_mesh(blender_mesh_name: str,
vertex_groups: Optional[bpy.types.VertexGroups],
modifiers: Optional[bpy.types.ObjectModifiers],
export_settings
) -> bool:
+ blender_mesh = bpy.data.meshes[blender_mesh_name]
if blender_mesh.users == 0:
return False
return True
-def __gather_extensions(blender_mesh: bpy.types.Mesh,
+def __gather_extensions(blender_mesh_name: str,
vertex_groups: Optional[bpy.types.VertexGroups],
modifiers: Optional[bpy.types.ObjectModifiers],
export_settings
@@ -64,11 +66,12 @@ def __gather_extensions(blender_mesh: bpy.types.Mesh,
return None
-def __gather_extras(blender_mesh: bpy.types.Mesh,
+def __gather_extras(blender_mesh_name: str,
vertex_groups: Optional[bpy.types.VertexGroups],
modifiers: Optional[bpy.types.ObjectModifiers],
export_settings
) -> Optional[Dict[Any, Any]]:
+ blender_mesh = bpy.data.meshes[blender_mesh_name]
extras = {}
if export_settings['gltf_extras']:
@@ -89,28 +92,33 @@ def __gather_extras(blender_mesh: bpy.types.Mesh,
return None
-def __gather_name(blender_mesh: bpy.types.Mesh,
+def __gather_name(blender_mesh_name: str,
vertex_groups: Optional[bpy.types.VertexGroups],
modifiers: Optional[bpy.types.ObjectModifiers],
export_settings
) -> str:
- return blender_mesh.name
+ return blender_mesh_name
-def __gather_primitives(blender_mesh: bpy.types.Mesh,
+def __gather_primitives(blender_mesh_name: str,
vertex_groups: Optional[bpy.types.VertexGroups],
modifiers: Optional[bpy.types.ObjectModifiers],
+ material_names: Tuple[str],
export_settings
) -> List[gltf2_io.MeshPrimitive]:
- return gltf2_blender_gather_primitives.gather_primitives(blender_mesh, vertex_groups, modifiers, export_settings)
+ return gltf2_blender_gather_primitives.gather_primitives(blender_mesh_name,
+ vertex_groups,
+ modifiers,
+ material_names,
+ export_settings)
-def __gather_weights(blender_mesh: bpy.types.Mesh,
+def __gather_weights(blender_mesh_name: str,
vertex_groups: Optional[bpy.types.VertexGroups],
modifiers: Optional[bpy.types.ObjectModifiers],
export_settings
) -> Optional[List[float]]:
-
+ blender_mesh = bpy.data.meshes[blender_mesh_name]
if not export_settings[MORPH] or not blender_mesh.shape_keys:
return None
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 4af4f043..ba303c42 100755
--- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py
@@ -241,7 +241,13 @@ def __gather_mesh(blender_object, export_settings):
blender_mesh = blender_object.data
s
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list