Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

こんにちは
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様単独でのセミナーも開催されるということなので、そちらも是非参加したいと思います。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away