Search Unity

새롭게 출시된 ARKit 및 Unity와 연결된 iPhone X를 함께 사용하면 표정이 풍부하고 아름다운 캐릭터를 간편하게 제작할 수 있습니다. 장이빙 감독의 단편 애니메이션 ‘와인드업(Windup)’을 통해 놀라운 실시간 퍼피티어링(puppeteering) 기능을 살펴보세요.

Unity Labs와 ‘와인드업’ 제작진은 시네마틱 캐릭터에 대해 Unity의 실시간 얼굴 애니메이션 캡처 기능의 한계를 끌어올리기 위한 협업을 진행했습니다. 또한 블렌드 셰이프 모델링 및 리깅 작업은 Beast House Fx의 로하 허체스(Roja Huchez)에게 도움을 요청하여 보다 사실적인 표정을 구현했습니다.

제작진은 Unity 에디터에 직접 기기를 연결하여 성능을 캡처하는 로우 오버헤드 방식의 페이셜 AR 리모트(Facial AR Remote) 기능을 고안했습니다. 이 과정에서 원격 기능의 워크플로가 애니메이션 제작뿐 아니라 캐릭터 및 블렌드 셰이프 모델링과 리깅에도 매우 유용하며, Unity에서 자체 애니모지(animoji) 또는 미모지(memoji)와 같은 인터랙션을 구축하는 간소화된 방식을 제공한다는 사실을 알 수 있었습니다. 따라서 개발자가 기기에 빌드하지 않아도 에디터에서 직접 모델에 대한 반복 작업을 수행할 수 있게 되므로 개발 프로세스에 소요되는 시간과 과정이 단축됩니다.

페이셜 AR 리모트의 강점

Unity는 영화 제작을 위한 새로운 애니메이션 툴을 개발하여 실시간 애니메이션의 미래를 열 기회를 포착했습니다. 또한 AR 툴을 통한 제작에 여러 이점이 따르며, Unity의 실시간 렌더링을 계속해서 적극적으로 발전시킬 기회가 있음을 발견했습니다. 휴대폰에서 에디터로 기본 작업물과 데이터를 옮겨오자마자 우리 팀과 주변의 모든 사람들은 캐릭터를 이리저리 조종해보며 즐거워했습니다. 이 기술이 갖는 어마어마한 잠재력을 확인할 수 있었죠. 실험적으로 시작한 프로젝트가 가능성을 인정받음에 따라 페이셜 AR 리모트 및 기능 세트로 확장되었습니다.

 

Unity 팀은 개발의 민주화라는 Unity의 목표에 따라 프로젝트를 확장하기 시작했습니다. 쉽게 사용할 수 있으며 기존 모션 캡처 방식보다 편리한 AR 블렌드 셰이프 애니메이션 툴과 워크플로를 개발하고자 했습니다. 그리고 페이셜 리모트 기능을 사용하여 휴대폰에서 메시 변경을 확인하기 위해 새로운 빌드를 제작하지 않고도 에디터 내에서 블렌드 셰이프에 대한 반복 작업을 수행할 수 있는 툴을 개발할 수 있었습니다. 이 기능을 사용하면 배우의 얼굴을 캡처한 다음 Unity에 기록할 수 있습니다. 또한 이 캡처를 고정점으로 사용하여 캐릭터 모델에 대한 반복 작업을 수행하고 변경하거나, 캡처 작업을 다시 진행하지 않고도 애니메이션을 다른 캐릭터에 리타게팅할 수 있습니다. 이 워크플로는 캐릭터의 표정을 수정하고 개별 블렌드 셰이프를 미세 조정하는 데 매우 유용합니다.

페이셜 AR 리모트의 원리

페이셜 AR 리모트는 클라이언트 휴대폰 앱으로 구성되며, 스트림 리더(Stream Reader)가 Unity 에디터에서 서버 역할을 합니다. 이 클라이언트는 ARKit의 최신 기능을 사용하여 네트워크를 통해 해당 데이터를 스트림 리더 게임 오브젝트(Game Object)의 네트워크 스트림(Network Stream) 소스로 전송할 수 있는 간단한 앱입니다. 간단한 TCP/IP 소켓과 고정 크기의 바이트 스트림을 통해 기기의 블렌드 셰이프, 카메라, 헤드 포즈(head pose) 데이터의 모든 프레임이 에디터로 전송됩니다. 그런 다음 에디터가 스트림을 디코딩하고 리깅된 캐릭터를 실시간으로 업데이트합니다. 스트림 리더는 에디터가 휴대폰의 속도를 따라가지 못하는 불가피한 상황에 대비해 이전 프레임을 저장하고 조정 가능한 버퍼를 가지고 있어 네트워크 지연으로 인한 지터를 완화합니다. 이 기능은 실제 배우의 움직임을 최대한 가깝게 유지하면서 프리뷰 캐릭터의 표정을 자연스럽게 하는 데 매우 중요한 역할을 합니다. 네트워크 상태가 좋지 않은 경우 속도를 맞추기 위해 프리뷰의 프레임 수가 줄어들 수 있지만, 이 경우에도 기기의 원본 타임스탬프를 포함한 모든 데이터가 기록됩니다.

