2012年8月13日月曜日

MAXScript キーフレームの操作 movekeys

movekeysという関数があり、これを覚えておくと何かと便利なので紹介します。

 書式は
movekeys <オブジェクト名(ノード名)> <動かしたいキーフレーム数 >

です。これを実行すると、指定したオブジェクトの全てのキーフレームを指定した数だけ動かします。例えば、選択しているオブジェクト(複数可) のキーフレームを10フレーム動かしたいときは

movekeys $ 10

と実行します。名前で指定したいときはオブジェクトの名前の頭に$を付けて

movekeys $Box001 10

というような書き方をします。頭にBoxと名前が付くオブジェクト全部に実行したいときは*を使って

movekeys $Box* 10

というような書き方になります。

選択しているオブジェクトのキーフレームをランダムで±10frバラケさせたい時は

x = 10
for o in selection do
(
    movekeys o (random -x x)
)

という感じになります。

このmovekeysの動かす値を色々工夫すると面白い動きを付けれるので紹介します。どうせなので色々スクリプトでやってみます。細かい説明はスクリプトリファレンス等を参照して下さい。
 -------------------------------
1.ユタティーポットを沢山作るスクリプト

NewObj = teapot()
NewObj.radius = 5  --

num = 5

for x = 0 to num do
(
    for y = 0 to num do
    (
        for z= 0 to num do
        (
            obj = instance NewObj
            obj.pos = [ x * 10 , y * 10 , z * 10]
        )
    )
)

delete NewObj

scriptの実行結果。沢山のティーポットが出来上る


2.出来上ったティーポットにアニメーションを付けるスクリプト

undo "Animation" on
(
    animate on
    (
        at time 30
        (
            for obj in $Teapot* do
            (
                obj.pos = random [75,0,0] [125,50,50]
            )
        )
    )
)

random [75,0,0] [125,50,50](グレーのボックスの空間に移動するアニメーションが付けられる)
※アニメーションは手動でも可能です。アニメートボタンをオンにしてスライダーを30frに動かし、その場合は以下のスクリプトを実行します。

 for obj in $Teapot* do
(
                obj.pos = random [75,0,0] [125,50,50]
)

を実行するだけでも同じ効果を得れます。アニメートボタンをオンにしない場合は、ボックスの空間にティーポットをランダムに配置するだけになります。


3.ポイントヘルパーを作成して距離に応じてキーフレームを動かす値を変える

制御用のポイントヘルパーを1つ作成し以下のスクリプトを実行します。
-----
PivotObj = $Point001  --作成したポイントヘルパーの名前を入力
AnimSpeed = 2         --アニメーションの早さ

undo "movekeys" on
(
    for obj in $Teapot* do
    (
        x = (distance PivotObj.pos obj.pos) / AnimSpeed
        movekeys obj x
    )
)
-----
ポイントヘルパーに近い所から動き出す
こんな感じにmovekeysが使えます。
maxscriptには distanceという関数があり、distance [0,0,0]  [100,100,100] というように2点の3D座標を入力する事で2点間の距離を返します。難しい三角関数を使わなくていいので便利です。

距離に基づいてmovekeysの値を変えているので例えば衝撃波によってキャラクターを中心に地面が割れたりとかにも使えたり色々応用が効きます。タイトルなどで文字全てに一度、同じアニメーションを付けて1つずつちょっとずつアニメーションをずらしたりとか・・・。

ちなみに3の式の

x = (distance PivotObj.pos obj.pos) / AnimSpeed 

の部分を

x = 50- (distance PivotObj.pos obj.pos) / AnimSpeed

のようにすると遠い所から動き出すように変わります。 この部分を色んな条件を付ける事で色んなキーフレームのずらし方が出来るので色々やってみると面白いです。

今回はキーフレームがポジションだけだったのですが、回転、スケール、モデファイヤ、マテリアル。全てのキーフレームをまとめて動かす命令なので、色々出来て面白いです。
ただし、マテリアルなど複数に同じマテリアルを使っている場合やインスタンス系は注意が必要です。

また、よく似た関数にmovekeyというのがあります。こちらはキーフレームを1つずつ指定して制御する関数なので別物です。また、これら関数をbipedなどの特殊なオブジェクトに実行するとエラーを出すときがあるようです。うろ覚えですがbipedに使う場合は専用の関数があったように記憶しています。

0 件のコメント:

コメントを投稿