MRが楽しい

MRやVRについて学習したことを書き残す

Blenderで利用可能なpythonスクリプトを作る その12(ボーンの操作、ポーズの適用)

本日は Blender の技術調査枠です。
Blenderで利用可能なpythonスクリプトを作ります。
bluebirdofoz.hatenablog.com

特定の名前のボーン名を変更する

全アーマチュアオブジェクトのボーン情報を取得します。
ボーンの名称を確認して特定の名称のボーンのみ名前を変更します。

・change_bone.py

# bpyインポート
import bpy

# 全ボーンデータの名前変更
# 1.アーマチュアオブジェクトを選択する
# 2.全ボーンデータを取得して名前を変更する
# 引数
# 戻り値
def change_bone_name():
   # シーン中の全てのオブジェクトを走査する
   for ob in bpy.context.scene.objects:
     # オブジェクトがアーマチュアなら名前変更の対象とする
     if ob.type == 'ARMATURE':
       # アーマチュア内のボーンを走査する
       for bone in ob.data.bones:
         # ボーンの名前を取得
         bonename = bone.name
         # 名前が"Character1_"で始まっていなければ変更対象
         if bonename.find('Character1_') == -1:
           # ボーンの名前を変更する
           bone.name = '_' + bonename
           print(bone.name)

   return

# 関数の実行例
change_bone_name()

f:id:bluebirdofoz:20190530081547j:plain

[デフォルトのポーズに適用]を実行する

全アーマチュアオブジェクトに[デフォルトのポーズに適用]を実行する
ポーズを適用後、全てのボーンを選択状態にします。

・apply_armature.py

# bpyインポート
import bpy

# デフォルトポーズの適用
# 1.アーマチュアオブジェクトを選択する
# 2.[ポーズモード]で[デフォルトのポーズに適用]を実行する
# 引数
# 戻り値
def apply_armature_all():
   # シーン中の全てのオブジェクトを走査する
   for ob in bpy.context.scene.objects:
     # オブジェクトがアーマチュアならデフォルトポーズの適用の対象とする
     if ob.type == 'ARMATURE':
       # オブジェクトをアクティブにする
       bpy.context.scene.objects.active = ob
       # ポーズモードに移行する
       bpy.ops.object.mode_set(mode='POSE')
       # [デフォルトのポーズに適用]を実行
       bpy.ops.pose.armature_apply()
       # 反映済みが分かるようにボーンを選択状態に変更
       # アーマチュア内のボーンを走査する
       for bone in ob.data.bones:
         # 全てのボーンを選択状態にする
         bone.select = True

   return

# 関数の実行例
apply_armature_all()

f:id:bluebirdofoz:20190530081559j:plain