本章では、MayaでPythonスクリプトを利用する方法について共有します。
はじめに
Mayaは、様々な3Dモデルやアニメーションを組める、3DCGソフトウェアです。
ソフトウェア単体でも制作は可能ですが、スクリプトを利用することで、高品質な制作や工数の圧縮ができます。
スクリプトとして、主に以下の2種類があります。
- MEL(Maya Embedded Language)
- Python
※MEL:Maya独自の言語
transform一括変更スクリプト
以下のスクリプトは、実行すると選択された複数のオブジェクトのtransform情報を一括で書き換えるスクリプトです。
スクリプトを実行すると、「Change Transform Explorer」ウィンドウが表示されるので、該当項目に数値を入力して「Run」を押下すると実行されます。
# -*- coding: utf-8 -*- import maya.cmds as mc win = mc.window(title = "Change Transform Explorer", wh = (310,300)) layout = mc.columnLayout(adjustableColumn = True) def moveObject(): mX = mc.textField('moveX', query=True, text=True) mY = mc.textField('moveY', query=True, text=True) mZ = mc.textField('moveZ', query=True, text=True) rX = mc.textField('rotateX', query=True, text=True) rY = mc.textField('rotateY', query=True, text=True) rZ = mc.textField('rotateZ', query=True, text=True) sX = mc.textField('scaleX', query=True, text=True) sY = mc.textField('scaleY', query=True, text=True) sZ = mc.textField('scaleZ', query=True, text=True) slist = mc.ls(selection=True) for object in slist: if mX: mc.setAttr(object + '.translateX', float(mX)) if mY: mc.setAttr(object + '.translateY', float(mY)) if mZ: mc.setAttr(object + '.translateZ', float(mZ)) if rX: mc.setAttr(object + '.rotateX', float(rX)) if rY: mc.setAttr(object + '.rotateY', float(rY)) if rZ: mc.setAttr(object + '.rotateZ', float(rZ)) if sX: mc.setAttr(object + '.scaleX', float(sX)) if sY: mc.setAttr(object + '.scaleY', float(sY)) if sZ: mc.setAttr(object + '.scaleZ', float(sZ)) mc.rowLayout(numberOfColumns = 2, columnWidth2 = (70,100)) mc.text(label = 'Move X') mc.textField('moveX') mc.setParent('..') mc.rowLayout(numberOfColumns = 2, columnWidth2 = (70,100)) mc.text(label = 'Move Y') mc.textField('moveY') mc.setParent('..') mc.rowLayout(numberOfColumns = 2, columnWidth2 = (70,100)) mc.text(label = 'Move Z') mc.textField('moveZ') mc.setParent('..') mc.rowLayout(numberOfColumns = 2, columnWidth2 = (70,100)) mc.text(label = 'Rotate X') mc.textField('rotateX') mc.setParent('..') mc.rowLayout(numberOfColumns = 2, columnWidth2 = (70,100)) mc.text(label = 'Rotate Y') mc.textField('rotateY') mc.setParent('..') mc.rowLayout(numberOfColumns = 2, columnWidth2 = (70,100)) mc.text(label = 'Rotate Z') mc.textField('rotateZ') mc.setParent('..') mc.rowLayout(numberOfColumns = 2, columnWidth2 = (70,100)) mc.text(label = 'Scale X') mc.textField('scaleX') mc.setParent('..') mc.rowLayout(numberOfColumns = 2, columnWidth2 = (70,100)) mc.text(label = 'Scale Y') mc.textField('scaleY') mc.setParent('..') mc.rowLayout(numberOfColumns = 2, columnWidth2 = (70,100)) mc.text(label = 'Scale Z') mc.textField('scaleZ') mc.setParent('..') mc.separator(height = 20, style = "in") mc.button(label = 'Run', command = 'moveObject()') mc.separator(height = 20, style = "in") mc.showWindow(win)