Unity 검색

유니티 “셔먼” 프로젝트 소개(2부): 애니메이터를 위한 HDRP, 비주얼 이펙트 그래프, 실시간 캐릭터 퍼(fur) 제작 기능

2019년 6월 11일 게임 | 20 분 소요
공유

Is this article helpful for you?

Thank you for your feedback!

셔먼(Sherman)은 베이맥스 드림즈(Baymax Dreams)로 에미상을 수상한 팀이 제작한 유니티의 실시간 단편 애니메이션 신작으로, 최신 기술을 적용하여 실시간으로 캐릭터의 퍼(fur)를 구현하였습니다.

저는 유니티의 미디어 및 엔터테인먼트 이노베이션 그룹(Media and Entertainment Innovation Group)의 기술 부문 책임자인 Mike Wuetherick입니다. 3년 전에 유니티에 입사한 직후, 이노베이션 팀 조직 구성에 참여하였으며 CG 애니메이션 및 영화 제작을 위한 Unity 기능을 강화하는 데 전념했습니다. 이후 팀은 Neill Blomkamp가 이끄는 오츠 스튜디오(Oats Studios)의 아담(ADAM) 에피소드 2, 3화, Neth Nom의 손더(Sonder) 및 최근에는 디즈니 TV 애니메이션(Disney Television & Animation)의 베이맥스 드림즈 단편 제작에 참여해 함께 작업했습니다.

이 글은 셔먼 프로젝트에 대한 블로그 중 두 번째 파트로, 프로젝트의 제작 배경, 애니메이션 블로킹(blocking), LookDev 및 카메라 배치(layout)에 관한 내용은 첫 번째 블로그를 확인하시기 바랍니다.

목차 (2부)

7. Alembic을 활용한 고급 애니메이션
8. 선형적 콘텐츠를 위한 조명 전략
9. 퍼 및 VFX
10. 필믹 모션 블러/슈퍼샘플링
11. Unity 리코더

Alembic을 활용한 고급 애니메이션

베이맥스 드림즈 단편 제작 시, Maya에서 Unity로 에셋을 전송하는 기본 파일 포맷으로 FBX 포맷을 사용했습니다. DCC 패키지 간에 데이터를 전송하는 것은 항상 어렵고 까다로운 작업입니다. 콘텐츠를 Maya와 같은 원본 포맷에서 다른 포맷으로 익스포트 하는 과정에서 데이터 손실이 발생하기 때문입니다. 그러나 DCC 툴에서 지원하는 포맷으로 작업하는 데는 장단점이 있습니다.

FBX는 대부분의 Unity 프로젝트에서 사용하는 일반적인 포맷으로 잘 정의되고 최적화된 워크플로를 가지고 있습니다. FBX 포맷을 사용해 전통적인 뼈대 기반 애니메이션을 제작하는 것은 거의 대부분의 Unity 프로젝트에서 애니메이션을 제작하는 방식이지만, 기술적인 한계도 존재합니다.

  1. 뼈대 스킨 가중치(bone skin weighting) 제한(Unity 2019.1 이전 버전)
  2. 스쿼시 및 스트레치를 위한 스케일 보정(Scale compensation)

스킨 가중치

Unity 2018.3 및 그 이전 버전에서는 각 버텍스당 최대 4개의 뼈대에 가중치를 부여할 수 있어 스킨 가중치 부여에 대한 고급 설정 시 훨씬 복잡하고 문제가 발생하기 쉽습니다. 이러한 제한은 Unity 2019.1에서 해결되어 각 버텍스에 대해 최대 256개의 뼈대를 지원하지만, 셔먼 프로젝트 제작 당시 2019.1 버전은 초기 알파 버전이었기 때문에 2018.3 버전을 사용하였습니다.

스쿼시 및 스트레치를 위한 스케일 보정

애니메이터로서 제일 처음 배우는 것 중 하나는 스쿼시(Squash)와 스트레치(Stretch)이며, 이는 위키피디아에 따르면 애니메이션의 12가지 원칙 중 ‘가장 중요한’ 것입니다. 아래 동영상에서 셔먼 제작 초기의 애니메이션 테스트에서 너구리의 스쿼시 및 스트레치를 확인하실 수 있습니다. 이 동영상은 제작 초기 단계에서 캐릭터에 애니메이션과 릭(rig)을 적용했을 때 퍼(fur)가 어떻게 구현되는지 테스트하기 위해 제작되었습니다.