에디터에서는 스트림 데이터를 사용하여 캐릭터 프리뷰를 구동하고 애니메이션 클립을 베이크할 수 있습니다. 휴대폰의 원본 스트림을 디스크에 저장했으므로, 블렌드 셰이프를 미세 조정하는 과정에서 이 데이터를 캐릭터에 적용하여 계속 재생할 수 있습니다. 저장된 데이터는 휴대폰의 원본 스트림이기 때문에 모션을 다른 캐릭터에 리타게팅할 수도 있습니다. 만족스러운 스트림을 캡처했다면 스트림을 캐릭터에 적용할 애니메이션 클립으로 베이크할 수 있습니다. 이 기능은 제작한 클립을 다른 애니메이션처럼 Unity에서 캐릭터를 메카님(Mecanim)이나 타임라인(Timeline) 또는 그밖에 애니메이션이 사용되는 다른 방식으로 사용할 수 있기 때문에 매우 유용합니다.

‘와인드업’ 애니메이션 데모

‘와인드업’ 렌더링 기술 데모를 사전에 완성한 제작진은 이 데모의 고품질 에셋을 활용하여 애니메이션을 제작하기 시작했습니다. 초기 작업을 빠르게 끝냈기 때문에, 우리가 개발하고 있던 툴을 사용하여 충분한 시간을 들여 블렌드 셰이프 관련 작업을 반복할 수 있었습니다. 그리고 곧 지터링, 스무딩 및 셰이프 조정이 프로젝트의 주요 과제임을 발견했습니다. 지터링은 프레임 속도와 프레임 처리 지연 간의 관계를 파악하고 재생 시의 카메라 움직임을 제거함으로써 완화할 수 있었습니다. 카메라가 움직이지 않도록 하여 사용자가 블렌드 셰이프 캡처에 더욱 집중할 수 있게 되었으며, 휴대폰을 스탠드에 고정할 수 있었습니다.

블렌드 셰이프를 이해하고 ARKit의 블렌드 셰이프 앵커를 최대한 활용하기 위한 과정에서 가장 많은 반복 작업이 필요했습니다. 문서만으로 여러 셰이프의 미묘한 특성과 차이를 이해하기란 쉽지 않았습니다. 최종적인 표정은 캐릭터의 스타일 및 예상된 몇 가지 방식으로 셰이프가 결합된 결과물로 나타나기 때문입니다. 테스트 결과, 블렌드 셰이프 변경 사항의 적용을 얼굴의 일부 영역에 제한되도록 하면 눈/뺨 찡그리기 및 입꼬리 늘리기와 같은 셰이프의 표현이 개선됨을 알 수 있었습니다. 예를 들어 뺨을 찡그리더라도 아래쪽 눈꺼풀에 (거의) 영향을 미치지 않으며, 아래쪽 눈꺼풀을 찡그리더라도 뺨 부분에 (거의) 영향을 주지 않습니다. 더욱이 jawOpen 셰이프가 100%로 설정된 경우 mouthClosed 셰이프가 입술을 닫기 위한 수정 포즈라는 사실을 초반에 간과했던 실수 때문에 조절의 필요성이 더욱 커졌습니다.

스킨드 메시 렌더러(Skinned Mesh Renderer)에서 프레임별 표정을 구성하는 값을 살펴본 다음 변경함으로써 블렌드 셰이프를 적절하게 조절할 수 있었습니다. 현재 블렌드 셰이프의 값을 빠르게 높이거나 낮추고, 블렌드 셰이프의 수정 필요 여부 및 수정이 필요한 정도를 파악할 수도 있었습니다. 그 덕분에 대상 캐릭터가 핵심 포즈를 취하도록 하는 어려운 과제를 해결할 수 있었습니다. 이 데모에서는 소녀가 미소짓는 모습을 구현한 방식이 여기에 해당합니다. 특정 포즈를 구성하는 셰이프를 확인할 수 있어서 매우 도움이 되었습니다. 이 데모에서는 미소짓는 표정에 좌우 입꼬리 길이를 조정하여 셰이프를 완성하였습니다. 휴대폰에서 제공되는 셰이프를 사람이 짓는 표정으로 분리해서 생각하는 대신 구성 요소를 추가하는 방식으로 생각하면 이 말이 무엇을 의미하는지 쉽게 이해할 수 있습니다.

