캐릭터 창조와 애니메이션 작업에는 숙련된 아티스트의 기술과 전문적인 배경 지식이 필요합니다. 이와 무관한 분야의 기술과 지식을 가진 아티스트라면 특히 어렵고 답답하게 느낄 수 있는데요. 이러한 문제를 해결하고자 특별히 고안된 것이 바로 리얼루전(Reallusion)의 캐릭터 크리에이터(Character Creator)와 아이클론(iClone)입니다.
캐릭터 크리에이터는 지브러시(ZBrush)나 서브스턴스(Substance), 블렌더(Blender) 등의 메인스트림 툴을 활용하는 강력한 파이프라인으로 사실적이고 양식화된 캐릭터를 구축할 수 있게 해주는 솔루션입니다. 아이클론의 경우 디테일 정도(LOD)와 디지털 휴먼 셰이더, 풍부한 모션 에셋 컬렉션이 포함된 FBX 파일을 내보내기 할 수 있는 기능을 제공하면서도 학습에 그리 많은 시간과 노력을 요하지 않는 애니메이션 편집기로 두각을 나타내고 있죠.
2020년에 출시된 NVIDIA Omniverse에 캐릭터와 애니메이션 부문의 관심이 집중됐습니다. Omniverse는 차세대 3D 가상 협업과 실시간 시뮬레이션을 위한 플랫폼으로서, 광범위한 협업에 투입되는 인력과 애플리케이션을 서로 연결합니다. 이 같은 생태계에서는 리얼루전 소프트웨어 제품군이 고품질의 캐릭터 에셋과 모션들로 구성된 대규모 라이브러리와 만나 결정적 역할을 수행하는 한편, Omniverse가 제공하는 패스 트레이싱 렌더링과 AI 테크놀로지가 강력한 시너지를 냅니다.
시작하기
리얼루전 커넥터를 구축하려면, 먼저 NVIDIA 런처 애플리케이션에서 다운로드가 가능한 Connect Sample 코드를 참고하세요.
Omniverse 유튜브 채널의 ‘커넥트 샘플로 Omniverse USD 애플리케이션 구축하기(Create an Omniverse USD App from the Connect Sample)’ 영상 또한 입문자용 튜토리얼로 활용하기에 좋습니다.
신(scene)과 캐릭터 애니메이션
아이클론과 캐릭터 크리에이터의 3D 신은 이동, 회전, 스케일의 기본 트랜스폼(transform)을 갖춘 노드들로 구성됩니다. 캐릭터와 메시(mesh), 조명, 카메라 일체가 이 노드들에 들어가 있죠.
캐릭터의 골격을 이루는 뼈들도 이 노드들이 표현합니다. 트랜스폼만을 담당하는 노드는 USD 엑스폼(XForm)으로, 신체와 안면 골격을 담당하는 노드는 USD 스켈레톤 조인트(skeleton joint)로 내보내기 됩니다. 이외의 뼈와 피부는 골격의 액세서리 노드에 추가되었다가 USD 포맷으로 변환됩니다.
USD 엑스폼 스케일링의 작동 방식은 아이클론과 완전히 다릅니다. 아이클론에서는 노드가 상위 스케일을 이어받기(inherit) 하거나 무시하도록 만들 수 있는 반면, Omniverse에서는 언제나 상위 노드의 스케일이 이어받기 됩니다. 이러한 경우에는 이어받기 된 뼈 노드 스케일의 값을 리셋하고 제거한 뒤 Omniverse로 내보내기 해야 스케일 값을 일치시킬 수 있습니다.
아이클론의 얼굴 표정 대부분은 모프 애니메이션(morph animation)으로 구성되어 USD 블렌드 셰이프(blend-shape)로 내보내기 됩니다. 로컬 위치에 저장되는 FBX 블렌드 셰이프와 달리 USD 블렌드 셰이프는 위치 오프셋을 저장하죠.
아이클론 또한 위치 오프셋을 (강도 멀티플라이어와 함께) 저장하므로 Omniverse와 완벽히 호환되며, 따라서 USD 포맷으로 직접 변환이 가능합니다. 이때 Omniverse는 블렌드 셰이프가 포함된 소품들의 스켈레톤 루트(skeleton root)와 더불어 추가적인 프로세스를 요할 수 있음에 유의해야 합니다.
머티리얼 컨버전
지금부터 아이클론의 USD 익스포터(exporter)를 위한 MDL 코드 일부를 살펴보겠습니다. 더 자세한 내용은 USD Shader Attributes를 참고하세요.
USD 파일에서 MDL은 info:mdl:sourceAsset
과 info:mdl:sourceAsset:subIdentifier
를 엔트리 함수로 사용해 지정합니다. 새롭게 추가된 subIndentifier
속성은 NVIDIA와 픽사(PIXAR)가 소개한 바 있습니다. 이후에 input:
을 호출해 텍스처와 머티리얼의 파라미터를 입력합니다. 시작점으로는 Omniverse와 함께 제공된 OmniPBR.mdl
과 OmniSurface(Base).mdl
을 사용했습니다.
처음부터 OmniPBR.mdl을 선택한 것은 NVIDIA RTX의 실시간 모드와 패스 트레이싱 모드 일체에서 훌륭히 작동하기 때문입니다. 반면 OmniSurface와 OmniHair는 RTX의 패스 트레이싱 모드용 포토리얼리스틱 MDL에 해당합니다. 기존의 PBR과 스킨, 헤드, SSS 셰이더는 차후에 HLSL에서 MDL로 바꿔주었습니다.
수영장에서 관찰되는 물살도 또 하나의 좋은 예입니다.
float2 inputs:texture_translate.timeSamples = {
0: (0, 0),
4000: (4, 8),
}
앞서 언급한 내장형 MDL 외에도 깃허브(GitHub)의 base.mdl을 비롯해 즉시 배포와 재사용이 가능한 함수들을 찾을 수 있습니다.
조명 컨버전
포인트 라이트와 스포트라이트는 빛원뿔(kightcone)의 각도를 조정한 UsdLuxSphereLight
를 사용합니다. 관 모양과 사각 형태의 조명은 각각 UsdLuxCylinderLight
와 UsdLuxRectLight
를 사용하죠. Light IES 프로필 파일도 셰이핑(shaping) 속성에 해당합니다. USD에서 조도는 단위면적당 광도와 비슷합니다. 특정 반경(여기서 r은 미터 단위)을 가진 구형 조명의 USD 세기는 다음의 공식을 통해 그 근사치를 구할 수 있습니다.
USD intensity = candela * 1000 * / (4PI r*r)
반경이 센티미터 단위일 때는 다음의 공식을 사용합니다.
USD intensity = candela * 1000 / (4PI(0.01r)*(0.01r))
반경은 Omniverse Renderer의 주요한 속성 중 하나입니다. 최소 2cm의 반경을 적용하기를 권장합니다. 더 자세한 예제는 iClone Omniverse 커넥터 튜토리얼의 ‘아이클론과 Omniverse의 조명 설정(Light Settings in iClone & Omniverse)’을 참고하세요.
리얼루전의 비전
리얼루전은 현재 단방향 실시간 동기화 커넥터의 프로토타입을 개발하고 있습니다. 아이클론의 취소/재실행 시스템이 메멘토 패턴(memento pattern)과 유사하기 때문에 범용 ID를 가진 오브젝트를 실시간으로 추적하는 테이블을 사용합니다. 이 테이블은 취소와 재실행 기능을 수행한 뒤 업데이트됩니다.
이 솔루션의 작동 원리를 살펴보려면, 리얼루전의 캐릭터 창조와 캐릭터 애니메이션 솔루션을 확인하거나 GTC 2021 세션의 리얼루전 영상을 시청하세요.
NVIDIA Omniverse 포럼과 NVIDIA Omniverse Discord Channel을 방문하면, 더 자세한 정보와 더불어 관련 논의에 함께할 수 있습니다. USD의 추가 리소스는 USD 깃허브, 그리고 NVIDIA가 사전 구축한 라이브러리/툴을 참고하세요.