拡張顔を使用して、独自のアプリで人の顔の上にアセットをレンダリングする方法を学びます。
前提条件
続行する前に、AR の基本コンセプトと ARCore セッションを構成する方法を理解してください。
顔の検出
顔は ARFace
オブジェクトで表され、ARFaceManager
によって作成、更新、削除されます。フレームごとに、ARFaceManager
は 3 つのリスト(追加された顔、更新された顔、最後のフレーム以降に削除された顔)を含む facesChanged
イベントを呼び出します。ARFaceManager
はシーン内の顔を検出すると、ARFace
コンポーネントがアタッチされたプレハブをインスタンス化して、顔をトラッキングします。Prefab は null
のままにします。
ARFaceManager
をセットアップするには、新しいゲーム オブジェクトを作成して ARFaceManager
を追加します。
Face Prefab は、顔の中心のポーズでインスタンス化されたプレハブです。Maximum Face Count は、追跡できる顔の最大数を表します。
検出された顔へのアクセス
顔のプレハブにアタッチされた ARFace
コンポーネントを使用して、検出された顔にアクセスします。ARFace
は、頂点、インデックス、頂点法線、テクスチャ座標を提供します。
検出された顔の部分
Augmented Faces API は中心ポーズ、3 つのリージョン ポーズ、3D フェイス メッシュを提供します。
中央のポーズ
ユーザーの頭の中心を示すセンターポーズは、ARFaceManager
によってインスタンス化された Prefab の原点です。頭蓋骨の内側、鼻の後ろにあります。
中央ポーズの軸は次のとおりです。
- 正の X 軸(X+)は左耳を指しています
- 正の Y 軸(Y+)は顔から上向きになります
- 正の Z 軸(Z+)は頭の中央を指しています
リージョン ポーズ
左側の額、右側の額、鼻先に配置されるリージョン ポーズは、ユーザーの顔の重要な部分をマークします。領域のポーズは、中心のポーズと同じ軸の向きに従います。
領域のポーズを使用するには、ARFaceManager
のサブシステムを ARCoreFaceSubsystem
にダウンキャストし、subsystem.GetRegionPoses()
を使用して各領域のポーズ情報を取得します。この方法の例については、GitHub の Unity の使用例をご覧ください。
3D 顔メッシュ
フェイスメッシュは、人間の顔を構成する 468 個のポイントで構成されています。また、中央のポーズを基準として定義されます。
フェイスメッシュを可視化するには、Face Prefab に ARFaceMeshVisualizer
をアタッチします。ARFaceMeshVisualizer
は、検出された顔に対応する Mesh
を生成し、接続された MeshFilter
と MeshCollider
のメッシュとして設定します。MeshRenderer
を使用して、顔のレンダリングに使用する Material
を設定します。
AR Default Face Prefab は、検出された顔メッシュにデフォルトのマテリアルをレンダリングします。
AR のデフォルト フェイスの使用を開始する手順は次のとおりです。
ARFaceManager
を設定します。[Hierarchy] タブで、+ > XR > AR Default Face を使用して新しい顔オブジェクトを作成します。このオブジェクトは一時的なもので、フェイス プレハブを作成したら削除できます。
インスペクタで AR Default Face にアクセスします。
新しく作成した AR デフォルト フェイスを [Hierarchy] タブから [Project Assets] ウィンドウにドラッグして、Prefab を作成します。
新しく作成した Prefab を、
ARFaceManager
の Face Prefab フィールドで Face Prefab として設定します。[Hierarchy] タブで、不要になった顔オブジェクトを削除します。
フェイスメッシュの個々の頂点にアクセスする
face.vertices
を使用して、面メッシュの頂点の位置にアクセスします。face.normals
を使用して、対応する頂点法線にアクセスします。
顔メッシュの個々の頂点を可視化する
Blender を使用すると、フェイスメッシュの頂点に対応するインデックス番号を簡単に確認できます。
- Blender を開き、GitHub から
canonical_face_mesh.fbx
をインポートします。 - Edit > Preferences > Interface に移動します。
[Display] メニューで [Developer Extras] を選択します。
3D ビューポートで顔をクリックして選択し、Tab キーを押して編集モードに入ります。
Overlays ビューポートの横にあるプルダウン メニューを開き、[Indices] を選択します。
インデックス番号を確認する頂点をハイライト表示します。すべての頂点をハイライト表示するには、Select > All を使用します。