😃
INABAの表情筋を鍛えるためのPythonスクリプト
表情シェイプキーのコピー作業を自動化できないか調べたところ、
PythonでBlenderをマクロ操作できることが分かったので、書いてみました。
注意点と使用方法は以下の通りです。
注意点
以下の表情シェイプキーは、表情の内容が変更されます。
シェイプキー | 変更後の表情 |
---|---|
にやり | 口角上げ |
上 | デフォルト表情(Basis) |
下 | デフォルト表情(Basis) |
対応する表情がないシェイプキーについては、デフォルト表情(Basis)のシェイプキーをコピーしています。
シェイプキー |
---|
光下 |
口角広げ |
上 |
下 |
使用方法
FBXをインポート後、Shift+F11
でテキストエディタを開きます。
テキストエディタで「新規」ボタンを押下し、以下のコードを貼り付けます。
import bpy
COPY_SHAPE_KEYS = [
["まばたき" , ["blink" , 1.0 ]],
["ウィンク" , ["笑いL" , 1.0 ]],
["ウィンク右" , ["笑いR" , 1.0 ]],
["ウィンク2" , ["ウィンクL" , 1.0 ]],
["ウィンク2右" , ["ウィンクR" , 1.0 ]],
["はぅ" , ["はう目" , 1.0 ]],
["じと目" , ["ジト目" , 1.0 ]],
["キリッ" , ["怒" , 1.0 ]],
["星目" , ["シイタケ" , 1.0 ]],
["はぁと" , ["ハート目" , 1.0 ]],
["瞳小" , ["目小" , 0.47]],
["瞳大" , ["目大" , 0.3 ]],
["光下" , ["Basis" ,1.0 ]],
["ハイライト消し", ["ハイライトオフ1", 1.0 ],
["ハイライトオフ2", 1.0 ],
["瞳孔無し" , 1.0 ],
["絶望" , 1.0 ]],
["ω□" , ["ω" , 1.0 ]],
["∧" , ["^" , 1.0 ]],
["▲" , ["sankaku" , 1.0 ]],
["はんっ!" , ["ワ" , 1.0 ],
["口角上げL" , 1.0 ]],
["にやり" , ["口角上げ" , 1.0 ]],
["にっこり" , ["口角上げ" , 1.0 ]],
["ぺろっ" , ["舌1" , 1.0 ]],
["てへぺろ" , ["舌3" , 1.0 ]],
["口横広げ" , ["Basis" , 1.0 ]],
["困る" , ["困り" , 1.0 ]],
["にこり" , ["喜び" , 1.0 ]],
["上" , ["Basis" , 1.0 ]],
["下" , ["Basis" , 1.0 ]],
["頬染め" , ["照れ" , 1.0 ]],
["涙" , ["涙1" , 1.0 ]]
]
obj = bpy.data.objects.get("Body")
bpy.context.view_layer.objects.active = obj
def createShapeKey(name):
bpy.ops.object.mode_set(mode="OBJECT")
shape_keys = obj.data.shape_keys.key_blocks.keys()
if name in shape_keys:
obj.active_shape_key_index = shape_keys.index(name)
bpy.ops.object.shape_key_remove(all=False)
bpy.ops.object.shape_key_add(from_mix=False)
obj.active_shape_key.name = name
def copyShapeKey(cp0, cp1, blend):
shape_keys = obj.data.shape_keys.key_blocks.keys()
obj.active_shape_key_index = shape_keys.index(cp0)
bpy.ops.object.mode_set(mode="EDIT")
bpy.ops.mesh.select_all(action="SELECT")
bpy.ops.mesh.blend_from_shape(shape=cp1, blend=blend, add=True)
createShapeKey(name="===MMD===")
for copy_keys in COPY_SHAPE_KEYS:
createShapeKey(name=copy_keys[0])
for keys in copy_keys[1:]:
copyShapeKey(cp0=copy_keys[0], cp1=keys[0], blend=keys[1])
bpy.ops.object.mode_set(mode="OBJECT")
▶ (スクリプト実行)ボタンを押下します。
情報のウィンドウを開いて、bpy.ops.text.run_script()
が出力されていれば成功です。
確認
Shift+F5
で3Dビューポートを開いて、Bodyを選択します。
COPY_SHAPE_KEYS
の表情シェイプキーが追加されています。
クレジット・参考リンク
Discussion