了解如何使用增强面在您自己的应用中将资源呈现在人脸之上。
前提条件
确保您了解基本 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 Prefab。ARFaceMeshVisualizer
将生成与检测到的人脸对应的 Mesh
,并在连接的 MeshFilter
和 MeshCollider
中将其设置为网格。使用 MeshRenderer
设置用于渲染人脸的 Material
。
AR Default Face Prefab 会在检测到的人脸网格上渲染默认材质。
请按以下步骤开始使用 AR 默认人脸:
- 设置
ARFaceManager
。 在 Hierarchy 标签页中,依次选择 + > XR > AR Default Face 来创建新的人脸对象。此对象是临时对象,在您创建人脸预制件后可以删除。
在检查器中访问 AR Default Face。
将新创建的 AR 默认面从 Hierarchy 标签页拖到 Project Assets 窗口以创建预制件。
在
ARFaceManager
的 Face Prefab 字段中,将新创建的 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。