diff options
Diffstat (limited to 'io_scene_gltf2/blender/imp/gltf2_blender_node.py')
-rwxr-xr-x | io_scene_gltf2/blender/imp/gltf2_blender_node.py | 20 |
1 files changed, 20 insertions, 0 deletions
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 |