진정한 스쿼시 및 스트레치 애니메이션을 구현하기 위해 ‘스케일 보정’이라고 하는 기술을 사용했습니다. 베이맥스 드림즈 프로젝트 진행 시 릭의 계층 구조를 수평화하는 등의 리깅(rigging) 기법으로 스케일을 보정했지만, 셔먼에서는 또 다른 방법인 Alembic을 사용했습니다.

솔루션: Alembic

Alembic(www.alembic.io)은 VFX 및 애니메이션 제작 시 흔히 사용되는 파일 포맷입니다. 다른 소프트웨어에서 스튜디오의 파이프라인으로 콘텐츠를 마이그레이션할 수 있도록 지원하는 상호 교환 포맷으로 많은 스튜디오에서 인기를 얻었습니다. 메시를 이동 및 변형하기 위해 스킨드 메시와 뼈대를 사용하는 FBX와 달리, Alembic 에셋은 원본 모델의 베이크된 버텍스 표현으로 Alembic 파일을 지원하는 모든 패키지에 원본 에셋의 복사본을 손실 없이 그대로 복사할 수 있습니다.

Unity용 Alembic은 Marza Animation Planet과 유니티 일본 팀에서 제작한 단편 애니 선물(The Gift) 작업에서 처음으로 구현되었습니다. ‘선물’의 마지막 부분에서 마치 거대한 볼풀장처럼 공으로 파도를 표현한 애니메이션을 구현하기 위해 Alembic을 사용했습니다. 그 후 오츠 스튜디오와 함께 단편 영상 아담 에피소드 2, 3화 제작 시 기능이 추가되었습니다.

Alembic 패키지 프리뷰 종료

Unity 2019.1에서 Unity용 Alembic 패키지의 프리뷰가 종료되어 앞으로는 완전하게 지원하게 되었습니다. 이는 CG 애니메이션 작업을 하는 사람에게는 희소식으로, 익숙한 포맷을 사용하여 작업이 가능하고 이를 기존 파이프라인에서 사용할 수 있습니다. Unity용 Alembic이 지원하는 기능과 프로젝트에서 해당 기능을 사용하는 방법에 대한 자세한 내용은 패키지 기술 자료를 참고하시기 바랍니다.

Alembic 당면 과제

Alembic은 여러모로 매우 좋은 포맷입니다. 특히 하나의 패키지에서 다른 패키지로 콘텐츠를 데이터 손실 없이 그대로 변환할 수 있어서 예를 들어 Maya에서 애니메이션을 베이킹할 때 매우 이상적입니다. 또한 FBX나 다른 포맷의 리깅 또는 애니메이션 제약 조건을 고려하지 않아도 됩니다.

하지만 Alembic에도 아래와 같은 당면 과제가 있습니다.

  1. 파일 크기
  2. 오브젝트 연결
  3. 머티리얼 관리

파일 크기

Alembic 파일에서 각 애니메이션의 프레임은 해당 프레임에서 모델에 대한 버텍스 포지션의 베이크된 스냅샷입니다. 그 결과 캐싱하는 데이터의 양이 상당히 많아지고 메시가 고화질이거나 애니메이션이 길어질수록 Alembic 파일의 크기가 커집니다.

셔먼은 총 7개의 ‘비트’ 또는 시퀀스로 구성되었는데, 각 시퀀스에서 스프링클러, 호스, 요정 석상 등을 포함하여 씬의 각 캐릭터에 해당하는 Alembic 파일을 출력했습니다. Alembic 포맷의 최종 애니메이션 파일은 약 7GB의 애니메이션 데이터였습니다. 이는 FBX 포맷으로 제작한 같은 분량의 애니메이션에 비해 훨씬 큰 크기입니다. 실시간 프레임 속도에서 이 정도 양의 데이터를 스트리밍하는 오버헤드는 결코 사소한 수준이 아니며, 꼭 고려해야 할 사항입니다.

