Search Unity

얼굴 모션 캡처와 옷감 시뮬레이션을 사용하여 실시간 30fps 렌더링으로 사실적인 디지털 휴먼 아담(ADAM)을 제작한 과정을 확인해 보시기 바랍니다. 이를 구현하는 과정에서 닐 블롬캠프(Neill Blomkamp)와 오츠 스튜디오(Oats Studios)는 Alembic 임포터(Alembic Importer)와 타임라인(Timeline), 버텍스 셰어링(Vertex Sharing) 및 기타 표준 기능을 활용했습니다.

저는 Made with Unity 팀에서 툴과 파이프라인을 전담하는 아트 툴 엔지니어, 션 로우(Sean Low)입니다. 유니티 테크놀로지스에 입사하기 전에 저는 디즈니 인터랙티브에서 픽사, 마블, 루카스필름과 협업하여 콘솔 게임용 애니메이션 툴을 개발했습니다. 영화 아담 제작 중에는 Alembic과 타임라인 등의 툴을 통합하는 작업에 참여하여 애니메이션 파이프라인을 간소화하고 쉽게 유지 관리할 수 있도록 지원했습니다.

배경: Unity의 Alembic 지원 시작

약 2년 전에 유니티 R&D 팀에서는 Alembic 임포터 플러그인을 처음으로 지원했습니다. 이 플러그인은 마자 애니메이션 플래닛(Marza Animation Planet)에서 제작한 기프트(The Gift)라는 단편 영화에서 사용되었습니다. 파도를 표현하는 수백만 개의 플라스틱 공이 나오는 장면이 특히 제작하기 어려웠지만 Houdini 시뮬레이션에서 생성된 Alembic 데이터를 Unity로 가져와서 구현할 수 있었습니다. 따라서 Unity의 Alembic 지원 기능을 사용하면 아티스트가 다양한 외부 애플리케이션에서 시뮬레이션된 데이터를 가져올 수 있습니다. 또한 아티스트는 Alembic을 활용하여 실시간 엔진에서 조인트 기반 메시 변형의 한계를 뛰어넘을 수 있습니다.

오츠 스튜디오는 옷감 시뮬레이션을 실제와 매우 흡사하게 구현하고 배우들의 표정 연기 캡처를 처리하기 위해 유니티의 Alembic 임포터에 추가 기능을 더하고 최적화하기를 원했습니다. 이 요구 사항은 Alembic 임포터가 처음 개발된 용도와 매우 달랐기 때문에 유니티 개발팀은 이 플러그인을 업그레이드하기 위해 많은 노력을 기울였습니다.

Alembic 임포터 주요 업데이트 사항

Alembic 임포터의 주요 업데이트 사항 중 첫 번째는 타임라인 통합이었습니다. 타임라인을 통합하면 Alembic 데이터를 런타임 중에 타임라인을 통해 스트리밍하고 플레이백할 수 있습니다. 동시에 사용자는 편집 중에 Alembic 플레이백을 보면서 타임라인을 통해 스크럽할 수 있습니다. 이 통합을 가능하게 하기 위해 커스텀 PlayableBehavior인 Alembic Stream Player, PlayableAsset인 Alembic Shot Asset 및 TrackAsset인 Alembic Track을 Alembic 임포터 패키지에 추가하였습니다. Playables API와 관련된 자세한 내용은 기술 자료에서 확인하시기 바랍니다.

이제 타임라인에서 Alembic Track을 추가하고 Alembic Shot Asset을 생성한 후 이를 Alembic Stream Player 컴포넌트가 연결된 씬 내 Alembic 인스턴스와 연결할 수 있습니다.

타임라인의 Alembic Track 및 Alembic Shot Asset

씬 오브젝트의 Alembic Stream Player 컴포넌트

