Руководство разработчика дополненных лиц для AR Foundation

Узнайте, как использовать Augmented Faces для рендеринга ресурсов поверх человеческих лиц в вашем собственном приложении.

Предпосылки

Прежде чем продолжить, убедитесь, что вы понимаете основные концепции AR и как настроить сеанс ARCore .

Обнаружение лиц

Лица представлены объектами ARFace , которые создаются, обновляются и удаляются с помощью ARFaceManager . Один раз за кадр ARFaceManager вызывает событие facesChanged , содержащее три списка : лица, которые были добавлены, лица, которые были обновлены, и лица, которые были удалены с момента последнего кадра. Когда ARFaceManager обнаруживает лицо на сцене, он создает префаб с прикрепленным компонентом ARFace для отслеживания лица. Prefab можно оставить null .

Чтобы настроить ARFaceManager , создайте новый игровой объект и добавьте к нему ARFaceManager .

Face Prefab — это префаб, созданный в центральной позе лица. Maximum Face Count представляет собой максимальное количество лиц, которые можно отследить.

Доступ к обнаруженным лицам

Получите доступ к обнаруженным лицам через компонент ARFace , который прикреплен к префабу лица. ARFace предоставляет вершины, индексы, нормали вершин и координаты текстуры.

Части обнаруженного лица

Augmented Faces API предоставляет центральную позу, три позы области и трехмерную сетку лица.

Центральная поза

Центральная поза, которая отмечает центр головы пользователя, является исходной точкой префаба, ARFaceManager . Он расположен внутри черепа, позади носа.

Оси центральной позы следующие:

  • Положительная ось X (X+) указывает на левое ухо.
  • Положительная ось Y (Y+) направлена ​​вверх от лица.
  • Положительная ось Z (Z+) указывает на центр головы.

Регион позы

Расположенные на левом лбу, правом лбу и кончике носа области позы отмечают важные части лица пользователя. Позы региона следуют той же оси, что и центральная поза.

Чтобы использовать позы региона, ARFaceManager подсистему ARFaceManager к ARCoreFaceSubsystem и используйте subsystem.GetRegionPoses() для получения информации о позе для каждого региона. Пример того, как это сделать, см. в примере использования Unity на GitHub.

3D лицевая сетка

Сетка лица состоит из 468 точек, составляющих человеческое лицо. Он также определяется относительно центральной позы.

Чтобы визуализировать сетку лица, прикрепите ARFaceMeshVisualizer к префабу Face Prefab . ARFaceMeshVisualizer сгенерирует сетку, соответствующую обнаруженному лицу, установив ее в качестве Mesh в прикрепленных MeshFilter и MeshCollider . Используйте MeshRenderer , чтобы установить Material , используемый для рендеринга лица.

AR Default Face Prefab отображает материал по умолчанию для обнаруженных сеток лица.

Выполните следующие действия, чтобы начать использовать лицо AR по умолчанию:

  1. Настройте ARFaceManager .
  2. На вкладке Hierarchy используйте + > XR > AR Default Face , чтобы создать новый объект лица. Этот объект является временным и может быть удален после создания префаба лица.

  3. Получите доступ к AR Default Face в Инспекторе.

  4. Перетащите только что созданный AR Default Face со вкладки Hierarchy в окно Project Assets , чтобы создать Prefab .

  5. Установите только что созданный префаб в качестве префаба лица в поле ARFaceManager Face Prefab ARFaceManager.

  6. На вкладке Hierarchy удалите объект лица, так как он больше не нужен.

Доступ к отдельным вершинам сетки лица

Используйте face.vertices для доступа к позициям вершин меша лица. Используйте face.normals для доступа к нормалям соответствующих вершин.

Визуализируйте отдельные вершины сетки лица

Вы можете использовать Blender , чтобы легко просмотреть порядковые номера, которые соответствуют вершинам сетки лица:

  1. Откройте Blender и импортируйте canonical_face_mesh.fbx из GitHub.
  2. Перейдите к Edit > Preferences > Interface .
  3. В меню « Display » выберите « Developer Extras ».

  4. Выберите грань, щелкнув ее в окне 3D-просмотра, и нажмите Tab, чтобы войти в режим редактирования.

  5. Откройте раскрывающееся меню рядом с окном просмотра Overlays и выберите Indices .

    Индексы сетки лица Blender

  6. Выделите вершину, номер индекса которой вы хотите определить. Чтобы выделить все вершины, используйте Select > All .