이번에는 간단하게 포톤 Fusion 1을 사용한 페이셜 트래킹 및 IOBT 연동법을 포스팅 하겠습니다.
==> 셀레스티아 전용 페이셜 트래킹 패치파일(페이셜 트래킹이 필요 없다면 결제할 필요가 없습니다.)
==>페이셜 트래킹 관련 Blend Shape값.
==>메타에서 제공해주는 페이셜 트래킹 관련 Docs
일단 이번 포스팅에서는 과거에 제가 프로젝트를 진행하면서 사용했던 외주를 맡겼던 아바타를 사용하겠습니다.
외주를 맡겼던 아바타는 셀레스티아 기반으로 제작이 되었으므로 거의 동일한 뼈대를 가지고 있습니다.
1. 페이셜 트래킹 관련(페이셜 트래킹이 필요없는 분이라면 2번으로 넘어가 주시면 되겠습니다)
첫번째 링크에 첨부한 셀레스티아 페이셜 트래킹 파일을 받아 셀레스티아 아바타의 blend shape값을 패치 해줍니다.
==>셀레스티아 아바타의 Body 오브젝트에 Skinned Mesh Renderer에 페이셜 트래킹 관련 Blend Shape값들이 들어가 있습니다.
==>이제 저 Body 오브젝트에 마우스 우클릭 후 Movement Samples -> Face Tracking -> ARKit Face(duplicate mapping off)를 추가해 줍니다.
==>그러면 Body 오브젝트에 OVR Face Expressions 와 AR Kit Face 가 추가된 모습을 볼 수 있습니다.
==>만약에 링크에서 페이셜 트래킹 관련 파일을 구매하여 AR Kit Face의 컴포넌트를 보면 저렇게 Facial Tracking값이 들어가 있는것을 볼 수 있습니다.
==>사실 저는 이 페이셜 트래킹관련을 처음 만져 보기 때문에 직접 위에 첨부 해 놓은 링크를 보고, 직접 유니티를 실행 하면서 위 사진과 같이 값을 넣어놨습니다. 그래서 제가 위에 첨부해 놓은 사진 그대로 값을 넣을 필요가 없습니다. 따로 페이셜 트래킹 관련 작업을 해 보신분은 올바른 값을 넣어주시길 바랍니다.
==> 네트워크 오브젝트 위치 외에 다른 프로퍼티 값들 넘겨주는 방법 (Photon Docs)
포톤 서버를 이용하여 Blend Shape값들을 넘겨주기위한 컴포넌트
==>Update 문 및 FixedUpdateNetwork에 내가 넘겨줄 블랜드 쉐이프 값들을 넘겨준다.
==>혹시 모르니 컴포넌트도 첨부하였습니다.
==> 셀레스티아 아바타에 방금 작성한 컴포넌트를 추가하고 Mesh Renderer에 Body오브젝트를 넣어줍니다.
이러면 페이셜 트래킹 관련 서버 세팅은 완료입니다.
2.1 아바타 움직임 서버(포톤 퓨전 1) 동기화
이제 로컬에서만 움직임을 보여주는 것이 아닌 포톤 퓨전 1을 사용해 아바타의 움직임을 다른 유저에게도 보여지게 하도록 하겠습니다.
아바타의 보면 위 사진과 같이 아바타의 각 부위별로 뼈대가 구성이 되어있는걸 볼 수 있습니다. 이제 저희가 해야 할 일은 네트워크를 통해 각 조인트마다 Network Transform을 설정 해주어 동기화를 해주어야 합니다.
==>주로 몸의 주요 부위들(엉덩이, 가슴, 어깨, 팔, 다리등)에 Network Transform 컴포넌트를 넣어주었습니다.
2.2 IOBT서버 동기화
==>일단 먼저 Retargeting Layer 컴포넌트와 Rig Builder 컴포넌트를 비활성화 해줍니다.
==>제 프로젝트에서는 호스트(방장)만 IOBT를 사용하기 때문에 현재 사용자가 호스트 일때만 IOBT를 활성화하게 만들어 줍니다. 만약에 클라이언트(참여자) 입장에서도 IOBT를 활성화 하게 된다면 둘이 충돌이 나 클라이언트 입장에서 아바타를 보면 아바타가 깨져 이상한 상태로 보일 것입니다.
자 이제 세팅이 완료되고 호스트와 클라이언트가 만나보겠습니다.
==>이런식으로 클라이언트 입장에서 호스트 아바타를 보면 IOBT를 적용한 모습과 만약 페이셜 트래킹 기능을 사용하였다면 페이셜 트래킹도 전달이 되는 모습이 보입니다.
그러면 이제 IOBT관련 포스팅은 여기서 마치겠습니다! 긴 글 봐주셔서 감사합니다.
글 내용 중에 틀린 것이 있거나 궁금한 것이 있다면 댓글 남겨주세요!