ON-BLOG

CGのこと、あれこれ書いてます。

【覚書】maya python入門 其の五

間はさみましたが、続けてキーのコピー、ペーストの方を見て行きたいと思います。
全体的にアニメーターよりの内容になっていきますが、概念は同じなのでご了承下さい。

まずはコードから。

import maya.cmds as cmds

oCube = cmds.polyCube(n='Cube_KeyEdit')
oTime = cmds.currentTime(q=True)
oCurrent = float(oTime)
print oCurrent

cmds.setKeyframe( oCube[0], t=0 ,v=5, at='translateZ')
cmds.setKeyframe( oCube[0], t=10 ,v=-5, at='translateZ')
cmds.setKeyframe( oCube[0], t=20 ,v=5, at='translateZ')
cmds.setKeyframe( oCube[0], t=30 ,v=-5, at='translateZ')
cmds.setKeyframe( oCube[0], t=40 ,v=5, at='translateZ')

f:id:tommy_on:20150630151234p:plain

内容は簡単で立方体を作成して、キーを打ってるだけです。
上部の変数は後ほど使う物ですね。
これを元に、キーのコピーだったりペーストをやってみたいと思います。
内容的には再度上記の状態を作成して、それに対して
キーをコピーカレントフレームにペーストし、サイクル処理を行う。
というところまでやってみたいと思います。

コード

import maya.cmds as cmds

oCube = cmds.polyCube(n='Cube_KeyEdit')
oTime = cmds.currentTime(q=True)
oCurrent = float(oTime)
print oCurrent

cmds.setKeyframe( oCube[0], t=0 ,v=5, at='translateZ')
cmds.setKeyframe( oCube[0], t=10 ,v=-5, at='translateZ')
cmds.setKeyframe( oCube[0], t=20 ,v=5, at='translateZ')
cmds.setKeyframe( oCube[0], t=30 ,v=-5, at='translateZ')
cmds.setKeyframe( oCube[0], t=40 ,v=5, at='translateZ')

cmds.selectKey( oCube[0], attribute='translateZ' )
cmds.copyKey(oCube[0])
cmds.pasteKey(oCube[0],time=(oCurrent,oCurrent),attribute='translateZ')
cmds.setInfinity( pri='cycle',poi="cycle")

f:id:tommy_on:20150630151304p:plain

こんな感じです。
特に難しい処理は行なっておりませんが、SIと違って
Fカーブエディタ(グラフエディタ)の扱いが超絶楽ですね。

さすがにこれだけだと寂しいので、一個簡単なスクリプトを。
SIでよく使っていた、カーブのタンジェントを頭のキーと、お尻のキーを合わせるものです。
今回は難しい事はしたくないので、単純にお尻のキータンジェント
頭のキータンジェントにコピーしたいと思います。
ではコード

import maya.cmds as cmds
cmds.select()
oSel = cmds.ls(sl=True)
oKeys = cmds.keyTangent(oSel,q=True,outAngle=True)
oTan = oKeys[-1]
oTime = cmds.keyTangent(oSel,e=True,index=(0,0),inAngle=oTan)

f:id:tommy_on:20150630151328p:plain

こんな感じです。
ゲームアニメーションとか作ってると、これを多用します。
アウトアングルを配列でGETして、その最後の要素をoTan = oKeys[-1]の「[-1]」で取得。
それを、「cmds.keyTangent(oSel,e=True,index=(0,0),inAngle=oTan)」で頭のキー(index=(0,0))で
キーを指定して、タンジェントにペーストしてます。
これをベースに処理軽減だったり、複数化を仕込むと仕事で使えそうですね。


と今回この辺りで…。

次回はエクスプレッションかランダムについて進めていきたいと思います。


以上。