한 예로 아담 에피소드 2와 3에서 천이나 얼굴 애니메이션 등 캐릭터의 요소를 스트리밍하는 데 Alembic을 사용했습니다. 하지만, 30fps로 애니메이션을 재생해야 하는 실시간 제약 조건을 충족하기 위해서는 씬에서 Alembic을 세부적인 수준에서 관리해야 했습니다.

연결 포인트

광원 또는 반사 프로브와 같은 요소를 씬의 애니메이션 오브젝트에 연결하는 것은 매우 일반적입니다. 골격 애니메이션의 경우, 연결된 오브젝트를 씬 계층에 자식으로 포함시키기만 하면 되는 꽤 간단한 작업입니다. 시네머신 역시 카메라가 초점을 맞추고 목표하는 위치를 제어하기 위해 이러한 로컬 레퍼런스 트랜스폼의 영향을 받습니다.  

그러나 Alembic으로 익스포트하는 경우, 애니메이션을 익스포트할 때 캐릭터의 골격은 기본적으로 포함되지 않고 ‘Renderable Only’로 익스포트됩니다. Alembic 애니메이션이 재생되는 동안 적절한 포지션에 항목들을 연결하기 위해 다른 방법을 찾아야 했습니다. 다행히 Maya의 Alembic 익스포트 기능이 렌더링 가능한 메시 데이터보다 더 온전한 데이터를 얻을 수 있는 몇 가지 옵션을 제공하고 있었습니다.

Maya의 Alembic 익스포트 옵션

‘Renderable Only’를 선택 해제하여 Maya에서 렌더링된 메시뿐만 아니라 캐릭터의 전체 IK 릭과 골격 및 뼈대 포지션을 익스포트할 수 있어 해당 포지션을 사용하여 광원과 반사 프로브 및 VFX를 적절한 노드에 연결할 수 있었습니다.

머티리얼 관리

Alembic의 또 다른 단점은 포맷 내에 어떠한 머티리얼 정의도 저장하지 않는다는 점입니다. FBX와 대부분의 다른 포맷이 어떤 텍스처가 어떤 머티리얼에 적용되었는지에 대한 정의를 포함하는 반면, Alembic은 Maya와 같은 DCC에서 Unity로 해당 정보가 넘어가지 않습니다. 즉, 애니메이션을 Alembic으로 다시 익스포트할 때마다 특정 애니메이션의 머티리얼을 다시 매핑해야 합니다. 제작 과정 내내 수십 개의 Alembic 클립을 적절한 머티리얼과 동기화하는 데 많은 시간이 들었습니다.

셔먼 영상을 작업하는 중에 Alembic 파일의 머티리얼 매핑을 간소화하기 위한 몇 가지 툴을 작성했습니다. 그중 두 개는 새 Film/TV Toolbox 패키지에 포함되었으며, Github 또는 Unity 패키지 관리자에서 다운로드할 수 있습니다.

Unity 패키지 관리자의 Film/TV Toolbox 패키지

자세한 내용은 다음을 참고하시기 바랍니다.

USD 및 향후 전망

이 분야에서 주목할 만한 결과를 보여주는 매우 기대되는 진전이 이루어지고 있습니다. Pixar의 오픈소스 USD 포맷은 최근 몇 년 동안 주목을 받아 왔으며, 최근에는 유니티에서 패키지 관리자를 통해 USD를 지원하는 Unity SDK를 처음으로 출시했습니다.

이노베이션 팀은 USD가 제공하는 가능성에 대해 매우 기대가 크며, 앞으로의 프로젝트 제작을 위해 해당 포맷을 관심 있게 지켜볼 것입니다.

선형적 콘텐츠를 위한 조명 전략

실시간 조명은 기존의 오프라인 렌더러를 사용하는 것과 매우 다릅니다. 광원을 씬에 배치하는 등의 기본 사항은 같지만, 기술적인 접근법은 꽤 다양합니다.

셔먼과 같은 단편 영상에서 실시간 조명은 광원 프로브, 평면 및 입체 반사 프로브, 캐스케이드 섀도우 맵, 베이크된 전역 조명 등 여러 기술의 조합을 통해 구현되었습니다.

셔먼 프로젝트에서는 유니티의 조명 부문 책임자인 Jean-Philippe Leroux의 도움을 받았습니다.

