この記事の3行まとめ
- QualiArts、『CEDEC2024 UnityのHumanoidと共存するキャラクタジョイント制御と制作ワークフロー』と題した記事を公開
- 「CEDEC2024」での同名の講演内容および、割愛された部分を補足解説した記事
- Unityの「Humanoid」のメリットを生かしつつ、揺れ骨や補助骨などのジョイントを制御する手法について紹介している
QualiArtsは、『CEDEC2024 UnityのHumanoidと共存するキャラクタジョイント制御と制作ワークフロー』と題した記事を、同社の技術ブログ「QualiArts engineer blog」にて公開しました。
【公式エンジニアブログ更新!】
テクニカルアーティスト塩塚の記事が掲載されました!
「CEDEC2024 UnityのHumanoidと共存するキャラクタジョイント制御と制作ワークフロー」https://t.co/pAelbHeo2v
— QualiArts(公式アカウント) (@QualiArts_PR) October 8, 2024
【公式エンジニアブログ更新!】
テクニカルアーティスト塩塚の記事が掲載されました!
「CEDEC2024 UnityのHumanoidと共存するキャラクタジョイント制御と制作ワークフロー」https://t.co/pAelbHeo2v
— QualiArts(公式アカウント) (@QualiArts_PR) October 8, 2024
同記事は、2024年8月21日(水)から23日(金)にかけて開催された「CEDEC2024」で行われた、同名の講演を補足した記事。講演本編の内容および、時間の都合により割愛された内容を記載しています。
「CEDEC2024」の講演スライド資料は、Speaker Deckで公開されている(画像はSpeaker Deckより引用)
Unityには、人型キャラクターを動かすための「Humanoid」と呼ばれる機能が備わっています。これにより、リターゲットやIKといった、キャラクターを汎用的に扱うシステムが整っています。
しかし、補助骨(補助ボーン)や「揺れもの」のボーンなど独自のジョイントを導入する際には、Humanoid特有の挙動と相性が悪いことがあり、パフォーマンス的に最適でない選択をしなくてはならないことがあるそう。
記事ではHumanoidのメリットを生かしつつ、表現力やパフォーマンスを損なわないジョイント制御手法について解説しています。
Humanoidでは、ジョイントの回転を人体の動きに即したパラメータに正規化し、その値で制御する。これにより、手首のひねりを肘に伝達したり、手首の位置に合わせて肩や肘を動かしたりといった挙動が可能(画像はブログ記事より引用)
キャラクターの制御において、カットシーンとスクリプト操作の場面で求められる要件が異なります。
どちらの要件も満たすため、「UnityのTimelineと親和性が高いアニメーション再生」「キャラクター・衣装の変更に対応した基本ボーンの補正」「計算コストを抑えた独自ボーンの制御」といったシステムが必要になり、これらを実装する手法について説明されています。
「UnityのTimelineと親和性が高いアニメーション再生」については、Timelineとの親和性が高い「Animation C# Jobs」を用いてジョイントを制御。アニメーションやスクリプトにミックスやブレンドなどを行う「Playable API」を使って出力しています。
Playable APIのツリー構造(PlayableGraph)。アニメーションのブレンド後に追加のジョイント制御を行うことで、ゲーム性や再生方式によらない汎用のキャラクタ制御システムとして動作する(画像はブログ記事より引用)
「キャラクター・衣装の変更に対応した基本ボーンの補正」では、とくに衣装ごとのボリューム差に着目。たとえば衣装のスカートのボリュームが大きいときは、汎用モーションにおいて手が埋まってしまうなどの問題が発生します。
ボリュームの大きなスカートに手が埋まった様子(画像はブログ記事より引用)
対策として、衣装の概形に沿うコライダーを生成し、コライダーに基づいてポーズ補正処理を追加。これにより、同じモーションを使用しても埋まりをある程度回避できるようになっています。
コライダーにより、手の埋まりを回避(画像はブログ記事より引用)
ただし、IKおよびFKの切り替え処理が行われるため、コライダーに触れた瞬間にカクつきが起こることも。そこで、衝突を完全に避ける「不可侵領域」のコライダーのほか、ローパスフィルターのような役割を持つ「減衰領域」のコライダーを作成しています。
減衰領域での「布に手があたって沈むような挙動」を挟むことにより、カクつきの抑制が実現できたと述べています。
(画像はブログ記事より引用)
「計算コストを抑えた独自ボーンの制御」としては、足を曲げたときのスカートのジョイントの暴れを防止します。
実装手法としては、足の回転値を取得した後、ステレオ投影法で軸ごとに分解。前後と左右の曲げに合わせてスカートのジョイントを連動して動かす処理を行うことで、動きの破綻が抑えられ、豊かな表現ができたとのこと。
(画像はブログ記事より引用)
記事ではほかにも、「肘を曲げた際の出っ張った部分」などリアリティを表現するための補助骨作成や、揺れもののボーン制御の高速化/汎用化テクニック、MayaとUnity間のワークフローなど、さまざまな角度からジョイント制御などの解説をしています。
詳細は、QualiArts engineer blogをご確認ください。
『CEDEC2024 UnityのHumanoidと共存するキャラクタジョイント制御と制作ワークフロー』QualiArts engineer blog