Przewodnik dla programistów dotyczący aplikacji Augmented Faces dla AR Foundation

Dowiedz się, jak używać rozszerzonych twarzy do renderowania zasobów na twarzach ludzi w Twojej aplikacji.

Wymagania wstępne

Zanim przejdziesz dalej, upewnij się, że rozumiesz podstawowe zagadnienia związane z rozszerzoną rzeczywistością oraz że wiesz, jak skonfigurować sesję ARCore.

Wykrywanie twarzy

Twarze są reprezentowane przez obiekty ARFace, które są tworzone, aktualizowane i usuwane przez ARFaceManager. Raz na każdy obraz ARFaceManager wywołuje zdarzenie facesChanged, które zawiera 3 listy: dodane twarze, zaktualizowane twarze i usunięte twarze od ostatniego obrazu. Gdy usługa ARFaceManager wykryje twarz w scenie, utworzy instancję szablonu z dołączonym komponentem ARFace, który będzie śledzić twarz. Gotowy element może być pusty null.

Aby skonfigurować obiekt ARFaceManager, utwórz nowy obiekt gry i dodaj do niego obiekt ARFaceManager.

Face Prefab to prefab utworzony w położeniu środkowym twarzy. Maximum Face Count to maksymalna liczba twarzy, które można śledzić.

Dostęp do wykrytych twarzy

Dostęp do wykrytych twarzy uzyskujesz za pomocą komponentu ARFace, który jest dołączony do wstępnie zdefiniowanej twarzy. ARFace zawiera wierzchołki, wskaźniki, normalne wierzchołków i współrzędne tekstury.

Części wykrytej twarzy

Interfejs Augmented Faces API udostępnia pozę środkową, 3 pozy regionu i siatkę 3D twarzy.

Pozycja środkowa

Pozycja środkowa, która oznacza środek głowy użytkownika, jest punktem początkowym prefabrykowanego modelu instancjonowanego przez ARFaceManager. Znajduje się ona w czaszce, za nosem.

Osie pozycji środkowej:

  • dodatnia oś X (X+) skierowana jest w kierunku lewego ucha,
  • Dodatnia oś Y (Y+) jest skierowana w górę.
  • Dodatnia oś Z (Z+) wskazuje na środek głowy

Pozy regionalne

Znajdują się one na lewym i prawym czole oraz na czubku nosa. Oznaczają one ważne części twarzy użytkownika. Pozy regionu mają tę samą orientację osi co pozy środkowe.

Aby używać poz w regionie, przerzuć w dół podsystem ARFaceManager do poziomu ARCoreFaceSubsystem i użyj subsystem.GetRegionPoses(), aby uzyskać informacje o pozach dla każdego regionu. Przykładowy sposób wykonania znajdziesz w przykładowym pliku kodu Unity na GitHubie.

Siatka 3D twarzy

Siatka twarzy składa się z 468 punktów, które tworzą ludzką twarz. Jest ona również definiowana względem pozycji środkowej.

Aby zwizualizować siatkę twarzy, dodaj ARFaceMeshVisualizer do Face Prefab. ARFaceMeshVisualizer wygeneruje Mesh odpowiadający wykrytej twarzy, ustawiając go jako siatkę w dołączonych MeshFilterMeshCollider. Użyj MeshRenderer, aby ustawić Material, którego używa się do renderowania twarzy.

AR Default Face Prefab renderuje domyślny materiał na wykrytych siatkach twarzy.

Aby zacząć korzystać z domyślnej twarzy AR:

  1. Skonfiguruj ARFaceManager.
  2. Na karcie Hierarchy kliknij kolejno + > XR > AR Default Face, aby utworzyć nowy obiekt twarzy. Ten obiekt jest tymczasowy i może zostać usunięty po utworzeniu szablonu twarzy.

  3. Otwórz AR Default Face w Inspektorze.

  4. Aby utworzyć gotowy element, przeciągnij nowo utworzoną opcję Domyślna twarz AR z karty Hierarchy do okna Project Assets.

  5. W polu Face Prefab obiektu ARFaceManager ustaw nowo utworzony szablon jako szablon twarzy.

  6. Na karcie Hierarchy usuń obiekt twarzy, ponieważ nie jest już potrzebny.

Dostęp do poszczególnych wierzchołków siatki twarzy

Aby uzyskać dostęp do pozycji wierzchołków siatki twarzy, użyj face.vertices. Aby uzyskać dostęp do odpowiednich normalnych wierzchołków, użyj funkcji face.normals.

wizualizować poszczególne wierzchołki siatki twarzy;

Za pomocą programu Blender możesz łatwo wyświetlić numery indeksów odpowiadające wierzchołkom siatki powierzchni:

  1. Otwórz Blendera i zaimportuj canonical_face_mesh.fbx z GitHuba.
  2. Wejdź na Edit > Preferences > Interface.
  3. W menu Display kliknij Developer Extras.

  4. Wybierz twarz, klikając ją w oknie podglądu 3D, a potem naciśnij klawisz Tab, aby przejść do trybu edycji.

  5. Otwórz menu Overlays i kliknij Indices.

    Indeksy siatki twarzy w Blenderze

  6. Zaznacz wierzchołek, którego numer indeksu chcesz określić. Aby wyróżnić wszystkie wierzchołki, użyj Select > All.