AR Foundation 向け拡張顔デベロッパー ガイド

拡張顔を使って、アプリ内で人間の顔の上にアセットをレンダリングする方法を学びます。

前提条件

続行する前に、AR の基本的なコンセプトARCore セッションを構成する方法を理解しておいてください。

顔の検出

顔は ARFace オブジェクトで表されます。これらのオブジェクトは、ARFaceManager によって作成、更新、削除されます。ARFaceManager はフレームごとに 1 回、facesChanged イベントを呼び出します。このイベントには、追加された顔、更新された顔、最後のフレーム以降に削除された顔の 3 つのリストが含まれます。ARFaceManager はシーン内の顔を検出すると、顔をトラッキングするために ARFace コンポーネントがアタッチされた Prefab をインスタンス化します。プレハブは null のままでかまいません。

ARFaceManager をセットアップするには、新しいゲーム オブジェクトを作成して、それに ARFaceManager を追加します。

Face Prefab は、顔の中心のポーズでインスタンス化される Prefab です。Maximum Face Count は、トラッキング可能な顔の最大数を表します。

検出された顔へのアクセス

検出された顔にアクセスするには、顔プレハブにアタッチされている ARFace コンポーネントを使用します。ARFace は、頂点、インデックス、頂点法線、テクスチャ座標を提供します。

検出された顔の一部

Augmented Faces API は、中心ポーズ、3 つのリージョン ポーズ、3D 顔メッシュを提供します。

中央のポーズ

中心ポーズ(ユーザーの頭の中心を示す)は、ARFaceManager によってインスタンス化されたプレハブの原点です。頭蓋骨の内部、鼻の後ろにあります。

中央のポーズの軸は次のとおりです。

  • X 軸のプラス(X+)は左耳を指している
  • 正の Y 軸(Y+)は顔の外側を指している
  • 正の Z 軸(Z+)は頭の中心を指している

地域のポーズ

顔の左額、右額、鼻の先にある部位は、顔の重要な部分をマークします。領域のポーズは、中心のポーズと同じ軸の向きに従います。

リージョンのポーズを使用するには、ARFaceManager のサブシステムを ARCoreFaceSubsystem にダウンキャストし、subsystem.GetRegionPoses() を使用して各リージョンのポーズ情報を取得します。作成方法の例については、GitHub の Unity の使用サンプルをご覧ください。

3D 顔メッシュ

フェイスメッシュは、人の顔を構成する 468 個のポイントで構成されます。また、中央のポーズを基準として定義されます。

フェイスメッシュを視覚化するには、ARFaceMeshVisualizerFace Prefab にアタッチします。ARFaceMeshVisualizer は検出された顔に対応する Mesh を生成し、添付された MeshFilterMeshCollider でメッシュとして設定します。MeshRenderer を使用して、顔のレンダリングに使用する Material を設定します。

AR Default Face Prefab は、検出された顔メッシュにデフォルトのマテリアルをレンダリングします。

AR のデフォルト フェイスを使用する手順は次のとおりです。

  1. ARFaceManager を設定します。
  2. [Hierarchy] タブで、[+] > [XR] > [AR Default Face] を使用して新しい顔オブジェクトを作成します。このオブジェクトは一時的なものであり、顔プレハブを作成した後に削除できます。

  3. Inspector で AR Default Face にアクセスします。

  4. 新しく作成した AR のデフォルト フェイスを、[Hierarchy] タブから Project Assets ウィンドウにドラッグして、プレハブを作成します。

  5. ARFaceManagerFace Prefab フィールドで、新しく作成したプレハブを顔のプレハブとして設定します。

  6. 不要になった [Hierarchy] タブで、顔オブジェクトを削除します。

フェイスメッシュの個々の頂点にアクセスする

face.vertices を使用して、フェースメッシュの頂点の位置にアクセスします。face.normals を使用して、対応する頂点法線にアクセスします。

フェースメッシュの個々の頂点を可視化する

Blender を使用すると、フェイスメッシュの頂点に対応するインデックス番号を簡単に確認できます。

  1. Blender を開き、GitHub から canonical_face_mesh.fbx をインポートします。
  2. Edit > Preferences > Interface に移動します。
  3. Display メニューで Developer Extras を選択します。

  4. 3D ビューポートで顔をクリックして選択し、Tab キーを押して編集モードに入ります。

  5. Overlays ビューポートの横にあるプルダウン メニューを開き、[Indices] を選択します。

    ミキサーフェイスメッシュ インデックス

  6. インデックス番号を求める頂点をハイライト表示します。すべての頂点をハイライト表示するには、Select > All を使用します。