실시간으로 조명을 구현하기 위한 첫 번째 작업은 조명 솔루션의 특정 부분을 미리 계산하는 것이었습니다. 이를 위해 세트에 사전 준비를 해야했습니다.

전역 조명

높은 품질의 지역(local) 주변광을 구현하기 위해 간접 조명을 미리 계산해야 합니다. 모든 대형 정적 오브젝트는 해당 조명 솔루션을 사용하도록 표시되며 라이트매핑됩니다. 이를 위해 프로그레시브 라이트매퍼의 간접 베이크 모드를 사용했습니다.

모든 소형 오브젝트와 동적 오브젝트는 프로브 배열로 조명을 비출 수 있으며, 라이트매핑에 적합하지 않은 대형 오브젝트는 프록시 영역을 사용하여 더욱 개선된 프로브 조명의 이점을 누릴 수 있습니다.

광원 자체는 베이크하지 않았으며 하늘에서 나오는 빛과 방향광의 바운스만 베이크했습니다.

반사

또한 반사 프로브를 사용하여 베이크된 지역 반사를 위한 세트의 범위를 충분히 설정해야 합니다.

캡처 포인트는 주로 카메라 수준에 배치합니다. 다만, 셔먼 프로젝트에서 하늘은 해가 수평선과 매우 가까워 강한 방향광을 생성하기 때문에 그림자가 지는 영역을 정확히 표현하기 위해 추가 작업이 필요했습니다.

몇몇 반사성이 강한 오브젝트는 실시간 반사 효과가 매우 큽니다. 셔먼의 경우 금속 재질의 사료 그릇과 부풀어 올라 매우 반짝거리는 호스 파이프가 이에 해당했습니다. 그릇의 경우 실시간 구형 반사 프로브를, 호스의 경우 평면 반사 프로브를 사용했습니다.

광원

이때부터는 모든 광원이 완전히 동적이고, 광원의 프로퍼티를 작성할 수 있으며 즉각적인 피드백을 통해 위치를 이동할 수 있습니다. 이노베이션 팀에서 사용한 한 가지 워크플로 기법은 광원 배치에 피벗 오브젝트를 사용한 것입니다. 피벗은 타겟 역할을 합니다. 한번 위치를 지정하면 ‘x’ 키를 사용하여 로컬 및 전역 사이에서 방향 설정을 전환해 쉽게 피사체 주위를 맴돌도록 할 수 있습니다.

모든 광원이 그림자를 드리운다는 점도 중요합니다.

프리팹을 사용하여 작업하면 많은 장점이 있습니다.

  1. 씬을 잠그지(lock) 않고 단일 오브젝트에 대해 작업할 수 있어 여러 사람이 동시에 작업할 수 있습니다.   
  2. 시퀀스/프로젝트를 통해 변경 사항을 빠르게 적용할 수 있습니다.
  3. 오버라이드된 값을 빠르게 되돌릴 수 있습니다.  

셔먼의 경우 비트당 마스터 프리팹을 생성하고 다음의 프리팹에 대한 중첩된 프리팹(nested prefab)을 생성했습니다.

  • 태양
  • 필 선(Fill Sun)
  • 필 스카이(Fill Sky)
  • 림 선(Rim Sun)
  • 림 스카이(Rim Sky)
  • 캐치라이트(Catchlight)

마스터 프리팹을 샷 단위로 구조화했으며 타임라인에서 활성화 트랙을 사용하여 이를 트리거했습니다.

그 안에는 샷의 고유 광원, 특정 전역 조명 프로퍼티를 오버라이드하는 볼륨, 대기 조명(atmospheric lighting)을 만들기 위한 밀도 볼륨, 그림자 오브젝트 등 다양한 것이 포함되어 있습니다.

포스트 프로세싱과 같은 다른 프로퍼티는 시네머신 포스트 프로세싱 클립과 타임라인을 통해 미세 조정되었습니다. 여기에는 그레이딩, 카메라 효과 및 카메라 컬링과 같은 기타 최적화가 포함되어 있습니다.

CinemachinePostProcessing 컴포넌트와 함께 개별 가상 카메라에 적용되는 각 샷의 커스텀 포스트 프로파일

