立方体が転がるアニメーション4(XPressoの利用:立方体が転がる動き)

2023-08-02XPresso, アニメーション

Orestis Konstantinidis Youtube チャンネルより

キーフレームを削除し、立方体を初期状態に戻す 5:20~

前の投稿と同じ方法でキーフレームをすべて削除する。

  • ドープシートを表示する([ウィンドウ>タイムライン(ドープシート)]、ショートカット「Shift+F3」)。
  • 全て選択([編集>選択>全て選択]、ショートカット「Ctrl+A」)。選択状態になる。
  • タイムスライダを0Fに移動。
  • 選択しているキーフレーム(すべてのキーフレーム)を削除する(Delete)。
  • 「pos」「pivot」「立方体」の親子関係はそのまま。ただし、チュートリアルに合わせて、名前は「Global Control」「Pivot」「立方体」とする。

XPresso(立方体が転がる動き) 5:45~

位置オフセットと回転のリンク

「Global Control」をX軸上で動かし、その動きとリンクして「Pivot」が回転するようにリンクさせる。マップ変換ノードRange Mapperを利用する。

  • 「Global Control」にXpressoタグを追加する(タグ>プログラミングタグ>Xpressoタグ)。
  • 「Global Control」をオブジェクトマネージャよりXpresso編集画面にドラッグ&ドロップ。

  • 出力ドッグに「Global Control」の属性マネージャより、使用する[P.X.]をドラッグ&ドロップ。

  • 「Pivot」をオブジェクトマネージャよりXpresso編集画面にドラッグ&ドロップ。
  • 「Pivot」の入力ドッグに「Pivot」の属性マネージャより、使用する[R.B]をドラッグ&ドロップ。
  • マップ変換」ノードを追加([Xpresso編集画面上で右クリック>Xpresso>計算>マップ変換])
  • 「Global Control」の出力ポート「位置.X」と「マップ変換」の入力ポートをワイヤで結ぶ。

立方体がX軸方向に一辺の長さ(100cm)オフセットする毎に、90°回転するようにしたい。

  • 「マップ変換」ノードを選択。
  • 属性マネージャで、まず[パラメータ]の入力を見る[入力の下限]はそのままでOK。[入力の上限]を「100」とする。
  • 次に、出力範囲は角度を出力したいので[出力範囲]を「度 Degree」にする。
  • [出力の下限]は初期値の「0」のままで、[出力の上限]を「90°」にする。

  • 「マップ変換」の出力ポートと「Pivot」の入力ポート([角度.B])をワイヤで結ぶ。

いまの状態で「Global Control」をX軸方向に移動させると以下のようになる。回転軸が変化していない。

コンペンセーション 7:25~

  • 「マップ変換」ノードを複製する(「Ctrl+ドラッグ」)。
  • 属性マネージャで、複製したマップ変換の名前を「Position」とする。

  • 判別しやすいように、ワイヤで既に結んだ「マップ変換」ノードの名前を「Rotation」に変更する。

「Global Control」がX軸方向に100cm進むたびに、「Pivot」が同方向に100cm戻るようにしたい。

  • 「Global Control」の出力ポート(位置.X)と「Position」の入力ポートをワイヤで結ぶ。
  • オブジェクトマネージャで「Pivot」を選択状態にして、属性マネージャの[座標]タブの[P.X](現在の値は「50cm」)を「Pivot」の入力ドッグにドラッグ&ドロップし、入力ポート「位置.X」を追加。

  • 「Position」ノードを選択状態にして、属性マネージャで調整。
  • [出力範囲]を「ユーザー定義 User Defined」に。[出力の下限]を「50」に。[出力の上限]を「-50」に。

  • 「Position」の出力ポートと「Pivot」の入力ポート「位置.X」をワイヤで結ぶ。

いまの状態では、回転軸「Pivot」が同じ場所に留まり続けることになる。「Global Control」を位置オフセットすると、一回目の90°の回転は狙い通りになるが、それ以降は立方体は同じ場所で回転し続ける(下のGIF)。

一回目の90°回転がリピートして、その場で回転し続けないようにしたい。

マップ変換ノードの「余 Modulo」オプション 8:45~

マップ変換ノードの「余(剰余)」を利用する。このこのオプションを選択すると、「入力値を入力範囲で割った余り」が「入力値」と見なされるようになる(入力値がどんなに大きくなっても内部の値は入力範囲の中で循環し、同時に出力値も出力範囲の中で循環する。回転運動などに代表されるくり返し運動を変換したい場合に非常に有効)。

  • 「Position」と「Rotation」の2つの変換マップを選択状態に。
  • 属性マネージャの[余]にチェックを入れる。「入力値を入力範囲で割った余り」が「入力値」と見なされる。

変換マップの入力値は「入力値(0→∞)を入力範囲(0→100)で割った余り」になる。つまり、「0→100」をくり返す。マップ変換ノードから出力される値は、一回目の90°回転アニメーションをくり返すことになる。その値を入力値とする「Pivot」の[角度.B][位置.X]も同じく、一回目の回転アニメーションをくり返す。

「Global Control」がX軸方向に移動させてチェック。

これで、立方体の動きに関してはOK。ただ、回転軸も回転のたびにリセットされるため、一回目のアニメーションをリピートするだけで転がる表現にならない。