CEDEC2024 UnityのHumanoidと共存するキャラクタジョイント制御と制作ワークフロー

はじめに
株式会社QualiArtsの塩塚です。 テクニカルアーティストとして、主にキャラクタアニメーション制御、物理シミュレーション、パイプライン整備を担当しています。
2024年8月21日から8月23日にかけて「CEDEC 2024」が開催されました。 この中で「UnityのHumanoidと共存するキャラクタジョイント制御と制作ワークフロー」のセッションを講演させていただきました。 本記事はその講演の補足記事になります。 講演本編に加え、時間の都合上カットした内容も含めて記載いたします。
導入
Unityには「Humanoid」と呼ばれる人型キャラクタを動かすための機能が備わっており、リターゲットやIKなど、キャラクタを汎用 的に扱うシステムが整っています。 しかし補助骨や揺れ骨など独自のジョイント制御を導入する際にHumanoid特有の挙動と相性が悪く、思い通りの実現ができずパフォーマンス的にも最適でない選択を取らざるを得ない場合があります。 セッションでは、Humanoidのメリットを活かしながら表現力やパフォーマンスを損なわないジョイント制御手法を説明しました。 加えて補助骨を中心としてMayaとUnity間のワークフローについても紹介しました。
モバイルゲームに必要なキャラクタジョイント制御要素の整理
UnityHumanoidの紹介
UnityにはHumanoidと呼ばれる、人型キャラクターを効率よく動かすための、リグ構造が存在します。 キャラクタモデルのジョイントのローカル回転を直接制御するのではなく、肘の曲げなど人体の動きに即したパラメータに正規化された値で制御を行います。 この正規化されたパラメータをMuscleと呼びます。 ゲーム開発者としては、このHumanoidリグを通じてアニメーションの適用や、リターゲット、IK解決などを行います。
アバターのMapping(公式リンク) | アバターのMuscle&Settings(公式リンク) |
---|---|
![]() |
![]() |
具体的な機能を2つ取り上げます。
捻り補正 | フルボディIK |
---|---|
![]() |
![]() |
手首などの捻り回転が、親階層である肘に分割されます。捻りが手首に集中することを防ぎ、ボリューム減少を緩和することが期待できます。 | 手足の位置回転に加えて、引っ張りや重心の操作が可能です。 |
キャラ制御に求められる要件の整理
キャラ制御に求められる要件として、主にカットシーンとスクリプト操作場面で必要な要素が異なると考えています。
-
カットシーン
- UnityのTimelineをベースとしたシステムとの連携が必要
- 時系列的な厳密性に加え、エディタ環境との調和が求められる
-
スクリプト操作
- インゲームやアウトゲームなど、遊びやユーザー操作との連携が必要
- ゲーム性により要件は異なるが、ゲームエンジニア視点での扱い易さ方法が求められる
また昨今のモバイルゲームではキャラの入れ替えや、衣装の入れ替えをプレイヤーが自由に行える仕様が採用されることがあります。 この仕様に対応するため、リアルタイムで身長差や衣装設定差をカバーするシステムであると、なお良いと考えています。
これらの要件を考え、本稿では次のようなシステムが必要であると整理します。
-
アニメーションの再生
- Timelineとの親和性が高い
- 他のシステムに干渉しない再生タイミングで完結
-
基本骨補正