立方体が転がるアニメーション5(XPressoの利用:立方体の回転オフセット)

2020-02-07XPresso, アニメーション

Orestis Konstantinidis Youtube チャンネルより

立方体の回転 13:15~

「Pivot」は「Global Control」が100cm移動するたびに「0°→90°」をくり返している。この回転に対して、90°の回転ごとに+90°できれば、立方体が転がる表現が可能となる。今はアニメートされていない立方体を用いて実現していくことにする(※いまXpressoでアニメーション用パラメーターが制御されているのは「Pivot」と「Global Control」のみ。立方体はそのふたつのヌルオブジェクトの子のために、全体として立方体が回転して進んでいるアニメーションが出来ている)

  • 立方体をXpresso編集画面にドラッグ&ドロップ。
  • 立方体の属性マネージャの[R.B]を入力ポートにドラッグ&ドロップ。
  • Xpresso編集画面で「Rotation」を複製する(Ctrl+ドラッグ)
  • 「Global Control」の出力ポート([位置.X])と複製した「Rotation」の入力ポートをワイヤで結ぶ。
  • 「Rotation」の出力ポートと立方体の入力ポート([回転.B])をワイヤで結ぶ。

この状態で、「Global Control」を移動させてみる。

「Global Control」が100cm移動すると+90°立方体も回転しているが、回転は「Global Control」の動きに合わせて連続して回転(補完アニメーション)になっている。そうではなく、「Pivot」が一回90°回転するたびに立方体が一回90°回転するという風にしたい。

「計算;除算」ノードの利用 14:40~

「Global Control」が100cm移動(「Pivot」が一回90°回転)を1ステップとして1ステップごとに立方体が90°回転とすればよいので、計算ノードの「除算(割り算)」を使うことにする。ステップ数は以下の割り算で導き出せる。15:00~

「Global Control」の移動距離/100(「Global Control」の1ステップ分の移動距離)=ステップ数

  • 計算ノードを追加する(Xpresso編集画面で右クリック>新規ノード>Xpresso>計算>計算)
  • 「Global Control」の出力ポート([位置.X])と[計算;加算]ノードの入力ポート(2つあるどちらでもよい。チュートリアル動画に合わせると上の[入力])をワイヤで結ぶ。
  • [計算;加算]ノードの属性マネージャで、[演算タイプ Function]を「除算 Divide」選択。また、[入力[2]]を「100」に。これで、入力した値を100で割るノードになった。

[計算;除算]の出力ポートと「立方体」に結んでいる[Rotaion]の入力ポートをワイヤでつなぐ(自動的にいまの[Rotation]の入力ポートに結んであるワイヤは消える)

「立方体」に結んでいる[Rotaion]の属性マネージャで、[入力の上限]を「1」に変更。また「余」を求める必要はなくなったので、「余」のチェックを外す。

このままだと、ステップ数が「0」と「1」の間の値も出力する。確認する。

  • [結果 Result]ノードを追加して確認してみる(Xpresso編集画面で右クリック>新規ノード>Xpresso>一般>結果)。
  • [計算;除算]の出力ポートと[結果]の入力ポートをワイヤで結ぶ。
  • 「Global Control」を移動させてみる。[結果]に小数点以下を含む値が返される。

2つの解決方法がある。

方法1:データタイプを「整数」にする。

  • [計算;除算]ノードの属性マネージャで[データタイプ]を[整数 Integer]に。[入力[2]]の値がリセットされるので「100」に。
  • Xpresso編集画面メニューの[再計算>アニメーションにしたがって再計算]にチェックを入れる。

  • 「Global Control」を移動させて確認

これで立方体が転がっているアニメーションが作れる(「Global Control」の[P.X]のアニメーションを作成すればよい)。[結果]ノードには「1,2,3,4…」とステップ数が表示されることも確認できる。ただ、[P.X]が正の値(P.X>0cm)のときのみで、負の値の場合は転がっているアニメーションにならないことに留意。

方法その2:FLOOR関数(切り捨て)の利用 16:50~

[関数 FloatFunc]ノードで、FLOOR関数を利用する(図はWikipediaより)。

  • [計算;除算]ノードの[データタイプ]を初期値の[実数 Real]に戻す。[入力[2]]の値がリセットされるので「100」に。

  • [関数 ]ノードを追加する。(Xpresso編集画面で右クリック>新規ノード>Xpresso>計算>関数)。
  • 関数;指数]ノードの属性マネージャで[関数]を「切り捨て Floor」に。

  • 関数;切り捨て]ノードの出力ポートと[関数;指数]ノードの入力ポートをワイヤで結ぶ。
  • 関数;切り捨て]ノードの出力ポートと[Rotation]の入力ポートをワイヤで結ぶ。
  • [結果]ノードを作成し、[関数;切り捨て]ノードの出力ポートと結ぶ。

  • 「Global Control」を移動させて確認。

これで立方体が転がっているアニメーションが作れる。[関数;切り捨て]の出力値の[結果]には「1,2,3,4…」と、小数点が切り捨てられたステップ数が表示されることも確認できる。ただ、[P.X]が正の値(P.X>0cm)のときのみで、負の値の場合は転がっているアニメーションにならないことに留意。

チュートリアル17:35以降は、立方体のサイズを変更しても転がるアニメーションとなるリグを組むためのXpressoの使い方を解説しています(この投稿では省略)。

参考)マップ変換「Xスプライン」

スプライン曲線を使うと、入力値を非線形に出力値に変換することが可能になる。

例えば、今回は回転のタイミングを変える。

  • 「Pivot」に出力値を渡している[Rotation]を選択。
  • 属性マネージャの「Xスプライン」上で右クリック。「リセット」を選択して、初期値のグラフ(線形)を表示する。※[スプラインセット>線形]でもOK。

グラフが表示された。

グラフの両端のポイントを選択状態にし、[右クリック>スプラインセット>イーズイーズ]。このように、入力値をリニアに変換するのではなく、非リニアに変換可能。

他のC4Dのグラフエディタ同様に操作が可能。ポイントを足す場合は、Ctrl+クリック。グラフの形状でセカンダリーアニメーションをつけることが出来る