증강현실(Augmented Reality)/ARCore 사용하기

06. 얼굴 추적하기(Face Tracking)

danmujicat 2023. 9. 28. 21:15

AR 개발을 위한 프로젝트를 준비하기 위해 Window | Package Manangement 메뉴를 선택하여  Package Manangement 창을 열고 AR 장치 플러그인을 설치합니다.

1장의  ARCore 개발을 위한 환경 구축하기 참고하세요

더보기
  •  AR 장치용 XR plugins 설치하기
  • ARCore XR Plugin 설치하기
  • AR Foundation 패키지 설치하기
  • Input System 설치하기
  • Androd 플랫폼의 ARcore 설정하기
  • Player 설정하기

 

 

1. 기본 AR 장면 만들기

① File | Save As 메뉴를 선택하여  Assets/Scenes/ 폴더에 이름을 BasicARScene으로  저장합니다.

② Hierarchy 창에서 Main Camera를 삭제합니다.

③ GameObject |  XR | AR Session 메뉴를 선택하여 Hierarchy 창에 AR Session을 추가합니다.

④ GameObject |  XR | XR Origin  메뉴를 선택하여 Hierarchy 창에 XR Origin 을 추가합니다.

 

2.  AR 장면에 기본 얼굴 오브젝트 출력하기

① Hierarchy 창에서 XR Origin오브젝트를 선택하고 Inspector 창에 Add Component 버튼을 클릭하여 AR Face Manager 컴포넌트를 추가합니다. 

② Hierarchy 창에서 GameObject | XR | AR Default Face을 선택하여 오브젝트를 추가합니다.

③ Hierarchy 창에서 Project 창의 Prefabs 폴더로 AR Default Face  오브젝트를 드래그하여 프리팹으로 만듭니다.

 Hierarchy 창에서  AR Default Face   오브젝틀르 삭제합니다.

⑤  Hierarchy 창에서 XR Origin 오브젝트를 선택하고 Inspector 창에서  AR Face Manager 의 Face Prefab에 AR Default Face  프리팹을 설정합나다.

 

Hierarchy 창에서 XR Origin 하위의 Main Camera 를 선택하고 Inspector 창에서 AR Camera Manager 컴포넌트의 Facing Direction의 속성값을 User로 설정합니다.

⑦ 실행하기

 

3.  얼굴 마스크 변경하기

3.1 UI 버튼 만들기

  메인 메뉴에서  GameObject | UI | Canvas를 선택하여 Canvas를 추가합니다.

② 메인 메뉴에서  GameObject | UI | Button 을 선택하여 Canvas를 하위에 추가하고 하위에 Text의 Text속성은 Change Face로 입력합니다.

 

3.2 얼굴 마스트 추가하기

    하이러키 창의 XR Origin을 선택하고 인스펙터 창에서 Add Component 버튼을 클릭하여 FaceSwap.cs를 추가합니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.ARFoundation;

public class FaceSwap : MonoBehaviour
{
    private ARFaceManager faceManager;

    public List<Material> faceMaterials = new List<Material>();

    private int faceMaterialIndex = 0;
    
    void Start()
    {
        faceManager = GetComponent<ARFaceManager>();
    }

    public void SwitchFace()
    {
        foreach (ARFace face in faceManager.trackables)
        {
            face.GetComponent<Renderer>().material = faceMaterials[faceMaterialIndex];
        }

        faceMaterialIndex++;

        if(faceMaterialIndex == faceMaterials.Count)
        {
            faceMaterialIndex = 0;
        }
    }
}

②  추가한 FaceSwap.cs  스크립트의 Face Materials 속성에 원하는 머티리얼을  만든 후  항목에 추가 설정합니다.

Textures.unitypackage
3.73MB

 

하이러키 창에 Canvas=>Button를 선택하고 인스펙터 창에 OnClick() 함수에 XR Orign을 설정하고 함수는 FaceSwap  스크립트의 SwitchFace() 메소드를 설정합니다.

  실행하기