임포터의 주요 업데이트 사항 중 두 번째는 버텍스 셰어링을 지원하여 위상이 변하지 않는 메시 토폴로지 에셋의 Alembic 스트리밍 성능을 최적화한 것입니다. 전형적인 Alembic 데이터는 파티클과 같이 메시 토폴로지가 항상 변하는 동적 시뮬레이션에서 사용되지만, 유니티는 공유 버텍스를 병합하여 플래이백 성능을 최적화하고자 했습니다. 이렇게 하면 매 프레임마다 메시가 데이터 스트리밍에 기반하여 실시간으로 재구성됩니다. 공유 버텍스를 병합하면 에지, UV, 노멀 및 탄젠트와 같은 기타 메시 프로퍼티도 함께 업데이트되므로, 동적 Alembic 메시가 이제 FBX 메시처럼 작동하여 메시가 씬에서 할당된 머티리얼, 셰이더 및 조명에 따라 반응하게 됩니다.

공유 버텍스를 보여주는 Unity의 Alembic 메시

주요 업데이트 사항 중 세 번째는 Alembic 버텍스 데이터에 보간을 추가한 것입니다. Alembic 메시는 기본적으로 매 프레임마다 새롭게 구성된 메시이기 때문에 이전 및 다음 버텍스 포지션의 델타에 관한 정보가 없습니다. 이로 인해 렌더링을 위해 Alembic 메시에 모션 블러를 적용하려고 할 때 문제가 발생합니다. 보간을 활성화하면 Unity의 Alembic 에셋이 포지션 간 보간을 계산할 수 있게 되어 모션 벡터를 계산하는 데 필요한 속도를 출력할 수 있습니다. 즉, Alembic 메시에서 파생된 정확한 모션 벡터를 셰이더 계산이나 포스트 프로세싱 스택에서 사용할 수 있게 됩니다. 이를 통해 최종 렌더링된 이미지에서 모션 블러의 품질을 향상할 수 있을 뿐 아니라 필요한 샘플의 수가 줄어들어 성능 또한 개선할 수 있습니다.

Alembic 메시에서의 모션 벡터

모션 블러 적용 전

모션 블러 적용 후

모션 벡터 버퍼

또한 Alembic Playable Asset의 자동 활성화 등 원활한 제작을 위한 여러 추가 기능을 구현하여 타임라인에서 활성화 트랙(Activation Track) 을 추가하지 않고도 Alembic Playable Asset을 활성화할 수 있습니다. Time Scale 프로퍼티를 이용하면 Alembic 데이터의 플레이백 속도를 조절할 수 있습니다. Turn Quad Edge 프로퍼티를 이용하면 메시 면(face)이 어느 방향으로 삼각형을 이룰지 선택할 수 있습니다. 또한 플레이백 중 데이터를 캐시하지 않아도 Alembic 씬 오브젝트가 활성화되어 있으면 언제든지 모든 Alembic 샘플을 캐시할 수 있습니다.

오츠 스튜디오, 영화 제작에 Alembic 활용

오츠 스튜디오의 VFX 총괄 감독인 크리스 하비(Chris Harvey)는 “Alembic 스트리밍은 이번 프로젝트에서 매우 중요한 부분을 차지합니다. 시뮬레이션된 데이터를 가져오는 게 아주 어려운 작업이지만 Unity의 Alembic 임포터를 이용하여 매우 쉽게 가져올 수 있었습니다.”라고 전했습니다.

타임라인 에디터에서 여러 Alembic 에셋을 조합하는 과정

오츠 스튜디오의 영화 아담에 나오는 모든 옷은 실제 의상을 근거로 하여 사진 측량법으로 캡처한 다음 디지털 재단사인 션 프랑센(Sean Frandsen)이 Marvelous Designer를 이용하여 울, 면, 가죽 등 다양한 소재에 실제 물리적 속성과 애니메이션을 적용하여 재현되었습니다.

또한 캐릭터의 얼굴은 배우의 표정 연기를 캡처한 후 이를 Alembic 플레이백을 위한 일련의 정적 메시로 변환하였습니다. 얼굴 캡처에 관한 더 많은 정보는 아담: 제작 과정 동영상을 확인하시기 바랍니다.

아담에서는 Alembic을 주로 옷감과 얼굴, 두 가지 유형의 에셋에 사용했다.

그 후 데이터를 Autodesk Maya로 임포트하여 추가로 정리하고 미세 조정을 거쳐 Alembic 파일로 익스포트했습니다. 아래는 제작 과정을 보여주는 모식도입니다.

 