퍼 및 VFX

애니메틱을 완성한 후에는 단편 영상을 성공적으로 제작하기 위해 다음과 같은 필수적인 몇몇 주요 요소를 빠르게 확인했습니다.

  1. 물 VFX
  2. 너구리의 퍼(fur)

셔먼 영상에서는 스프링클러가 일종의 ‘히어로’ 역할을 하기 때문에 초기 과제 중 하나는 유체 시뮬레이션을 어떻게 처리할지 정하는 것이었습니다. Maya에 기본적으로 포함되어 있는 유체 시스템이나 Houdini를 포함해 기존에 애니메이션을 위한 유체 시뮬레이션을 처리하는 다양한 방법이 있습니다. 작업 초반에 유체 효과를 위해 Maya를 사용하여 몇 가지 테스트를 진행했으나, Maya의 유체 시스템이나 Houdini에 익숙하지 않았기 때문에 진행한 작업에 비해 원하는 만큼의 결과를 구현하지 못할 우려가 있었습니다.

같은 시기에 유니티에서 새로운 노드 기반 GPU 가속 효과 시스템인 비주얼 이펙트 그래프(Visual Effect Graph)를 출시했습니다. 해당 시스템은 매우 효과적으로 보였으나, 사용해본 경험도 없고 어떻게 원하는 결과를 구현할 수 있을지가 확실하지 않았습니다. 다행히도 브라이튼 지사의 수석 그래픽스 테스트 엔지니어인 Vlad Neykov가 프로젝트에 참여하게 되고, 해당 시스템을 사용하여 놀라운 결과를 얻을 수 있었습니다.

비주얼 이펙트 그래프를 사용한 동적 효과

Unity 2018.3에서 HDRP용 비주얼 이펙트 그래프가 프리뷰로 출시되었습니다. 베이맥스 드림즈 제작에는 베이맥스 분해 장면에 실시간 물리와 레거시 파티클 시스템을 함께 사용했습니다. 팀원 중 누구도 해당 시스템을 사용해 본 적이 없었지만, 원하는 최상의 물 시뮬레이션과 비주얼을 얻기 위해서는 새로운 비주얼 이펙트 그래프에서 제공하는 고급 파티클 기능과 HDRP 통합이 필요했습니다.

이 콘텐츠는 Targeting Cookies 카테고리를 수락해야만 동영상을 시청할 수 있도록 허용하는 타사 제공업체에서 호스팅합니다. 이러한 제공업체의 비디오를 보려면 쿠키 환경 설정에서 Targeting Cookies 카테고리를 수락하시기 바랍니다.

그래서 유니티 내부에서 비주얼 이펙트 그래프를 사용해 본 적이 있는 사람을 수소문했고, Vlad Neykov의 도움으로 ‘셔먼’에서 물 효과를 비롯해 기타 다른 효과에 적용해 멋진 비주얼을 구현할 수 있었습니다.

모든 VFX 작업이 각각의 독립된 타임라인 시퀀스로 관리되기 때문에 타이밍과 애니메이션의 반복 작업을 각각 진행할 수 있었습니다. 또한 비주얼 이펙트 그래프와 함께 제공되는 커스텀 비주얼 이펙트 활성화 트랙과 기존 애니메이션 트랙을 함께 사용하여 그래프의 프로퍼티를 애니메이션 할 수 있었습니다.

이 콘텐츠는 Targeting Cookies 카테고리를 수락해야만 동영상을 시청할 수 있도록 허용하는 타사 제공업체에서 호스팅합니다. 이러한 제공업체의 비디오를 보려면 쿠키 환경 설정에서 Targeting Cookies 카테고리를 수락하시기 바랍니다.

스프링클러 효과와 관련해서, 처음에는 하나의 물 효과로 전체를 다루려고 했으나, 점점 새로운 사례를 포함할 수 있도록 확장해야 했습니다. 첫 장면에서는 물이 카메라 쪽에서 나오기 때문에 컨트롤을 추가해야 했습니다. 다른 장면에서는 물이 사료 그릇에서 튕겨 나가므로 충돌을 추가해야 했으나, 다른 장면에서는 이를 숨겨야 했습니다. 또 다른 장면에서는 뎁스 충돌이 충분히 가까이에서 충돌하지 않아 스피어 충돌로 교체했습니다. 결국 최종 결과물에서 보이는 거의 모든 장면마다 다른 상황을 처리하기 위해 각기 다른 물 효과를 사용했습니다.

