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

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

前提条件

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

顔の検出

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

ARFaceManager を設定するには、新しいゲーム オブジェクトを作成し、ARFaceManager を追加します。

Face Prefab は、顔の中央ポーズでインスタンス化されたプレハブです。Maximum Face Count は、追跡できる顔の最大数を表します。

検出された顔にアクセスする

検出された顔には、Face Prefab に接続されている ARFace コンポーネントを介してアクセスします。ARFace は、頂点、インデックス、頂点法線、テクスチャ座標を提供します。

検出された顔の一部

Augmented Faces API は、中央のポーズ、3 つの領域のポーズ、3D 顔メッシュを提供します。

中央のポーズ

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

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

  • 正の X 軸(X+)は左耳を指しています
  • 正の Y 軸(Y+)は顔の外側を上向き
  • 正の Z 軸(Z+)は頭の中央を指します。

リージョン ポーズ

左側の額、右側の額、鼻先に配置されるリージョン ポーズは、ユーザーの顔の重要な部分をマークします。リージョンのポーズは、中央のポーズと同じ軸の向きになります。

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

3D 顔メッシュ

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

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

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

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

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

  3. インスペクタで AR Default Face にアクセスします。

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

  5. 新しく作成した Prefab を、ARFaceManagerFace Prefab フィールドで Face 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 を選択します。

    Blender の顔メッシュ インデックス

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