LoginSignup
5
4

More than 5 years have passed since last update.

【クリカン2017ネタ】リギングヘルプミー:リグの作法②と③の一部を自動化

Last updated at Posted at 2017-12-04

こんにちは
MayaPython Advent Calender 2017の5日目の記事です。

今回の記事ではクリエイティブカンファレンス2017のセッションのひとつ、リギング ヘルプ ミー 「リガー集まれ~!」「アセットの共有を円滑にするリグの作法」という発表資料を元に、作法の一部を自動化してみました。

作法② 骨のラベリング

スクリーンショット 2017-12-05 4.08.35.png
まずは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')

作法③ 初期ポーズの登録

スクリーンショット 2017-12-05 4.09.06.png
次は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様単独でのセミナーも開催されるということなので、そちらも是非参加したいと思います。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4