了解如何在您自己的应用中使用增强人脸在人脸上渲染资源。
前提条件
确保您了解 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 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 字段中,将新创建的预设件设为人脸预设件。在“Hierarchy”标签页中,删除不再需要的脸部对象。
访问面网格的各个顶点
使用 face.vertices
访问面网格的顶点位置。使用 face.normals
访问相应的顶点法线。
可视化面网格的各个顶点
您可以使用 Blender 轻松查看与面网格的顶点相对应的索引编号:
- 打开 Blender 并从 GitHub 导入
canonical_face_mesh.fbx
。 - 导航到 Edit > Preferences > Interface。
在 Display 菜单下,选择 Developer Extras。
在 3D 视口中点击面将其选中,然后按 Tab 键进入编辑模式。
打开 Overlays 视口旁边的下拉菜单,然后选择 Indices。
突出显示要确定其索引编号的顶点。如需突出显示所有顶点,请使用 Select > All。