[Bf-extensions-cvs] [b72a6c05] blender-v2.83-release: glTF export: fix typo in deformation bone only option
Julien Duroure
noreply at git.blender.org
Mon May 4 18:16:31 CEST 2020
Commit: b72a6c057999e51c03f103706b7cd5da79e9c4b2
Author: Julien Duroure
Date: Mon May 4 18:16:09 2020 +0200
Branches: blender-v2.83-release
https://developer.blender.org/rBAb72a6c057999e51c03f103706b7cd5da79e9c4b2
glTF export: fix typo in deformation bone only option
===================================================================
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_animation_channel_target.py
===================================================================
diff --git a/io_scene_gltf2/__init__.py b/io_scene_gltf2/__init__.py
index afa211ef..2e06ae92 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": (1, 2, 72),
+ "version": (1, 2, 73),
'blender': (2, 83, 9),
'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 ae79f883..e546b063 100755
--- a/io_scene_gltf2/blender/exp/gltf2_blender_extract.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_extract.py
@@ -1,702 +1,702 @@
-# Copyright 2018-2019 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.
-
-#
-# Imports
-#
-
-from mathutils import Vector, Quaternion, Matrix
-from mathutils.geometry import tessellate_polygon
-from operator import attrgetter
-
-from . import gltf2_blender_export_keys
-from ...io.com.gltf2_io_debug import print_console
-from ...io.com.gltf2_io_color_management import color_srgb_to_scene_linear
-from io_scene_gltf2.blender.exp import gltf2_blender_gather_skins
-import bpy
-
-#
-# Globals
-#
-
-INDICES_ID = 'indices'
-MATERIAL_ID = 'material'
-ATTRIBUTES_ID = 'attributes'
-
-COLOR_PREFIX = 'COLOR_'
-MORPH_TANGENT_PREFIX = 'MORPH_TANGENT_'
-MORPH_NORMAL_PREFIX = 'MORPH_NORMAL_'
-MORPH_POSITION_PREFIX = 'MORPH_POSITION_'
-TEXCOORD_PREFIX = 'TEXCOORD_'
-WEIGHTS_PREFIX = 'WEIGHTS_'
-JOINTS_PREFIX = 'JOINTS_'
-
-TANGENT_ATTRIBUTE = 'TANGENT'
-NORMAL_ATTRIBUTE = 'NORMAL'
-POSITION_ATTRIBUTE = 'POSITION'
-
-GLTF_MAX_COLORS = 2
-
-
-#
-# Classes
-#
-
-class ShapeKey:
- def __init__(self, shape_key, vertex_normals, polygon_normals):
- self.shape_key = shape_key
- self.vertex_normals = vertex_normals
- self.polygon_normals = polygon_normals
-
-
-#
-# Functions
-#
-
-def convert_swizzle_normal(loc, armature, blender_object, export_settings):
- """Convert a normal data from Blender coordinate system to glTF coordinate system."""
- if (not armature) or (not blender_object):
- # Classic case. Mesh is not skined, no need to apply armature transfoms on vertices / normals / tangents
- if export_settings[gltf2_blender_export_keys.YUP]:
- return Vector((loc[0], loc[2], -loc[1]))
- else:
- return Vector((loc[0], loc[1], loc[2]))
- else:
- # Mesh is skined, we have to apply armature transforms on data
- apply_matrix = (armature.matrix_world.inverted() @ blender_object.matrix_world).to_3x3().inverted()
- apply_matrix.transpose()
- new_loc = ((armature.matrix_world.to_3x3() @ apply_matrix).to_4x4() @ Matrix.Translation(Vector((loc[0], loc[1], loc[2])))).to_translation()
- new_loc.normalize()
-
- if export_settings[gltf2_blender_export_keys.YUP]:
- return Vector((new_loc[0], new_loc[2], -new_loc[1]))
- else:
- return Vector((new_loc[0], new_loc[1], new_loc[2]))
-
-def convert_swizzle_location(loc, armature, blender_object, export_settings):
- """Convert a location from Blender coordinate system to glTF coordinate system."""
- if (not armature) or (not blender_object):
- # Classic case. Mesh is not skined, no need to apply armature transfoms on vertices / normals / tangents
- if export_settings[gltf2_blender_export_keys.YUP]:
- return Vector((loc[0], loc[2], -loc[1]))
- else:
- return Vector((loc[0], loc[1], loc[2]))
- else:
- # Mesh is skined, we have to apply armature transforms on data
- apply_matrix = armature.matrix_world.inverted() @ blender_object.matrix_world
- new_loc = (armature.matrix_world @ apply_matrix @ Matrix.Translation(Vector((loc[0], loc[1], loc[2])))).to_translation()
-
- if export_settings[gltf2_blender_export_keys.YUP]:
- return Vector((new_loc[0], new_loc[2], -new_loc[1]))
- else:
- return Vector((new_loc[0], new_loc[1], new_loc[2]))
-
-
-def convert_swizzle_tangent(tan, armature, blender_object, export_settings):
- """Convert a tangent from Blender coordinate system to glTF coordinate system."""
- if tan[0] == 0.0 and tan[1] == 0.0 and tan[2] == 0.0:
- print_console('WARNING', 'Tangent has zero length.')
-
- if (not armature) or (not blender_object):
- # Classic case. Mesh is not skined, no need to apply armature transfoms on vertices / normals / tangents
- if export_settings[gltf2_blender_export_keys.YUP]:
- return Vector((tan[0], tan[2], -tan[1], 1.0))
- else:
- return Vector((tan[0], tan[1], tan[2], 1.0))
- else:
- # Mesh is skined, we have to apply armature transforms on data
- apply_matrix = armature.matrix_world.inverted() @ blender_object.matrix_world
- new_tan = apply_matrix.to_quaternion() @ tan
- if export_settings[gltf2_blender_export_keys.YUP]:
- return Vector((new_tan[0], new_tan[2], -new_tan[1], 1.0))
- else:
- return Vector((new_tan[0], new_tan[1], new_tan[2], 1.0))
-
-def convert_swizzle_rotation(rot, export_settings):
- """
- Convert a quaternion rotation from Blender coordinate system to glTF coordinate system.
-
- 'w' is still at first position.
- """
- if export_settings[gltf2_blender_export_keys.YUP]:
- return Quaternion((rot[0], rot[1], rot[3], -rot[2]))
- else:
- return Quaternion((rot[0], rot[1], rot[2], rot[3]))
-
-
-def convert_swizzle_scale(scale, export_settings):
- """Convert a scale from Blender coordinate system to glTF coordinate system."""
- if export_settings[gltf2_blender_export_keys.YUP]:
- return Vector((scale[0], scale[2], scale[1]))
- else:
- return Vector((scale[0], scale[1], scale[2]))
-
-
-def decompose_transition(matrix, export_settings):
- translation, rotation, scale = matrix.decompose()
-
- return translation, rotation, scale
-
-
-def extract_primitives(glTF, blender_mesh, library, blender_object, blender_vertex_groups, modifiers, export_settings):
- """
- Extract primitives from a mesh. Polygons are triangulated and sorted by material.
-
- Furthermore, primitives are split up, if the indices range is exceeded.
- Finally, triangles are also split up/duplicated, if face normals are used instead of vertex normals.
- """
- print_console('INFO', 'Extracting primitive: ' + blender_mesh.name)
-
- if blender_mesh.has_custom_normals:
- # Custom normals are all (0, 0, 0) until calling calc_normals_split() or calc_tangents().
- blender_mesh.calc_normals_split()
-
- use_tangents = False
- if blender_mesh.uv_layers.active and len(blender_mesh.uv_layers) > 0:
- try:
- blender_mesh.calc_tangents()
- use_tangents = True
- except Exception:
- print_console('WARNING', 'Could not calculate tangents. Please try to triangulate the mesh first.')
-
- #
-
- material_map = {}
-
- #
- # Gathering position, normal and tex_coords.
- #
- no_material_attributes = {
- POSITION_ATTRIBUTE: [],
- NORMAL_ATTRIBUTE: []
- }
-
- if use_tangents:
- no_material_attributes[TANGENT_ATTRIBUTE] = []
-
- #
- # Directory of materials with its primitive.
- #
- no_material_primitives = {
- MATERIAL_ID: 0,
- INDICES_ID: [],
- ATTRIBUTES_ID: no_material_attributes
- }
-
- material_idx_to_primitives = {0: no_material_primitives}
-
- #
-
- vertex_index_to_new_indices = {}
-
- material_map[0] = vertex_index_to_new_indices
-
- #
- # Create primitive for each material.
- #
- for (mat_idx, _) in enumerate(blender_mesh.materials):
- attributes = {
- POSITION_ATTRIBUTE: [],
- NORMAL_ATTRIBUTE: []
- }
-
- if use_tangents:
- attributes[TANGENT_ATTRIBUTE] = []
-
- primitive = {
- MATERIAL_ID: mat_idx,
- INDICES_ID: [],
- ATTRIBUTES_ID: attributes
- }
-
- material_idx_to_primitives[mat_idx] = primitive
-
- #
-
- vertex_index_to_new_indices = {}
-
- material_map[mat_idx] = vertex_index_to_new_indices
-
- tex_coord_max = 0
- if blender_mesh.uv_layers.active:
- tex_coord_max = len(blender_mesh.uv_layers)
-
- #
-
- vertex_colors = {}
-
- color_index = 0
- for vertex_color in blender_mesh.vertex_colors:
- vertex_color_name = COLOR_PREFIX + str(color_index)
- vertex_colors[vertex_color_name] = vertex_color
-
- color_index += 1
- if color_index >= GLTF_MAX_COLORS:
- break
- color_max = color_index
-
- #
-
- bone_max = 0
- for blender_polygon in blender_mesh.polygons:
- for loop_index in blender_polygon.loop_indices:
- vertex_index = blender_mesh.loops[loop_index].vertex_index
- bones_count = len(blender_mesh.vertices[vertex_index].groups)
- if bones_count > 0:
- if bones_count % 4 == 0:
- bones_count -= 1
- bone_max = max(bone_max, bones_count // 4 + 1)
-
- #
-
- morph_max = 0
-
- blender_shape_keys = []
-
- if blender_mesh.shape_keys is not None:
- for blender_shape_key in blender_mesh.shape_keys.key_blocks:
- if blender_shape_key != blender_shape_key.relative_key:
- if blender_shape_key.mute is False:
- morph_max += 1
- blender
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list