9/10/2018

前回の記事の続きになります。

歩行ループ(サイクル)を行う為には以下の2つの要点を満たす必要があります。
一つは、1ループでの最初と最後のポーズを完全に同じポーズ(数値上でも完全に同じ)に揃えることです。仮にこのポーズに僅かなズレがあるとループ時にカク付きが起きたり、ループを繰り返す都度にオフセットでズレが増幅され、モーションが破綻したりします。

実際に座標上を移動させるモーション制作では移動に係るコントローラ(ルートを除く)に対して下図のようにルートからのAの距離(座標値ではなく)とA'の距離、そしてBの距離とB'の距離を完全に同じ距離に合わせる必要があります。作例ではZ軸方向の移動なのでZ値の距離を合わせていますが、距離と言っても距離入力のパラメータは有りませんので、距離を座標値に置き換えて合わせます。
仮に腕もIK制御している場合は腕のコントローラの移動量に対しても同様の編集が必要です。
(ちなみにゲームで用いられるような、その場で足を空転させる歩行モーション(ウォークサイクル)の場合だと、ル-トの移動量は0なので最初のキーの座標値を最後のキーへコピペするだけで簡単に完全に同じポーズを作れることが出来ますが、ルートor背景移動時の足のすべり止め作業が発生します。)

2つ目の要点は、各チャンネルで1ループでの最初と最後のキーのテンション(張力)をスムーズに繋げることです。文章だとややこしいので図と動画で説明します。
この動画では1ループに当たる0fと60fのポーズは完全に同じポーズになっていますが、60fで折り返す時に跳ね返るようなモーションになっています。この原因は0fと60fのキーのテンションがスムーズに繋がっていないからです。0fと60fのキーをスムーズに繋げる為には下図のように0fと60fのキーに対してテンションを1.0(イーズインイーズアウト)に設定します。

すると60fから0fへループする時のカーブがスムーズに繋がり、以下の動画のように滑らかなモーションになります。

これでルーピングを行う為の2つの要点はクリアしているのですが、仮に下側の棒オブジェクト(子)に対しても、盲目的にイーズインイーズアウトを設定してみるとどうなるでしょう?
棒オブジェクト(子)が60fの折り返し位置で一瞬静止するようなモーションになっているのが確認出来ると思います。これは上図グラフで60fから0fへと想像でカーブを繋げてみるとなんとなくわかります。0fと60fでテンション1.0(イーズインイーズアウト)を設定してしまうと、カーブは階段状になってしまうので一瞬の静止状態が生まれます。一方、0fと60fでテンション0.0に設定すると、カーブは段差無くスムースに繋がるので、棒オブジェクト(子)に対してはテンション1.0(イーズインイーズアウト)の設定をしてはイケナイということにが分かります。この動画では2つの棒オブジェクト(親子関係)の構成例で解説しましたが、これをキャラクタに置き換えても同様に1ループの最初と最後のフレームでキーのある全てのチャンネルに対してテンション調整を検討しなければいけません。

上記2つの要点はルーピングを適切に行う為の最低条件というか原理原則です。
仮にこの要点を一つでも怠ると、どれだけ美しい1ループモーションを作ってもルーピング時に汚くなってしまいます。勿論、手順や方法論は他にもありますしスクリプト等での効率化も出来ますが、・開始と終了のポーズを合致させる。・開始と終了のテンションを調整(検討)する。という2点は避けて通ることは出来ません。

キーフレームアニメーションの基礎はバウンシングボールですが、キャラクタアニメーションの基礎はベーシックな歩行モーションです。歩行は誰でも目にする動きの一つなので誤魔化しが効き難くモーションの違和感は直ぐにバレてしまいます。又、歩行は通常無意識で行える動きの一つなので、より物理的(リアル)で嘘のない動きが求められます。歩行モーションのクオリティは思っている以上に奥が深く、キャラクタモーションの様々な技術も詰め込まれているので学ぶ価値は十二分にありますが、モーションの基礎(溜め詰め重心移動等)はネット上でも広く公開されていますので、ここでは実モーション制作の手順的な基礎は割愛します。

次回は歩行モーションのクオリティに係る要点を書いてみたいと思います。

0 件のコメント:

コメントを投稿