물의 충돌 효과를 구현하기 위해 처음에는 스크린 공간 뎁스 테스트를 사용해봤는데, 여러 상황을 테스트한 후, 다양한 충돌 볼륨을 위해 단순한 평면 및 스피어 충돌을 사용하기로 했습니다.

작업 초반에는 스프링클러의 동적인 물 효과를 어떻게 구현할지에 집중했는데 Vlad가 참여한 후에 울타리에서 떨어지는 나뭇잎, 발자국에 이는 먼지 더미, 흙더미가 터지거나 전기에 감전되는 등 작은 디테일까지 포함해 모든 효과를 처리할 수 있었습니다. 이번 프로젝트는 VFX 그래프 사용의 좋은 실제 테스트 사례였으며, VFX 그래프를 계속 개발하는 데 수많은 피드백을 제공했습니다.

전반적으로 VFX 그래프가 Unity에 어떠한 가능성을 제공할 지 매우 기대되며, 프로젝트를 지원하는 데 그치지 않고 멋진 결과물을 만들어 준 Vlad에게 감사의 말씀을 전합니다.

실시간 퍼 및 깃털 처리

이번 단편 영상을 제작하면서 몇 가지 해결해야 하는 기술적 과제 중 가장 중요한 사안은 '퍼(fur)'의 구현이었습니다. 이 주제는 애니메이션에 실시간 엔진을 사용하는 것에 관해 스튜디오와 논의할 때 자주 언급됐던 내용입니다.

처음에는 퍼 렌더링을 망설였습니다. 뛰어난 실력을 갖춘 그래픽스 엔지니어에게도 ‘오프라인 수준의 품질’로 퍼를 실시간으로 구현하는 것은 어려운 과제였습니다.

어느 엔진에서나 털(hair) 또는 퍼(fur)에 관해 다룰 때 솔루션을 구성하는 4가지 주요 요소는 다음과 같습니다.

  1. 지오메트리 생성
  2. 셰이딩
  3. 동역학
  4. 제작

셔먼 프로젝트에서 퍼 작업을 할 때, 지오메트리 생성 및 셰이딩을 한 다음 동역학(물리)에 대해 몇몇 실험을 했지만, 결국 최종 단편 영상에는 사용하지 않기로 했습니다. 마지막으로 중요한 핵심은 퍼를 실제 제작하는 것으로, 아티스트에게 실제 퍼 작업을 수행할 방법을 안내하는 것은 최종 구현에 매우 결정적인 역할을 합니다.

팀에서 수행한 첫 번째 작업은 기존에 했던 퍼 렌더링 작업을 평가하는 것이었습니다. Unity에서 처음 퍼 렌더링을 구현한 작품 중에는 Marza Animation Planet에서 제작한 단편 애니 ‘선물(The Gift)’이 있습니다.

유니티는 매년 대다수 유니티 엔지니어링 팀원이 모여 여러 가지 실험적인 아이디어를 시도하며 새롭고 흥미로운 프로젝트를 함께 진행해보는 ‘핵 위크(Hack Week)’를 개최합니다. 작년 핵 위크에서 한 팀이 ‘선물’에서 구현했던 작업을 이어서 진행하면서 Unity의 실시간 퍼 구현에 대한 또다른 가능성이 있는지 확인했습니다. 해당 팀은 Marza의 퍼를 다른 것들과 함께 HDRP로 포팅하여 셔먼 팀에서 퍼 솔루션을 구축하는 데 사용한 작업의 토대를 제공했습니다.

핵 위크 프로젝트에서 제공한 기본 구현을 기반으로 John과 Steven이 퍼를 제작하기 위한 워크플로 작업을 시작했습니다.

여기에서 기술적인 부분을 자세하게 다루지는 않겠지만, 팀에서 취한 접근법 중 몇 가지 흥미로운 내용이 있어 소개하고자 합니다.

원본 퍼 메시/SDF

