AR Foundation 增强人脸开发者指南

了解如何在您自己的应用中使用增强人脸在人脸上渲染资源。

前提条件

确保您了解 AR 基础概念 以及如何在继续之前配置 ARCore 现场录像

检测人脸

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

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

Face Prefab 是在人脸中心姿势处实例化的 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 字段中,将新创建的预设件设为人脸预设件。

  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