데모의 아트를 완성하는 단계에서 캐릭터의 애니메이션을 일부 개선하기 위한 테스트를 진행했습니다. 이 테스트에서 ARKit의 블렌드 셰이프에 관하여 지금까지 파악한 내용을 토대로 캐릭터의 기본 중립 포즈를 수정하고자 했습니다. 소녀 캐릭터의 고유 스타일을 고려했을 때 기본 포즈에서 눈이 좌우로 너무 넓어지고 기본적인 미소 표현이 과하다는 의견이 있었습니다. 커진 눈과 기본 눈 간 변화량 차이가 너무 미미한 반면, 기본 눈과 감은 눈 간 변화량 차이는 지나치게 컸습니다. 찡그리기 블렌드 셰이프 효과도 더 개선할 필요가 있었습니다. 실제 사람을 대상으로 진행한 테스트 결과, 찡그리는 동작에서 눈을 감았을 때의 눈 크기는 최대 60~70% 범위인 것으로 나타났습니다. 이에 따라 중립 포즈를 변경하자 표정이 훨씬 자연스러워졌으며, 데모에서 보시는 것처럼 표정이 풍부하고 역동적인 캐릭터가 탄생했습니다.

향후 전망

페이셜 AR 리모트 기능과 Unity의 여러 툴을 함께 활용하면 원하는 모든 멋진 애니메이션을 제작할 수 있습니다. 머지않아 가장 좋아하는 캐릭터를 녹화하여 소중한 사람들과 공유하려는 아이들, 아바타에 생동감을 더하고자 하는 게임 스트리머, 새로운 애니메이션 제작 툴을 원하는 전문가, 방송용 애니메이션 콘텐츠를 제작하는 아마추어 제작자 등 누구나 디지털 캐릭터를 제작하고 퍼피티어링할 수 있습니다. Unity 2018을 다운로드하고 페이셜 AR 리모트 Github의 설정 지침을 확인한 다음 이 기능을 마음껏 활용해 보시기 바랍니다. Unity 사용자가 페이셜 AR 리모트를 활용한 예술적이고 창조적인 작품을 제작하여 온 세상에 선보일 날을 기대합니다.

 

21 코멘트

코멘트 구독

코멘트를 달 수 없습니다.

  1. I hope to see this come to Android phones. I won’t be purchasing an Apple device.

  2. This is a really wonderful feature. I was waiting for such a function. Thank you very much.

    However, I saw Github, quick start is too simple to understand.
    If possible, would you please write a more gentle quick start?
    I think that users will increase more by enriching quick start :)

  3. Ist cool you choose what comment it will be show up and you just delete all what is not says “thanks you are best ” – sad.

  4. Guys, this is the first iteration. IPhone have the facil kit already integrated. It is not even finished and you all want the full version for every plataform?

  5. Wow awesome, but i would never buy apple phone, when does it come to Android?

    1. Me too. That’s why I try to use DLib and OpenCV for facial mask on Android. Of course it is not 3D capture but can be used for some applications
      https://www.youtube.com/watch?v=P9AbHQjS1-A

  6. I’ve seen that the iphone app needs to be built and uploaded in the device which means that we also need to be in the apple developer program. But what if we want to create facial animations for desktop games using this? Every penny counts for us indie devs. Do you plan to create a dedicated iphone app that we can download for this use case?

  7. Great job guys! This is truly futuristic technology, stuff that would cost a ton of money and time before this. This is a game changer, literally and figuratively.

  8. Had to agree – I’m also want to see this on ARCore

  9. GIFs are the absolute worst way to show off this tech…

    1. Johnathan Newberry

      8월 14, 2018 7:40 오후

      Thanks for the feedback. We have updated the article with higher quality webm videos. You should also checkout the Unite Berlin Keynote where we demo the Facial AR Remote on stage.
      https://youtu.be/3omw9dLkrR8

      1. This looks cool. I think the video links might be broken though.

        1. Damn, didn’t mean to post it there! The youtube video is fine (skip to 33 minutes in by the way) the blog videos seem broken…

  10. Will we see support for wrinklemaps via this workflow in the future?

    1. Johnathan Newberry

      8월 14, 2018 7:37 오후

      Currently, there are no plane to support wrinklemaps. I will make sure that it gets added to a list for suggested features. In the mean time, if you would like to add them to your project you can look at creating your own implementation of IUsesStreamReader to drive the wrinklemaps in a renderer’s material. Look at how BlendShapesController and CharacterRigController do this to control other attributes of the character.

  11. AdamsImmersive

    8월 13, 2018 6:21 오후

    Great! Can’t wait to experiment with this.

  12. Any plan to make it supports Android phone like Xiaomi Mi 8?

  13. Can this feature use off the shelf depth cameras? Or is it only with the phone’s depth camera?

    1. Johnathan Newberry

      8월 13, 2018 6:53 오후

      The Facial AR Remote makes use of Unity’s ARKit Plugin for facial data provided by iOS and ARKit from the iPhone X to drive the blend shapes in editor.

  14. Could it be ARCore support?

  15. saathvik tully

    8월 13, 2018 4:21 오후

    i hope to see this Facial AR feature on Android phones too :]

    i hate iphone and apple!!