퍼 구현을 위해 처음으로 진행한 작업 중 하나는 실제로 퍼를 한 올 한 올 모델링하는 것이었습니다. 이를 SDF(Signed Distance Field, 부호화 거리 필드)로 베이크해 퍼 지오메트리 볼륨의 원본으로 사용했습니다. 고해상도의 퍼 원본을 사용함으로써 순수 헐(hull) 기반 접근법보다 퍼를 더 실제에 충실하게 구현할 수 있었습니다. 예를 들어 가닥별로 노멀이 계산되어 결과적으로 기존에 실시간 퍼 구현에 사용했던 대부분의 방식보다 훨씬 나은 조명을 표현할 수 있습니다. 구현 과정을 진행하면서 퍼의 긴 털을 위한 또하나의 해석적 SDF(analytical SDF)를 통합해 두 SDF를 혼합했습니다.

SDF 생성에 사용된 원본 퍼 메시

잔털은 베이크된 SDF를 사용하고 긴 털은 해석적 SDF를 사용하기 때문에 필요에 따라 적합한 SDF를 선택해 사용할 수 있습니다. 해석적 SDF를 사용하면 해상도에 제한이 없으며, 앞으로 Unity 내부에서 직접 털 가닥의 프로파일과 프로퍼티를 수정할 수 있습니다. 베이크된 SDF를 사용하면 깃털 지오메트리나 퍼 스타일과 같이 해석적으로는 구현할 수 없거나 어려운, 더욱 복잡한 지오메트리를 베이크할 수 있고, 원하는 DCC 앱에서 만든 것을 복사했을 때를 예측할 수 있습니다.

그룸맵/하이트맵

너구리와 같은 동물은 신체의 모든 지점에서 완벽하게 올곧은 직모가 자라지 않습니다. 게다가, 퍼는 일반적으로 전신에서 균일하게 같은 길이로 자라지 않습니다.

좋은 결과를 얻기 위해 퍼 노멀과 지오메트리를 수정하는 데 적용하는 그룸맵(groom map)을 제작하는 것이 매우 중요했습니다. Steven은 Mari를 사용하여 그룸맵을 생성하고, 너구리의 신체 부위에 따라 다른 퍼 길이를 제어하기 위해 하이트맵을 생성했습니다.

필믹 모션 블러/슈퍼샘플링

이노베이션 팀은 셔먼 제작 과정에서 수많은 커스텀 툴을 제작했습니다. 대부분은 간단한 툴이었지만 워크플로를 개선하고 시간을 절감하는 데에 상당한 도움이 되었습니다. 팀에서 개발한 주요 기술 중 하나는 ‘필믹 모션 블러(Filmic Motion Blur)’라고 이름을 붙인 시스템입니다.

베이맥스 드림즈 프로젝트 당시 해결해야 하는 주요 기술적 과제 중 하나가 모션 블러였습니다. 기존의 실시간 모션 블러는 게임을 플레이할 때 높은 프레임 속도에서 멋지게 보이지만, 24fps로 TV 방송을 할 때 필요한 것과 같은 오프라인 렌더의 경우, 방송에 부적합한 수준의 아티팩트가 생성됩니다.

디즈니의 품질 기준을 통과하기 위해 John Parsaie는 필믹 모션 블러 시스템을 개발했습니다. 본질적으로 필믹 모션 블러는 누적 기반 렌더러입니다. 24fps로 렌더링하는 대신 타임라인 시퀀스는 960fps로 렌더링하고 중간 버퍼를 최종적으로 디스크에 기록할 실제 프레임으로 누적합니다. 단순히 기존 렌더 버퍼의 결과를 조합하는 것이기 때문에 수정하지 않고도 어느 머티리얼이나 셰이더를 가지고 작업할 수 있습니다.

셔먼의 경우 퍼 샘플을 최종 프레임에 합칠 때에도 똑같은 기술을 사용했습니다. 앞으로, 같은 기술을 사용하여 하이엔드 시네마틱 뎁스오브필드(피사계심도)와 다른 슈퍼샘플링된 효과를 만드는 방법에 대해 연구할 예정입니다.

