拡張顔を使用して、独自のアプリで人の顔の上にアセットをレンダリングする方法を学びます。
前提条件
続行する前に、基本的な 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 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 を使用します。