ボディトラッキング
Unity MARS のボディトラッキングを使用すると、拡張現実 (AR) の中で人をトラッキングすることができます。仮想の服を身に付けたり、アクセサリーを付けたり、体の姿勢 (ボディポーズ) を照合したりするのに使用します。
このセクションでは、アプリケーションの中で人の体をトラッキングする方法について説明します。以下のガイドが含まれています。
- トラッキング対象の体の上にアバターを配置する方法
- ヒューマノイドアバターに定義されているランドマークにオブジェクトをアタッチする方法
- Unity MARS でボディポーズを作成して照合する方法
- 単純な例: 特定のポーズと一致したときにトラッキング対象のボディプロキシを特定の色でペイントする
このガイドを読むと、Unity MARS アプリケーションにボディトラッキングを組み込むために必要な知識が身に付きます。
ノート: ボディトラッキングは iOS デバイスでしか動作しません。現在この機能をサポートするプラットフォームは ARKit のみであるためです。この機能が正しく動作するためには、ARFoundation、ARKit、ARkit フェイストラッキングの各パッケージのバージョンが 4.0.2 以上でなければならないことに注意してください。
Unity MARS のボディトラッキング
Unity MARS のボディトラッキングは、Unity のアバターアニメーションシステムでシームレスに利用できます。
体をトラッキングするには、Body Proxy* を使用します。このプロキシは、Body Trait** と Action という 2 つのコンポーネントから成ります。アクションは、以下のいずれかになります。
- Match Body Pose Action: トラッキング対象の体をヒューマノイドアバターに追従させることができます。
- Body Expression Action: ボディポーズを照合することができます。両方の種類のボディアクションを同じボディプロキシで使用することにより、仮想アバターをアニメーション化し、さらにポーズを照合することができます。
Body Proxy の作成
現在開いているシーンに Body Proxy (ボディプロキシ) を追加するには、MARS Panel の Body ボタンをクリックします。
Body Proxy の準備
Body Proxy (ボディプロキシ) を作成すると、プロキシに Default Body Rig という子ゲームオブジェクトが自動的に作成されます。Unity MARS は、このデフォルトのボディリグを使用してボディにランドマークを作成します (詳細は後述します)。
このゲームオブジェクトはひとまず削除して、独自のヒューマノイドアバターを、作成済みのボディプロキシの子としてアタッチします。次に、ヒューマノイドのアニメーターを Match Body Pose アクションの Animator プロパティにドラッグアンドドロップします。
以上で完了です。アプリケーションをビルドしてデバイス上での動作を確認できます。また、Simulation View (シミュレーションビュー) でテストすることもできます。合成ボディを含んだ環境を開き、シミュレーションビューで 再生 ボタンを押すと、ヒューマノイドアバターが合成ボディ (グレーのアバター) に追従します。
Body ランドマーク
ランドマークは、点、辺、ポリゴンなどの空間データで、トラッキングされた世界における仮想コンテンツのアンカーや位置調整を可能にします。ボディランドマークによって、アクセサリー、帽子、衣服などのコンテンツをヒューマノイドアバターにアタッチすることができます。
ランドマークを使用するには、MARS Panel から Body プリセットを作成します。Default Body Rig という子ゲームオブジェクトがボディに追加されます。このボディリグによって、トラッキング対象の体に 3D コンテンツをアタッチすることができます。
ボディプロキシにコンテンツを追加するには、シーンビューでボディプロキシにアセットをドラッグアンドドロップします。コンテンツが必要な場所に自動的に配置されます。
ランドマークの動きを確認するには、シミュレーションビューを開き、合成ボディを含む環境を選択します。再生 ボタンを押すと、合成ボディにランドマークがアタッチされていることを確認できます。
ノート: 何らかの理由でデフォルトのボディリグが失われた場合は、ボディプロキシを選択し、Body Action の Transparent Default ボタンをクリックしてください。新たに使用できるボディリグが Unity MARS によって生成されます。
すでにヒューマノイドアバターがあって、独自のランドマークをアタッチしたい場合は、制作したコンテンツをアバターのリグ階層の親として手動で設定する必要があります。そうすることで、ワークフローにオーバーヘッドをもたらすことなく、独自のアバターを使用することができます。独自のヒューマノイドアバターを追加するには、ヒューマノイドボディをプロキシの親に設定するか、Custom Avatar ボタンをクリックして独自のアバターを選択します。その他の必要な処理は Unity によって自動的に実行されます。
ボディポーズの照合
Body (ボディ) ポーズは、ヒューマノイドアバターをトラッキングする際の Unity MARS の可能性を広げます。この機能を使用すると、トラッキング対象の人が何をしているかを常時確認し、自分が定義したカスタムポーズにトラッキング対象の人のポーズが一致したときにイベントを発動することができます。
Unity MARS でボディポーズを照合するためには 2 つの要件があります。トラッキング対象の人とボディポーズです。人をトラッキングしてポーズと照合するには、ボディプロキシを作成して、*Body Expression アクションをプロキシにアタッチする必要があります。
これによって Body Expression アクションが作成されます。このアクションを使用してポーズをトラッキングし、指定したポーズとの一致を Unity MARS が検出したときにイベントを発動することができます。
Body Expression アクションの Inspector ウィンドウでは、以下の値を設定できます。
プロパティ | 説明 |
---|---|
Create Body Pose | このボタンをクリックすると、Unity MARS の別のウィンドウが開き、アバターのマッスル値を変更してポーズを作成することができます。 |
Angle Tolerance | ボディメンバーと必要なポーズとの間の角度を指します。通常、この値は 30 度から 60 度の範囲内にする必要があります。 この値が 0 の場合、トラッキング対象のアバターのメンバーとポーズが完全に同じでなければ一致しないことを意味します。シミュレーションビューではうまくいくかもしれませんが、ポーズのトラッキングによってもたらされる不正確さを考えると、デバイスビルドではトラッキングに失敗する可能性が高くなります。 |
Scale To Match Height | このオプションを有効にすると、アプリケーションでトラッキングされる内部のボディリグが、トラッキング対象の人に合わせてスケールされます。 |
Trigger Events | ボディポーズの配列と、発動するイベントのリストです。ポーズが一致したときにイベントを呼び出すことができます。以下のオプションがあります。 - Body Pose: 現在トラッキングされている人に対して照合するデータ。 - Triggering Event: ボディポーズが一致したときに呼び出すメソッドのリスト。 |
Body Pose ツール
人のポーズを照合するには、トラッキング対象のアバターと照らして比較するデータを作成する必要があります。そのためには、Body Pose ツールを使用します。
Body Pose ツールは、人であるアニメーターを含むゲームオブジェクトや、アニメーターの子をどれか選択したときに表示される小さなユーティリティです。ノート: 選択したアバターボディのスキンメッシュレンダラーが無効になっている場合、Body Pose ツールは表示されません。Body Pose ツールを使用すると、Unity のあらゆる場所、例えば Timeline や Avatar Editor ツール、シーンビュー、現在の合成ボディでポーズを抽出することができます。
このツールを使用すると、以下のことができます。
- 現在選択されているヒューマノイドアバターへのポーズのロード
- デフォルトのマッスル値へのポーズのリセット
- アバターを T ポーズにする
- 現在のポーズを保存する
このツールは、現在選択されているビュー (シミュレーションビューまたはシーンビュー) でのみ利用可能です。
ポーズの作成
ポーズを作成するには、Body Expression アクションの Inspector で Create Body Pose ボタンをクリックします。アバターエディターシーンが開いたら、マッスル値を編集して照合するポーズを作成できます。作成したポーズに問題がなければ、Save ボタンをクリックしてポーズの保存先を選択します。
このセクションですでに触れたように、ポーズは、Unity 内の任意の場所から Body Pose ツールを使用してデータを抽出し、変更を加えることで作成することもできます。ポーズの抽出元となるヒューマノイドアバターを選択し、Body Pose ツールウィンドウの Save ボタンをクリックします。
ポーズのロード
すでにある保存済みのポーズに似たポーズを作成したい場合は、そのポーズを新しいアバターにロードし、変更を加えてから、新しいポーズとして保存することができます。ポーズをロードするには、そのロード先となるアバターを選択します。Body Pose ツールが、現在のシーンビューに表示されます。そのポーズを Body Pose フィールドにドラッグアンドドロップし、Load をクリックすれば完了です。
ボディポーズのデータ
Unity では、ボディポーズが Body Pose Data タイプとして保存され、そこには、現在トラッキングされているアバターとポーズを比較するために必要なデータがすべて含まれます。ポーズがどのようなものか確認するには、任意の Body Pose Data アセットを選択し、Inspector でそのアバターを可視化します。
ポーズの変更
ポーズを保存した後、そのポーズの特定のマッスルに変更を加えることで、さらにポーズを修正することができます。ポーズを選択し、スライダーを左右に動かすと、ポーズがどのように変化するかが可視化されます。変更内容に問題がなければ、Apply ボタンをクリックしてそれらを保存します。
選択可能なボディメンバー
トラッキングしたいポーズが、必ずしもすべてのボディメンバーのトラッキングを必要としない場合があります。例えば、座った姿勢をトラッキングする場合、両手の位置や頭の角度を知る必要はありません。
その場合は、トラッキングしたいボディメンバーを、Body Pose Data の Inspector で選択することができます。
最終的な考察
これまで見てきたように、Unity MARS のボディトラッキングを使用すると、トラッキング対象の体に仮想的なアイテムをアタッチしたり、ヒューマノイドアバター全体を重ね合わせたりすることができます。
独自に作成したポーズに対してトラッキング対象のアバターを照合する必要があるときは、Unity 内のどこからでも Body Pose ツールを使用して、ポーズをロード、保存、変更することができます。
ノート: トラッキング対象のポーズを可視化したい場合、Match Body Pose アクションと Body Expression アクションを併用する必要があります。トラッキング対象のヒューマノイドの上にアバターを一切レンダリングすることなくポーズを照合するしたい場合があるためです。
Synthetic Body
従来、混合現実 (MR) コンテンツのオーサリングは、ビルド、デバイスへの展開、テスト、イテレーションに多くの時間を要していました。Unity MARS では、アプリケーションのビルドと展開を行わなくても、シミュレーションビューで体のシミュレーションを行い、オーサリングしたコンテンツと照合することができます。MARS Panel から Synthetic Body (合成ボディ) を作成して実際の人のシミュレーションを行い、それに対してコンテンツをテストすることが可能です。
合成ボディの設定できるパラメーターは、以下のように複数あります。
- Playable フィールドからボディのアニメーションを選択する。
- アニメーションを再生、一時停止、停止する。
- Timeline で現在のアニメーションを開く。
- 後で Body Expression アクションを使用して照合を行うために現在のポーズを保存する。
ボディトラッキングの例
このページに書かれていることをすべて読み終えていれば、Unity MARS でのボディトラッキング、ボディランドマーク、アバターポーズ照合についての理解が深まったことでしょう。このセクションでは、簡単なボディポーズトラッキングの例を紹介します。内容は以下のとおりです。
- アニメーションからポーズを抽出する
- シミュレーションビューでポーズトラッキングをテストする
- デバイスでアプリケーションを実行する
このセクションを終了すると、人の動きに合わせてアバターを表示するシンプルな MARS アプリケーションが完成します。ボディポーズと定義したポーズとが一致すると、仮想ヒューマノイドの色が青色に変化します。
アニメーションからのポーズの抽出
ボディポーズ照合の最初のステップは、比較するポーズデータを用意することです。最も簡単な方法は、合成ボディからポーズを抽出することです。合成ボディのアニメーションを一時停止し、そのポーズを保存します。
より正確にポーズを選択したい場合は、合成されたボディの Inspector ウィンドウから Timeline を開き、スライダーを使って特定のフレームを選択します。終了したら、Save ボタンをクリックしてポーズの名前を入力します。
抽出したポーズのシミュレーションビューでのテスト
ポーズ照合に使用するアバターを設定する準備が整いました。この設定は、以下の手順に従って行います。
- MARS パネルから Match Body Pose アクションと Body Expression アクションを使用してボディプロキシを作成します。
- Default Body Rig ゲームオブジェクトを削除します。
- ヒューマノイドアバターをボディプロキシの子としてアタッチします。
Match Body Pose アクションのアニメーターを、今アタッチしたアバターに設定します。
このスクリプトをメインカメラにアタッチします。
public class TestPose : MonoBehaviour { public GameObject objToColor; public void Colorblue() { objToColor.GetComponent<Renderer>().sharedMaterial.color = Color.blue; Debug.Log("Matched pose!"); } }
Main Camera の Inspector ウィンドウで、
TestPose
コンポーネントのobjToColor
変数を、アバターボディのスキンメッシュレンダラー (または、ポーズが一致したときに青色にしたい任意のレンダラー) に設定します。Body Expression アクションの Inspector で、トリガーイベントを作成し、前の手順で作成した保存済みのボディポーズをアタッチします。次に、そのトリガーイベントにカメラゲームオブジェクトをドラッグアンドドロップし、
TestPose
クラスのColorBlue()
メソッドを選択します。
これを再生モードとシミュレーションモードの両方でテストしたい場合は、Editor And Runtime でイベントが実行されるように設定されている必要があります。
トラッキング対象のポーズのビルドとテスト
アニメーションから作成したボディポーズと照合するためのボディプロキシが準備できたので、アプリケーションをテストしてデバイスで実行してみましょう。
シミュレーションビューで 再生 ボタンを押すと、仮想アバターが合成ボディに追従することがわかります。合成ボディのポーズが選択したポーズと一致すると、仮想アバターが青色に変わります。
最後に、プロジェクトをデバイスに対してビルドしてテストしてみましょう。トラッキング対象の人のポーズと、作成したポーズとの一致が検出されると、アバターの色が青に変わります。
ノート: ポーズを一致させることができない場合は、Body Expression アクションの Inspector で許容角度を調整してください。不意に一致するようになった場合は、値を下げます。一致しない場合は、値を大きくします。許容角度は 30 度から 35 度程度がお勧めです。大きな値を入力すると、ポーズが一致しやすくなります。小さい値を入力すると、より正確にポーズを照合する必要があります。