こんにちは
MayaPython Advent Calender 2017の5日目の記事です。
今回の記事ではクリエイティブカンファレンス2017のセッションのひとつ、リギング ヘルプ ミー 「リガー集まれ~!」の「アセットの共有を円滑にするリグの作法」という発表資料を元に、作法の一部を自動化してみました。
##作法② 骨のラベリング
まずは29スライド目「作法② 骨のラベリング」です
選択したジョイントに対して動作します。
※以下のコードでは対称なジョイント名にLeft/Rightという文字列が含まれている場合にのみ対応しています。
# -*- coding: utf-8 -*-
import maya.cmds as mc
selected = mc.ls(sl=True, type='joint')
for i in selected:
label_name = None
side_type = 0
if 'Left' in i:
label_name = i.replace('Left', '')
side_type = 1
elif 'Right' in i:
label_name = i.replace('Right', '')
side_type = 2
else:
label_name = i
side_type = 0
mc.setAttr(i + '.side', side_type)
mc.setAttr(i + '.type', 18)
mc.setAttr(i + '.otherType', label_name, type='string')
作法③ 初期ポーズの登録
次は33スライド目「作法③ 初期ポーズの登録」です。 スクリプトを走らせた時点の値を`init_~~`に登録します。# -*- coding: utf-8 -*-
import maya.cmds as mc
selected = mc.ls(sl=True, type='transform')
for i in selected:
tx = mc.getAttr(i + '.translateX')
ty = mc.getAttr(i + '.translateY')
tz = mc.getAttr(i + '.translateZ')
rx = mc.getAttr(i + '.rotateX')
ry = mc.getAttr(i + '.rotateY')
rz = mc.getAttr(i + '.rotateZ')
mc.addAttr(i, ln='init_translateX', at='float', dv=tx)
mc.setAttr(i + '.init_translateX', e=True, keyable=False, lock=True)
mc.addAttr(i, ln='init_translateY', at='float', dv=ty)
mc.setAttr(i + '.init_translateY', e=True, keyable=False, lock=True)
mc.addAttr(i, ln='init_translateZ', at='float', dv=tz)
mc.setAttr(i + '.init_translateZ', e=True, keyable=False, lock=True)
mc.addAttr(i, ln='init_rotateX', at='float', dv=rx)
mc.setAttr(i + '.init_rotateX', e=True, keyable=False, lock=True)
mc.addAttr(i, ln='init_rotateY', at='float', dv=ry)
mc.setAttr(i + '.init_rotateY', e=True, keyable=False, lock=True)
mc.addAttr(i, ln='init_rotateZ', at='float', dv=rz)
mc.setAttr(i + '.init_rotateZ', e=True, keyable=False, lock=True)
##まとめ
私は冒頭で紹介したセッションに参加し、そこで初めて骨のラベリングや初期ポーズという作法を知りました。ラベリングも初期ポーズも普段は全く意識していなかった箇所なので非常にタメになりました。
また、BACKBONE様単独でのセミナーも開催されるということなので、そちらも是非参加したいと思います。