프레임을 렌더링하는 이 접근법에서 실시간 FPS로 작동하지 않는다는 점에 대해 말하자면, 완전한 디테일과 퍼를 4k로 렌더링할 때 최종 프레임까지 ‘분당 프레임’ 범위에서 이야기를 시작하고 있습니다. 그렇지만 여전히 최종 프레임을 렌더링하기 위해 몇 시간씩 걸리는 기존 오프라인 CPU 및 GPU 렌더러보다 획기적으로 빠릅니다.

렌더 창

필믹 모션 블러는 최종 이미지 품질을 크게 향상시키는 엄청난 성과를 보여줬습니다. 최대 단점은 슈퍼샘플링 및 수렴(convergence)을 통해 최종 결과를 확인하기 위해 작업 중인 시퀀스 또는 샷을 렌더링해야 한다는 점이었습니다.

이 문제를 해결하기 위해 팀원 모두가 필요에 따라 최종 품질 렌더를 출력할 수 있는 커스텀 에디터 창인 렌더 창(Render Window)을 제작했습니다. 렌더 창을 사용하여 그룸맵을 조정하고 필요에 따라 퍼를 미세 조정하는 동시에 최종 결과를 빠르게 확인할 수 있었습니다.

알파 디더링된 퍼(오른쪽)와 최종 통합된 프레임(왼쪽)

리코더

셔먼과 같은 프로젝트 작업은 일반적인 Unity 프로젝트와는 다릅니다. 프로젝트의 최종 결과는 시퀀스가 있는 프레임으로, 최종 애니메이션을 구성하는 에디터에서 출력합니다. 이를 위해 Unity의 Recoder 패키지를 사용하여 에디터에서 최종 이미지를 렌더링했습니다. 위에서 설명한 필믹 모션 블러 기능은 리코더의 타임라인 통합에 연결되어 퍼를 합치고 최종 프레임에 슈퍼샘플링된 모션 블러를 생성할 수 있습니다.

Unity 리코더 트랙 및 클립 설정

최종 프레임은 팀에서 일종의 작은 렌더 팜(render farm)으로 사용했던 3대의 전용 PC에서 4k로 렌더링했습니다(이렇게 하여 렌더링에 팀의 메인 워크스테이션을 사용하지 않을 수 있었습니다). 매일 밤 이노베이션 팀은 검토를 위해 그날 새롭게 진행한 부분을 최종 품질로 렌더링했습니다.

요약

여기까지가 셔먼 프로젝트에 대한 블로그 시리즈 2부였습니다. 셔먼 팀이 프로젝트를 구현하는 과정에서 사용한 제작 기술과 팁이 도움이 되기길 바랍니다. 캐릭터 애니메이션에 Alembic을 어떻게 사용했는지, 그리고 셔먼을 위해 제작한 퍼 구현에 관한 내용 및 Unity를 사용한 선형적 애니메이션을 제작을 지원하고자 이노베이션 그룹에서 만든 추가 툴에 대해 자세히 알아보려면 1부를 참고하시기 바랍니다.

셔먼 프로젝트를 소개하게 되어 매우 기쁘게 생각하며, 여러분이 앞으로도 애니메이션에 Unity를 어떻게 활용하는지에 대해 더 많은 소식을 접할 수 있기를 바랍니다. 아, 그리고 셔먼은 너구리가 아니라, 사실은 솜털이 보송보송한 귀여운 새입니다!

Unity를 사용해서 애니메이션 프로젝트를 진행하는 방법에 대해 더 배우고 싶으시면, 유니티의 EDU 팀이 여러분에게 맞춤화된 현장 교육 워크샵을 제공할 수 있습니다. 각 워크숍은 Unity 인증을 받은 강사가 진행하며, 구현을 위한 베스트 프랙티스뿐만 아니라 Unity 기술을 가르치는 실습 프로젝트도 제공합니다.

전체 프로젝트에 대한 액세스를 포함하여 셔먼에 대해 자세히 알아보려면 영화 및 애니메이션 솔루션 페이지를 방문하여 문의해 주시기 바랍니다. 유니티와 이노베이션 그룹이 여러분의 아이디어를 실제 프로젝트로 실현하는 데 어떻게 도움이 되는지 알아보세요.

2019년 6월 11일 게임 | 20 분 소요

Is this article helpful for you?

Thank you for your feedback!