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>2020-03-28 17:43:28 +0300
committerJulien Duroure <julien.duroure@gmail.com>2020-03-28 17:43:28 +0300
commit2f43f0802f6edc04f92cf756eda46750fd3bdb61 (patch)
tree28d4dc62a406143c7783537611afbd72857972f4 /io_scene_gltf2
parentea2965438756165bc28b7d52e472b2c5984d64be (diff)
glTF importer: refactor vertex group/armature modifier creation
Diffstat (limited to 'io_scene_gltf2')
-rwxr-xr-xio_scene_gltf2/__init__.py2
-rwxr-xr-xio_scene_gltf2/blender/imp/gltf2_blender_node.py20
-rwxr-xr-xio_scene_gltf2/blender/imp/gltf2_blender_scene.py6
-rwxr-xr-xio_scene_gltf2/blender/imp/gltf2_blender_skin.py55
4 files changed, 21 insertions, 62 deletions
diff --git a/io_scene_gltf2/__init__.py b/io_scene_gltf2/__init__.py
index bd71223d..92d452c0 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, 56),
+ "version": (1, 2, 57),
'blender': (2, 82, 7),
'location': 'File > Import-Export',
'description': 'Import-Export as glTF 2.0',
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_node.py b/io_scene_gltf2/blender/imp/gltf2_blender_node.py
index 8c732949..f6759224 100755
--- a/io_scene_gltf2/blender/imp/gltf2_blender_node.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_node.py
@@ -207,6 +207,9 @@ class BlenderNode():
if pymesh.shapekey_names:
BlenderNode.set_morph_weights(gltf, pynode, obj)
+ if pynode.skin is not None:
+ BlenderNode.setup_skinning(gltf, pynode, obj)
+
return obj
@staticmethod
@@ -216,3 +219,20 @@ class BlenderNode():
for i, weight in enumerate(weights):
if pymesh.shapekey_names[i] is not None:
obj.data.shape_keys.key_blocks[pymesh.shapekey_names[i]].value = weight
+
+ @staticmethod
+ def setup_skinning(gltf, pynode, obj):
+ pyskin = gltf.data.skins[pynode.skin]
+
+ # Armature/bones should have already been created.
+
+ # Create vertex groups for each joint
+ for node_idx in pyskin.joints:
+ bone = gltf.vnodes[node_idx]
+ obj.vertex_groups.new(name=bone.blender_bone_name)
+
+ # Create an Armature modifier
+ first_bone = gltf.vnodes[pyskin.joints[0]]
+ arma = gltf.vnodes[first_bone.bone_arma]
+ mod = obj.modifiers.new(name="Armature", type="ARMATURE")
+ mod.object = arma.blender_object
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_scene.py b/io_scene_gltf2/blender/imp/gltf2_blender_scene.py
index 691ced91..109d6b28 100755
--- a/io_scene_gltf2/blender/imp/gltf2_blender_scene.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_scene.py
@@ -16,7 +16,6 @@ import bpy
from math import sqrt
from mathutils import Quaternion
from .gltf2_blender_node import BlenderNode
-from .gltf2_blender_skin import BlenderSkin
from .gltf2_blender_animation import BlenderAnimation
from .gltf2_blender_animation_utils import simulate_stash
from .gltf2_blender_vnode import VNode, compute_vnodes
@@ -42,11 +41,6 @@ class BlenderScene():
gltf.display_current_node = 0 # for debugging
BlenderNode.create_vnode(gltf, 'root')
- # Now that all mesh / bones are created, create vertex groups on mesh
- if gltf.data.skins:
- BlenderSkin.create_vertex_groups(gltf)
- BlenderSkin.create_armature_modifiers(gltf)
-
BlenderScene.create_animations(gltf)
if bpy.context.mode != 'OBJECT':
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_skin.py b/io_scene_gltf2/blender/imp/gltf2_blender_skin.py
deleted file mode 100755
index 043d8f26..00000000
--- a/io_scene_gltf2/blender/imp/gltf2_blender_skin.py
+++ /dev/null
@@ -1,55 +0,0 @@
-# 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.
-
-
-import bpy
-
-class BlenderSkin():
- """Blender Skinning / Armature."""
- def __new__(cls, *args, **kwargs):
- raise RuntimeError("%s should not be instantiated" % cls)
-
- @staticmethod
- def create_vertex_groups(gltf):
- """Create vertex groups for all skinned meshes."""
- for vnode in gltf.vnodes.values():
- if vnode.mesh_node_idx is None:
- continue
- pynode = gltf.data.nodes[vnode.mesh_node_idx]
- if pynode.skin is None:
- continue
- pyskin = gltf.data.skins[pynode.skin]
-
- obj = vnode.blender_object
- for node_idx in pyskin.joints:
- bone = gltf.vnodes[node_idx]
- obj.vertex_groups.new(name=bone.blender_bone_name)
-
- @staticmethod
- def create_armature_modifiers(gltf):
- """Create Armature modifiers for all skinned meshes."""
- for vnode in gltf.vnodes.values():
- if vnode.mesh_node_idx is None:
- continue
- pynode = gltf.data.nodes[vnode.mesh_node_idx]
- if pynode.skin is None:
- continue
- pyskin = gltf.data.skins[pynode.skin]
-
- first_bone = gltf.vnodes[pyskin.joints[0]]
- arma = gltf.vnodes[first_bone.bone_arma]
-
- obj = vnode.blender_object
- mod = obj.modifiers.new(name="Armature", type="ARMATURE")
- mod.object = arma.blender_object