「Unreal Engineで開発するから髪は当然風になびきますよね?」
こんにちは、開発者Kです。
ミレシアンの皆さんの髪に命を吹き込むために
物理ベースのアニメーションを適用する過程についてお話ししたいと思います。
太古の昔に骨格があった(上のスクリーンショットは骨格の一部の例です。
実際のゲームでは様々な動きをつけるためにもっと多くの骨格が設定されます。)
キャラクターの動きを作るための伝統的なアニメーション技法は以下の通りです。
キャラクターの基本骨格があり、
その骨格をXYZ方向に動かしてフレームごとに「キー」を設定するキーアニメーションが一般的です。
例えば「歩く」というモーションを考えてみましょう。
足が前後に動かなければならないのでThigh、Calf、Foot、Toeの骨格をフレームごとに位置を変えて
「キー」を設定しなければなりません。(左足、右足それぞれ)
腕も自然に動かしてみましょう。UpperArm、ForeArm、Handの骨格をフレームごとに位置を変えてキーを設定します。
(左腕、右腕それぞれ)
自然な動きのために胴体も動くようにします。(Pelvis、Spine、Neckなど )
歩行を例に挙げましたが、マビノギではキャラクターのすべての動きは上記のような方式でフレームごとに
骨格の位置を変えて「キー」を設定する「キーアニメーション」方式になっています。
(様々なスキルのモーション、アクションのモーションなど全ての動きを、です。)
上の骨格が動くと、それに設定されているモデリングも一緒に動く必要があります。
そのための作業を「リギングとスキニング」といいます。
モデリングの各頂点と骨格を設定して(リギング)、
骨格の動きによる影響を受ける加重値を付与(スキニング)して設定します。
これによって骨格が動くと、設定されたモデリングの肌が伸びたり縮んだりします。
キャラクターの「基本骨格」は共通で使用するため、
モデリングが変更されてもスキニングが正常に行われていればアニメーションは正常に動作します。
ヘアアニメーションポニーテールの例を挙げてみましょう。
上記で説明した基本骨格を中心にキーアニメーションデータがすべて生成された状態で、
ポニーテールヘアにアニメーションを追加する必要があるとしましょう。
では、まず基本骨格に動きをつけるためのポニーテール用の骨格を追加する必要がありますね。
既存キャラクターの動きのために作ったアニメーションに
ポニーテール用の追加骨格の動きのための「キー」を設定しましょう。
(すべてのキャラクターアニメーション((13,586個)にポニーテール用として追加された骨格の
「キー」をコツコツと調整する作業が必要です。)
ところで…今回はツインテールが追加されました。
(基本骨格にツインテール用の骨格を追加→すべてのアニメーションでフレームごとのキーを追加)
ところで…今回はポニーテールでも左に結んだポニーテールです。
(基本骨格に左ポニーテール用の骨格を追加→すべてのアニメーションでフレームごとのキーを追加)
ところで…今回は前髪が追加されました。
(基本骨格に前髪用の骨格を追加→すべてのアニメーションでフレームごとのキーを追加)
ところで…今回はボブヘアが追加されました。
(基本骨格にボブヘア用の骨格を追加→すべてのアニメーションでフレームごとのキーを追加)
このままヘア用の骨格を追加し続けると、ヘア用の骨だけで数百個になりますね。
基本骨格にヘア用の骨格が追加され続けると、リギングやスキニングの過程でも問題が発生します。
ヘア骨格の分離上記のように想像するだけで恐ろしいことが起きる前に、基本骨格からヘアの骨格を分離してみましょう。
既存の基本骨格とアニメーションデータはそのままにして、ヘア用の骨格を別途作成します。
再びポニーテールを例に挙げてみましょう。
このようにヘアの専用骨格を別に作成し、
既存のアニメーションと同時に動くポニーテール用のアニメーションもすべて別々に作成しましょう。
この時、基本骨格の歩行アニメーションの実行と同時にポニーテール骨格の歩行アニメーションも実行すると
2つの骨格でそれぞれアニメーションが動作しますが、結果的には1つの動作のように見えます。
(もちろん、このためには両方のアニメーションのフレーム長を合わせ、
ヘアだけが強調されないように基本骨格のアニメーションを基準に合わせ続ける作業が必要です。)
骨格を分離すると、基本骨格にヘア用の骨格を追加するのに比べ、
リギングやスキニングの過程での問題が解決されて既存のすべてのアニメーションに対応する
「キー」アニメーションを作る過程は同じです。
現在、マビノギで動くかつらやヘアの場合、各ヘアメッシュごとに骨格を分離し、
既存の基本骨格に適用されたモーションに対応して「キー」アニメーションを作成して適用しています。
物理ベースのアニメーション物理アニメーションとは?
質量、慣性、ダンピング、摩擦力、弾性などの物理的性質を有し、日常の物理現象と同様の結果が
出るようにシミュレーションされるアニメーションを指します。
つまり、様々な条件を設定しておけば、自動的に物理現象に合わせて動きが生成されるのです。
説明だけ聞くと、従来の「キー」アニメーションのようにフレームごとに骨格の位置を指定する必要がないので
骨格の位置が自然に自動的にシミュレーションされる技術のように聞こえますが、
現実には自然な動きを表現するために考慮すべき点がたくさんあります。
もう一度ポニーテールを例に挙げてみましょう。
定位置モーションではひらひらとなびいたり、走るモーションや加速度の大きいモーションでも
あまり跳ね返らないように動くシミュレーション結果が出なければなりません。
小さな動きでは外部要素による反応が小さく、そのためポニーテールの動きを細かく表現するのは難しいです。
一方、大きな動きでは加速や衝突がシミュレーションを不安定にし、動きが不正確に見えることがあります。
これらの問題に対応するためには物理シミュレーションのパラメータを調整したり、
モーションのサイズや方向についての調整が必要です。
テスト→数値調整→テスト→数値調整の繰り返しです。
それにもかかわらず、小さなモーション、
大きなモーションの両極端の状況をすべて満足させることができない場合も発生します。
一部はキーアニメーションで、一部は物理ベースのアニメーションで適用する方法も検討しています。
<初期物理ベースのアニメーションテストの様子- 01.物理アニメーションなし
/ 02.物理アニメーションの動きを小さくする/ 03.物理アニメーションの動きを大きくする>
風になびくミレシアンの髪のために…上記で紹介したキーアニメーション、
物理ベースのアニメーションはすべてミレシアンのなびく髪のための研究開発過程です。
この他にも、キーアニメーションと物理ベースのアニメーションの組み合わせ、
リターゲティングシステムなど様々な内容がありますが、
次回の衣装アニメーション(ポポスカートは実は…)で関連する内容を取り上げます。
マビノギエタニティプロジェクトの旅路が続く限り、ミレシアンの髪はさらになびくでしょう。
ありがとうございます。
『writer 開発者K』