ゲーム作りが大好きな人のブログ

ゲームを作るのが大好きな人のブログ。UE4とBlender、MAYA(LT)、3DCoatを使用しています!

【Blender】【Python】リグ用雛形アーマチュアを簡単に作るスクリプト

Blenderのバージョンは2.81aで検証しています
f:id:toofu0:20200201122838p:plain
Blenderでリグ制作をしていた時に手動ですべて設定するのが手間だったのである程度スクリプト化しました。
ただ、あくまで「ある程度」「ゲーム用」ですのでご注意を。

何ができる?

選択したボーンと同じ座標にボーンを作成する。
生成したボーンは以下の事を自動で設定します。

  • ボーンの階層はTOP(誰かの子にしない)
  • ボーンの変形をOFFにする
  • ボーンの向きを真下にする
  • ボーンレイヤーを1番に設定する
  • ボーン名に「ctrl_」を先頭につける(prefix)
  • ボーングループを「Rig」に設定する
    • ※あらかじめRigというボーングループは作ってください

やり方

  1. 編集モードに移行
  2. リグをつけたいボーンを選択(複数可)
  3. スクリプトを実行

コード

不要な機能や番号、グループ名称を変更したい場合は
手動で直してください。

import bpy

# variable
boneLayer = 1

bpy.ops.object.mode_set(mode='EDIT', toggle=False)

# duplicate
bpy.ops.armature.duplicate()    
bpy.ops.armature.parent_clear(type='CLEAR')


for armature in bpy.data.armatures:
    for bone in armature.edit_bones:
        if bone.select_head:
            bone.tail[0] = bone.head[0]
            bone.tail[1] = bone.head[1]
            bone.tail[2] = bone.head[2] - 10
            bone.use_deform = False
            bone.name = "ctrl_" + bone.name.split(".")[0]
            
            bone.layers[boneLayer] = True
            for index,layer in enumerate(bone.layers):
                if index != boneLayer:
                    bone.layers[index] = False
            

bpy.ops.object.mode_set(mode='POSE', toggle=False)

for bone in bpy.context.selected_pose_bones:
    bone.bone_group = bpy.context.active_object.pose.bone_groups["Rig"]
    
bpy.context.object.data.layers[boneLayer] = True