Alembic 및 FBX 에셋 파이프라인을 Unity에서 통합

시뮬레이션된 에셋을 시공간에서 통합하기

이 단계에서 오츠 스튜디오는 Unity에서 타임라인을 어셈블리 툴로 사용하여 Alembic 에셋을 결합하고 다른 에셋과 함께 씬 공간에서 연출했습니다. 예를 들어 전체 캐릭터 연기를 완벽하게 조합하기 위해 아래와 같이 FBX 파일 형식의 신체 연기를 포함하는 애니메이션 트랙을 기반으로 하여 얼굴과 옷감에 Alembic 트랙을 하나씩 사용했습니다.

타임라인에서 완성된 캐릭터 구현

오츠 스튜디오는 타임라인의 기능을 100% 활용하여 실시간 플레이백을 위해 각 장면의 타이밍에 맞춰 모든 에셋 동작을 동기화하고 배열했습니다. 그러나 에셋의 수가 많으면 타임라인 에디터 인터페이스가 복잡해지기 쉽고 제작 단계에서는 이를 유지 관리하기가 어렵습니다. 오츠 스튜디오는 이 문제를 해결하기 위해TrackGroup을 사용하여 씬 내에서 에셋을 정리했으며 이 기능은 필요에 따라 그룹을 펼치거나 접을 수 있도록 해주었습니다. 또한 ControlTrack을 사용하여 에셋을 정리, 관리할 뿐 아니라 여러 중첩 타임라인 인스턴스를 처리했습니다.

펼치거나 접을 수 있는 트랙 그룹

중첩 타임라인 에셋을 처리하는 ControlTrack(이미지는 캐릭터 및 캐시를 나타냄)

원클릭 자동화

제작 후반에 들어서는 얼굴 모션 캡처 및 옷감 시뮬레이션을 위해 생성된 Alembic 데이터의 파일 개수가 거의 300개에 달했습니다. 따라서 오츠 스튜디오는 여러 Alembic 파일을 타임라인으로 임포트하기 위한 자동화된 프로세스가 필요했으며 이를 위해 사전 정의된 설정과 함께 Alembic 파일을 자동으로 가져와 데이터를 필요한 컴포넌트와 함께 씬에 인스턴스화하고 타임라인에 배열하는 자체 임포터를 구현했습니다. 유니티 개발팀의 도움으로 오츠 스튜디오는 한 번의 클릭으로 자동화 프로세스를 시작할 수 있었습니다. 유니티는 또한 이 프로젝트를 통해 받은 수많은 유용한 피드백과 API 요청을 활용하여 타임라인을 더욱 개선할 수 있었습니다.

다양한 캐릭터와 프랍을 위한 수백 개의 Alembic 에셋 관리

향후 Alembic 임포터 전망

아담 프로젝트를 진행하는 동안 Alembic 임포터는 많은 발전을 거쳐 제작에 바로 활용할 수 있게 되었습니다. 아래의 빠른 링크에서 릴리스 버전을 다운로드할 수 있습니다. 이제 의상이나 얼굴과 같은 정적 토폴로지 메시뿐만 아니라 동적 토폴로지 시뮬레이션 메시에도 Alembic 임포터를 사용할 수 있습니다. Alembic 임포터는 최적화를 거쳐 기존 및 향후 Unity와 더 효과적인 통합이 가능해졌습니다. 점점 더 많은 아티스트와 스튜디오가 Alembic에 관심을 보이고 있으며 특히 실시간 CG 영화 분야에서 많은 관심을 보이고 있습니다. 유니티의 Alembic 지원이 다양한 프로젝트를 어떻게 성공으로 이끌지 기대됩니다. Alembic 임포터를 어떻게 활용하고 있는지 공유해 주시기 바랍니다.

유니티 DCC 개발 팀원인 마크 비서(Mark Visser), 제이슨 맥컬러(Jason McCullough), 토머스 숄레이(Thomas Chollet), 세이야 이시바시(Seiya Ishibashi)에게 감사의 말씀을 전합니다.

아담의 “제작 과정”에 관한 더 많은 정보

조명, 옷감 시뮬레이션타임라인에 대해 더욱 심화된 내용을 다루는 게시물을 확인해 보시기 바랍니다.

