未来を創る、テックコミュニティー

代表技術通信~Unityに舞い戻りでVR⑮

草場代表
2020/11/16

こんばんは。代表の草場です。

Unity LearnのIntroduction to 3D Animation Systemsの勉強です。Working with Assets です。

2.9 Configuring Humanoid Rigs

1.概要

モデルのインポートプロセスの重要な部分であるリグについて説明します。リグは、インポートするモデルの構造を定義する方法であり、アニメーションの再生方法を定義するために使用されます。
以下のようなヒューマノイドリグの設定方法について説明します。
ボーンをトランスフォームにマッピングする方法、
Automapを使用してこのプロセスを簡単にする方法
ヒューマノイドモデルの参考ポーズとしてTポーズを適用する
筋肉あたりの設定を変更して、結果のアニメーションに影響を与える
アバターマスクの作成と適用

2.始める前に

3Dアニメーションシステム入門Unityプロジェクトをダウンロードしたら、Unityエディタでプロジェクトを開き、プロジェクトウィンドウで、アセット > 2.9. ヒューマノイドリグの設定」に進みます。

3.ヒューマノイドアニメーションタイプ再録

2.8 Generic Rigs の設定では、リグに使用できるアニメーションタイプの概要を説明しました。一般的に、アニメーションモデルはジェネリックアニメーションタイプを使用しますが、いくつかの例外があります。例外とは、次のような場合です。
・モデルには、異なる階層構造を持つ別のヒューマノイドモデルを通して再生することを目的としたアニメーションがある
・異なる階層構造を持つヒューマノイドモデルのアニメーションを再生するためにモデルを使用している
・腕や脚のIKやターゲットのマッチングなど、組み込みのヒューマノイド機能を使用したい場合

注意:ヒューマノイド・アニメーション・タイプは、二足歩行の人間のようなキャラクターには必ずしも適していません。

Humanoid Animation Type(一般的にはHumanoid Rigsと呼ばれています)を使用したリグがどのように機能するかを調査します。

4.アニメーションの種類をヒューマノイドに変更する

まず、このチュートリアルのモデルを開き、Humanoidに設定します。これを行うには、
1. プロジェクトウィンドウで、MazeLowManモデルを選択します。
2. インスペクタで、Rigタブを選択します。
3. アニメーションのタイプをHumanoidに設定します。
4. Apply(適用)を選択します。

5.マッピングとヒューマノイドアバターの複雑性

ジェネリック・リグとヒューマノイド・リグの主な違いは、アバターです。
ヒューマノイドリグでは、アニメーションを再生するためにアバターが必要ですが、ジェネリックリグではそうではありません。これは、ヒューマノイドが特殊なケースであるためで、その変形階層は人間のような形状の骨にマッピングされています。
通常、アニメーションを複数のターゲット間で共有するためには、各ターゲットがアニメーションクリップの名前と同じ名前の同じ階層を持つ必要があります。これは、Transformの名前がアニメーションクリップのバインディングを構築するために使われるからです。アニメーションクリップが再生されている階層に特定のバインディングがない場合、バインディングは無視されます。つまり、名前が一致しない場合、アニメーションは再生されません。
インポートされたモデルがヒューマノイドの場合、そのアニメーションクリップは標準のバインディングだけでは再生されなくなりました。代わりに、ヒューマノイドの定義にマッチしたアニメーションクリップの部分がアバターを通して再生されます。
インポート時には、ヒューマノイドモデルのアニメーションクリップは、Transformへの書き込みから直接Muscleへの書き込みに変換されます。これをマッスルクリップと呼びます。実行時には、マッスルクリップはトランスフォームへの書き込みに変換されます。
全てのヒューマノイドはこのマッピングを持っているので、どのヒューマノイドアニメーションクリップでも、どのヒューマノイドモデルでも再生することができます。

プロセスのまとめ
これらの変換プロセスは、以下のような高レベルの概要でまとめることができます。
インポート時
アニメーションクリップ(変形バインディング付き) → ヒューマノイドアバター → マッスルクリップ

実行時
マッスルクリップ → ヒューマノイドアバター → 変形プロパティを設定

ある階層向けに意図したアニメーションクリップを別の階層で再生するプロセスをリターゲティングといいます。

6.ヒューマノイドアバターの設定を読み込む

インスペクタのConfigure…ボタンの左に刻み記号がある場合、Unityは自動的にアバターを設定することができました。

アバターの設定を見直してみましょう。アバターの設定を開くには
Configure…ボタンを選択します。
このとき、開いていたSceneを保存するように促されることがあります。これは、ヒューマノイドアバターの設定は別のSceneで行われるため、現在のSceneをアンロードする必要があるためです。

7.マッピングの見直し

アバター設定シーンがロードされると、インスペクタにアバターのマッピングが表示されます。
アバターの設定は、インスペクタの上部にある2つのタブに分かれています。

マッピング
筋肉と設定

まずは「マッピング」タブを確認してみましょう。

