リファレンス / 3ds Max / MaxScript チートシート

アニメーション

  • 3dsMax
  • MaxScript
  • チートシート
MaxScript チートシート の章一覧

アニメーションの操作です。キーを打つには、UI の[オート キー]をオンにするのと同じ働きをする animate on ( ... ) の中でプロパティを変える のが基本です(with animate on とも書けます)。キーやコントローラへは .controller 経由でアクセスします。

キーを打つ(animate on)

animate on
(
    at time 0   $.pos = [0,0,0]
    at time 30  $.pos = [100,0,0]
    at time 60  $.pos = [100,100,0]
)
  • animate on の 中だけ プロパティ変更がキーになります。外で変えても現在値が変わるだけです。
  • 整数はフレーム数として扱われます。30f は時間値のリテラルです。
  • at time を付けずに animate on の中で値を変えると、今のタイム スライダの時間 に打たれます。
  • キーの無いトラックに 0 以外の時間で最初のキーを打つと、フレーム 0 にも元の値のキーが自動で作られます(preferences.autoKeyDefaultKeyOn)。
  • animate on なしで at time だけを使って値を変えると、キーのあるトラックでは 全キーがまとめてずれます。

時間(タイムスライダ)を操作する

sliderTime = 30                 -- タイムスライダを30フレームへ
sliderTime                      -- 現在フレームを読む(30f のような時間値)
animationRange = interval 0 100 -- アニメーション範囲を 0〜100 に
animationRange.end              -- 終了フレーム
frameRate                       -- フレームレート(fps)

ある時間の値を読む

at time 30 $.pos    -- 30フレームの位置を読む(キーは打たれない)
  • 読むだけなら animate on は不要です。

コントローラにアクセスする

$.pos.controller            -- 位置コントローラ
$.rotation.controller       -- 回転コントローラ
$.pos.x_position.controller -- X座標のコントローラ(リーフ)
$.rotation.controller = TCB_rotation()  -- 回転を TCB 補間にする(既存のキーは消える)
  • 既定では位置が Position_XYZ、回転が Euler_XYZ で、その下に X/Y/Z ごとの Bezier_Float があります。この末端をリーフ(葉)コントローラと呼びます。classOf $.pos.controller で確かめられます。
  • コントローラを差し替えると既存のキーは消えます。
  • ⚠️ アニメート可能なプロパティには .controller でアクセスします。$.pos だけでは現在値しか取れません。

キーを読む / 追加する / 消す

ctrl = $.pos.x_position.controller
ctrl.keys                       -- キー配列
ctrl.keys.count                 -- キー数
ctrl.keys[1].time               -- キー1の時間
ctrl.keys[1].value              -- キー1の値

addNewKey ctrl 45               -- 45フレームにキー追加(値はその時間の補間値。戻り値がキー。既にキーがあれば追加しない)
deleteKey ctrl 1                -- 1番目のキーを削除(1始まり。以降の番号は詰まる)
deleteKeys ctrl #allKeys        -- 全キー削除
  • キーは リーフコントローラ(pos.x_position など末端)に並びます。Position_XYZ のような親(複合)コントローラは自分ではキーを持たず、X/Y/Z のサブコントローラがキーを持ちます。キーを読むときは末端の x_position.controller を指してください。
  • deleteKeys $ #allKeys でノードの全トラックのキーをまとめて消せます。

接線タイプ(補間)を変える

ctrl = $.pos.x_position.controller
ctrl.keys[1].inTangentType  = #linear   -- #smooth #linear #step #fast #slow #custom #auto
ctrl.keys[1].outTangentType = #linear

-- 全キーをリニアに
for k in ctrl.keys do (k.inTangentType = #linear; k.outTangentType = #linear)
  • inTangentType / outTangentType は既定の Bezier_Float など、ベジェ系コントローラのキーで使えます。TCB のキーはテンション/連続性/バイアスで、このプロパティはありません。

よく使う形

-- 選択全体に同じ往復アニメをつける
animate on for o in selection do
(
    at time 0  o.pos.z = 0
    at time 25 o.pos.z = 50
    at time 50 o.pos.z = 0
)

落とし穴まとめ

  • キーは animate on の中で値を変えたときだけ打たれる。at time なしだと今のタイム スライダの時間に打たれる。
  • at time の値はフレーム。f サフィックスでも書ける。
  • アニメート可能プロパティへは .controller 経由。$.pos だけだと現在値のみ。
  • キーは末端(リーフ)コントローラに並ぶ。$.pos.x_position.controller.keys。

関連

← MaxScript チートシート へ