빠른 링크

Unity 패키지 형식의 Alembic 버텍스 셰어링 릴리스 버전(1.0f1)은 여기에서 받을 수 있습니다.

(해당 브랜치는 곧 마스터 브랜치에 적용될 예정입니다. 업데이트가 있으면 다시 공유해 드리겠습니다. 혼란을 드려 죄송합니다.)

Unity에 관해 더 자세히 알아보기

오츠 스튜디오를 비롯한 여러 스튜디오가Unity 2017과 타임라인, 시네머신, 포스트 프로세싱 스택 및 30 FPS 실시간 렌더링과 같은 기능을 사용하여 영화 제작의 미래를 변화시키는 과정을 알아봅시다.

 

 

 

42 replies on “ADAM: Unity의 Alembic 지원 확장”

So after testing this I have to ask. Why is the version on GitHub so far behind what has been done with the Adam Series. None of these shorts could have been made with this Plug-In in it’s current state. Does Oats Studio have a Dramatically different version that we could have access to?

According to Sean in the below quote Now this is integrated into Unity. But Import Asset does not even see .abc files…

“Sean Low
December 11, 2017 at 7:46 pm

Hi Narendra,
Alembic Importer is now integrated so you can go Asset>Import New Asset and point to a .abc file. You will see the abc file asset in your Asset folder :) You can then drag drop the abc into your scene. To playback the alembic:
1. Hit Play, and the alembic stream will kick in.
2. In Timeline, add Alembic track, add Alembic clip, then link the abc scene obj in the ‘Stream Player’ of Alembic Shot Asset.
Hope helps :)”

Really great tool!
I am importing alembic files to use in timeline for a 360 rendered movie. The reason for alembic is the mesh is changing poly count over the sequence. Think lava lamp / blob mesh. Some imports with a larger surface area are divided into smaller chunks on import. This works perfectly if the material is opaque but not if the material is transparent. lots of flashing faces etc. Is it posibble for somehow force the import to keep the mesh as one on import.

Can we get a bit more info on what’s being updated by the interpolator? I assume vertex data and possibly normals, but what about UV?

I ask because I have an alembic clip with a sample rate of 5 frames. When it’s animating in Unity, it loops choppy with “interpolate samples” turned off (as expected), but is smooth when “interpolate samples” is enabled. However, the shading (shadows) on it looks pretty bad, and I’m trying to figure out why and how to fix this.

Works great but I am not seeing the Material assignment to faces. Just brought in a character from Maya 2017. It comes in with just one material.

Hi Sean Low,
Thanks for your tool which will open news doors for artists.
I am working on a VR project in UE4 to create a tool which will allow the artist and the customer to see the progression of the work.
https://youtu.be/7qWXEylM3ns
I was working with an Htc vice but recently I acquired an Oculus Rift and start to work with Unity.
I am very dependent of Alembic as I import clothes from Marvelous.
My question is: Is it possible to import an .abc file from a folder outside the builded game?
Because as this is a tool the artist must be able to import his/her creation inside.
Thanks for your cooperation.

I think I’m still confused by how the new importer works.

So I drag in an abc file into the Assets folder. A copy of this is made in StreamingAssets.

Is there a way to prevent having two copies of the abc file? That can really eat up HDD space if the abc files are multi-gigabytes in size…

Hi,

How do you import Alembic file to the scene? In the previous version, there used to be Alembic Import Window. I can’t seem to find that now.

I was able to add Alembic timeline track but that’s all I can do with this package. Can you guys help me out?

Thnx ^-^

Wow, I’ve been using Alembic importer for my project at http://hrzn.org while it was at the beginning of its path, I am pretty happy about the optimizations, since .abc files can weigh a lot!

I would really like to know more about UDIM enchancements to the engine and whether / how we will use them in games. I hate UV system, UDIM is so much better and easier to create.

Good News! Do you have any plans adding Android-Support for this plugin? I think for now you just can play Alembic animations on window, linux etc. Would be nice to have support for mobile devices too.

This blogpost is a great culmination of Oats’ and Unity’s efforts with Adam,
Interweb thanks and hopes there are more to come.

Comments are closed.