マッピングタブ
このマッピングでは、モデルのどのトランスフォームが、事前に定義されたヒューマノイドのどのボーンにリンクされているかを正確に定義します。
インスペクタウィンドウには、現在割り当て可能なボーンの領域のダイアグラムが表示されます。

デフォルトでは全身となっており、頭や手などより細かい部分はボタンで選択できるようになっています。

ダイアグラム上の各ドットは、ボーンを指します。この場合は、「Lot」をクリックすると「Lot」が表示されます。ドットの輪郭が点線の場合、ボーンはオプションです。オプションのボーンをマッピングするほど、リターゲティングの品質が向上します。

オートマップを使用する
マッピングの設定を簡単にするために、予想される階層と名前を一致させて自動的にマッピングを完成させようとするオプションがあります。Automappingを有効にするには、Mapping タブの下部にある Mapping ドロップダウンをクリックし、Automap を選択します。

8.標準的なアニメーションのポーズを適用する

アバターの設定に存在するトランスフォームの位置と回転も非常に重要です。
これらはアニメーションを測定するための基準ポーズを形成します。アニメーションの各回転と移動は、マッス ルクリップに変換されたり、マッスルクリップから変換されたりする際に、この基準ポーズと比較されます。このポーズが非常に重要であるため、Unityでは、すべてのヒューマノイドモデルが目指すべきターゲットとして、標準的なアニメーションポーズであるTポーズを使用しています。
Tポーズとは、人間が肩から腕を真っ直ぐに伸ばし、腰から足を真っ直ぐに下ろして真っ直ぐに立った状態のことです。マッピングを設定すると、UnityはスケルトンをTのポーズに設定することができます。アバターのセットアップを最終的に行う前に、この作業を行うことをお勧めします。

これを行うには、以下の手順に従います。
Pose(ポーズ)ドロップダウン(Mappingタブの下部にある)をクリックして、Enforce T-Pose(強制Tポーズ)を選択します。

9.筋肉と設定の設定

筋の定義は、骨が与えられた軸上で回転すると予想される範囲内またはそれ以上の範囲として存在する。
この範囲は正規化されており、範囲の一端での回転は0の値を持ち、範囲の他端での回転は1の値を持つことを意味します。 Transform回転は、インポート時にこれらの正規化された回転範囲に変換されます。正規化された回転範囲は、実行時に Transform 回転に変換されます。
インポート時のアバターの予想される可動範囲と実行時のアバターの予想される可動範囲は異なる場合があります。その場合でも、データは一般的なボーン定義に基づいて正規化された値として保存されているため、変換は可能です。
ただし、これはアニメーションの回転に影響します。


モデルは、軸の周りに10度から90度の範囲の筋肉の定義を持っています。そのモデルのアニメーションでは、特定のフレームで50度の回転が求められます。
範囲は正規化されているので、この回転はその軸の周りの範囲の0.5度と言えます。
このアニメーションは別のモデルにリターゲットされています。このモデルは0度から110度の範囲を持っています。この0.5回転をアニメーションから換算すると55になります。

エディタでこれを探る
エディタでこれを探索するには
1. インスペクタの上部にある「筋肉と設定」タブを選択します。
2. [筋肉ごとの設定]セクションで、[ヘッド&ネックノッドダウンアップ]フォールドアウトを展開します。
3. 左側のプレビュースライダを使用して、範囲をデフォルトの-40から40に変更して、より大きな範囲に変更してみてください。

4. 終了したら、デフォルトの-40~40の範囲に戻します。

10.アバターマスクの作成と適用

最後に探求するのは、ヒューマノイドアバターのためのアバターマスクです。
アバターマスクは、アニメーションデータがバインディングに書き込まれるのを防ぐ方法です。ヒューマノイドアバターとジェネリックアバターでは動作が異なりますが、全体的な効果は同じです。

ヒューマノイドアバター用のアバターマスク
ヒューマノイドのアバターマスクは、ヒューマノイドの画像を使用して、ヒューマノイドの異なる領域を選択できるようにします。ヒューマノイドの領域を選択するとマスクされます。

アバターマスクの適用
アバターマスクは、2つの異なる状況で適用することができます。

インポート中にインポートしたアニメーションクリップに、特定のトランスフォームのアニメーションデータがそのアニメーションクリップに追加されないようにします。

アニメーターコントローラーのアニメーションレイヤーに、特定のトランスフォームのアニメーションデータがアニメーターコントローラーのすべてのレイヤーのブレンドの結果に追加されないようにします。これらのアバターマスクはアセットとして作成する必要がありますが、他のアバターマスクと同じように動作します。

アニメーションクリップとアニメーションレイヤーのインポートについては、「3.7 アニメーションレイヤーの作成と設定」を参照してください。

11.まとめ

以下のようなヒューマノイドリグの設定方法について説明しました。
骨をTransformsにマッピングし、Automapを使用してこのプロセスを簡単にします。
ヒューマノイドモデルの参考ポーズとしてTポーズを適用します。
筋肉あたりの設定を変更して、結果のアニメーションに影響を与えます。
アバターマスクの作成と適用。

 

この記事を書いた人
草場代表
エディター