AR Foundation 增强人脸开发者指南

了解如何使用增强面在您自己的应用中将资源呈现在人脸之上。

前提条件

确保您了解基本 AR 概念以及如何配置 ARCore 会话,然后再继续。

检测人脸

人脸由 ARFace 对象表示,这些对象由 ARFaceManager 创建、更新和移除。针对每个帧,ARFaceManager 会调用 facesChanged 事件,其中包含三个列表:添加的人脸、已更新的人脸,以及自上一帧后移除的人脸。当 ARFaceManager 在场景中检测到人脸时,它会实例化一个 Prefab,并附加一个 ARFace 组件来跟踪人脸。Prefab 可以留在 null 上。

若要设置 ARFaceManager,请创建一个新的游戏对象,并为其添加 ARFaceManager

Face Prefab 是在人脸中心位置实例化的预制件。Maximum Face Count 表示可以跟踪的面孔数量上限。

访问检测到的面孔

通过连接到人脸预制件的 ARFace 组件访问检测到的人脸。ARFace 提供顶点、索引、顶点法线和纹理坐标。

检测到的面部的组成部分

Augmented Faces API 提供中心姿势、三个区域姿势和 3D 人脸网格。

中心姿势

中心姿势(用于标记用户头部的中心)是通过 ARFaceManager 实例化的 Prefab 的起点。位于头骨内,鼻子后面。

中心位置方向的轴如下所示:

  • 正 X 轴 (X+) 指向左耳
  • Y 轴正值 (Y+) 朝上指向面部
  • Z 轴正值 (Z+) 指向头部中心

区域姿势

这些部位分别位于左前额、右额头和鼻尖,代表用户面部的重要部位。区域位置方向位置方向与中心位置方向相同。

如需使用区域姿势,请将 ARFaceManager 的子系统降级为 ARCoreFaceSubsystem,并使用 subsystem.GetRegionPoses() 获取每个区域的姿势信息。如需查看有关如何执行此操作的示例,请参阅 GitHub 上的 Unity 用法示例

3D 人脸网格

人脸网格由 468 个点组成,这些点构成了人脸。它也是相对于中心位置方向定义的。

如需直观呈现人脸网格,请将 ARFaceMeshVisualizer 附加到 Face PrefabARFaceMeshVisualizer 将生成与检测到的人脸对应的 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 窗口以创建预制件

  5. ARFaceManagerFace Prefab 字段中,将新创建的 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