애니메이터 "저도 언리얼 엔진을 다룰 수 있나요?"

게임뉴스 | 이두현 기자 |



['언리얼 서밋 2018' 발표자 소개] 백동진 전 아시아CGI애니메이션 센터기술지원 팀장은 모션 캡쳐 교육 및 기술지원을 담당했었다. 과거 팅케이스 대표로 재직할 때에는 '태극팬더', 앱 '빨간모자와 아기돼지' 등을 제작했고, 오콘에서 '뽀롱뽀롱 뽀로로' 제작에도 참여했었다.

'언리얼 서밋 2018'에서는 게임뿐만 아니라, 일반 산업 분야 종사자를 위한 다양한 강연이 마련됐었다. 이날 아시아CGI애니메이션에서 언리얼 엔진4를 활용해 모션 캡쳐 분야를 담당하고 교육했던 백동진 전 팀장은 애니메이션 제작 프로세스 소개 및 사례를 발표했다.

그의 소개에 따르면 현재 언리얼 엔진4를 이용한 애니메이션 제작은 정확한 가이드가 제시되어 있지 않다. 처음부터 게임 개발을 위해 준비된 엔진이다 보니 입문서를 보더라도 게임 개발자를 위한 안내서이기 때문이다. 따라서 언리얼 엔진4를 통해 애니메이션을 기획하는 경우 엔진 특성에 맞는 사전 작업을 충실하게 지키는 게 좋다.

리얼 타임 렌더링 엔진은 UE4의 경우 기존 애니메이터가 사용한 프로그램과는 다소 차이가 있다. UE4의 경우 한 번에 수용할 수 있는 데이터양의 한계치가 있으므로 기존 방식보다는 폴리곤 수와 쉐이더, 텍스처 등을 경제적으로 운용해야 한다. '리깅'도 차이가 있기 때문에 미리 고려해야 한다.

애니메이션은 게임보다 폴리곤 수에 있어서 민감하다. 보통 애니메이션은 하이 폴리곤에 맵을 거의 안 쓰고, 모델링은 단색에 약간의 화사한(뽀샤시)한 디자인이다. 하이 폴리곤에서 로우로 넘어갈 때 이질감이 다소 발생하기 때문에 애니메이션 업계에서는 못 받아들이는 경향이 있다.


애니메이터를 위한 UE4에서의 모델링



▲ 일반적으로 게임과 애니메이션의 모델링은 다르다

백동진 팀장은 UE4를 사용할 경우 폴리곤 수를 최대한 합리적으로 고려해 모델링해야 한다고 조언한다. 기존 렌더링 방식의 subdivision이 적용되지 않아 smoothing group와 displacement shader에 의존해야 한다. 추후 subdivision을 지원한다곤 하지만, 현재까지는 너무 각지게 보이지 않는 선에서 폴리곤 수를 타협해야 한다.

폴리곤은 기본적으로 쿼드(quad)형태로 이루어져야 하며, 가급적이면 삼각형이나 오각형 이상의 다각형은 피해야 한다. 이는 엔진에서 표면을 계산할 때 quad로 이루어진 smoothing group을 기본 전제로 계산하기 때문에 자칫 표면이 왜곡되어 보일 수 있기 때문이다. 또한 간혹 다각형이 포함되어 있을 경우에 FBX import시 warning 메시지와 함께 임포트가 안 되는 예도 있다.

그럴 경우에 마야에서는 해당 오브젝트들을 선택 후 modeling > mesh > cleanUp을 실행해주면 임포트 할 수 있다. 배경이나 소품의 경우 여러 개체로 이루어진 경우에는 FBX 익스포트 할 때 반드시 그룹으로 익스포트해야 한다. 그렇지 않으면 오브젝트가 각각 따로 들어와 스태깅하기가 어려워진다.

3ds Max나 마야 등의 모델링 프로그램은 y축을 전방으로 설정하는데, UE4는 x축을 게임의 전방으로 설정해 익스포트할 때 주의해야 한다. maya 2017 이상부터는 파일메뉴에 Send to unreal 메뉴가 따로 생겨서 그걸 이용하시면 축 전환 없이 FBX로 보낼 수 있다.


애니메이터를 위한 UE4에서의 쉐이딩

쉐이더 역시 최대한 적은 수로 운용해야 한다. 같은 쉐이더그룹으로 묶어 가급적이면 2K ~ 4K(텍스쳐 허용 사이즈 - 1X1~ 8192X8192)의 텍스쳐로 통합해 운용하는 것이 유리하다. 언리얼 엔진은 물리 기반의 실시간 렌더러이다. 때문에 쉐이딩 역시 PBR 방식으로 제작하는 것이 좋다.

예로 마야나 맥스의 쉐이더의 경우 specular라는 가상의 하이라이트를 만들어줌으로써 물체의 특성을 정의하는 것에 반해 언리얼은 현실에서의 라이트요소와 배경 등이 쉐이더의 특성(color, metalic, roughness, normal 등)이 만나 실제 물리현상을 이용해 렌더링하는 방식이다.

때문에 제작된 텍스쳐 이미지 한가지 외에 여러 가지 다른 채널 요소들이 필요하다. 이에 가장 적합한 프로그램으로 백동진 팀장은 Allegorithmic사의 Substance Designer, Painter를 추천했다. 직관적인 페인팅이 가능하며 언리얼에서 필요로 하는 텍스쳐 채널들을 함께 뽑아주기도 하고 쉐이더 자체를 디자인해줄 수도 있다.


애니메이터를 위한 UE4에서의 리깅

UE4가 기존 3D 앱에서 애니메이션을 임포트하는 방법은 크게 두 가지다. FBX와 Alembic cache import 방식이다. FBX는 오브젝트의 트랜스폼 키값을 bake 시켜서 직접 가져오는 방식과 joint에 bind 된 mesh의 deform 값을 가져오는 방식, 그리고 mesh 자체의 blendshape 값 자체를 가져오는 세 가지 방식으로 나뉜다.

alembic cache를 가져오는 방식은 FBX Import 방식보다 비교적 근래에 생긴 방법으로써 mesh 자체 vertex의 world 좌표 움직임 값을 캐쉬로 저장해 가져오는 방식이다. 대부분의 deform cache 값을 그대로 import 해준다. 다만 아직은 오류도 많고 UV 좌표는 가져오지만, 쉐이딩 정보를 모두 잃게 돼서 현재는 부분적으로만 제한적으로 사용되고 있다.

맥스의 biped의 경우에는 별문제없이 언리얼 joint Animation으로 제한 없이 임포트 된다. 하지만 maya의 경우 각 스튜디오별로 리깅 하는 방식이 제각각이기 때문에 매우 중요하게 고려되어야 할 사항이다. 언리얼 엔진의 경우 joint animation을 문제없이 import 하기 위해서는 싱글 루트의 조인트를 사용해야 한다. 말하자면 pelvis를 중심축으로 spine이 연결된 단일구조여야 한다.

독립된 조인트를 추가로 사용 때 임포트 시에 에러가 난다. 그러므로 최초 리깅을 하면 싱글 루트로 리깅을 하거나 에픽게임즈에서 플러그인 형태로 제공하는 ART v1.0을 사용할 것을 권장한다. 기존 애니메이션이 다중 루트로 리깅이 되어 있는 경우에는 다시 리깅을 하거나 그렇지 않으면 Alembic cache를 이용해야 한다.



▲ 게임 엔진에 적합하게 싱글 루트로 정리

캐릭터가 아닌 탈 것이나 소품 등의 rigging이 필요한 애니메이션의 경우 가급적 단일 root의 joint를 이용해 bind 해서 익스포트 할 것을 권장하며 간단한 경우에는 자체 mesh를 animations 한 후에 key bake animation을 실행한 후 FBX export 해도 별문제는 되지 않는다.

모든 객체를 익스포트 할 때는 스케일과 위치를 반드시 통일해야 한다. 카메라의 경우 직접 key를 주거나 다른 dummy나 객체에 parents 되는 경우 혹은 curve에 구속되는 경우들이 있는데 간단하게 bake 시킨 후에 익스포트하면 대부분의 경우 문제없이 임포트 된다.


애니메이터를 위한 UE4에서의 이펙트

언리얼 엔진으로 장면 내에 다양한 FX 효과를 추가할 수 있다. 기존 3D 프로그램들만큼 다양한 plug-in을 통해 효과를 누릴 수는 없지만, 제한적으로 구현은 가능하다. 이를테면 마야나 맥스에서 원하는 파티클효과들을 split 방식으로 제작할 수 있으며 volumetric을 이용한 효과들도 제작 가능할 수 있지만 어느 정도 블루프린트를 다룰 줄 알아야 해서 일반적인 아티스트 기반회사에서는 어려움이 있다.

마켓 플레이스에 상용 혹은 무료이펙트들을 저렴한 비용으로 구입해 사용할 수 있다. 이러한 이펙트들은 임포트 된 개체에 soket을 사용해 연동해서 사용한다. atmospheric fog, exponential height for, lensflare, Depth of field 등 기존 렌더러에서 구현된 environment 효과들 역시 실시간으로 추가 및 조정할 수 있다.


마야에서 제작한 어셋을 언리얼로 변환해보자



▲ 애니메이션 데이터를 언리얼로 넘길 때, FBX 파일로 넘기는 방식(자료제공: ACA센터)

언리얼로 어셋을 전환하기 위해 마야에서 정리한다. 이후 마야에서 정리된 어셋을 서브스턴스페이터를 활용해 언리얼에 적합한 어셋으로 변환한다. 만약 언리얼에서 마테리얼을 직접 구성하면 구조가 복잡해져서 데이터가 무거워질 수 있다.

좋은 퀄리티를 유지하면서 씬을 가볍게 구성하려면 서브스턴스에서 재질과 텍스처를 최대한 디테일하게 묘사하고, 그 퀄리티로 디자인된 주요 마테리얼만 추출해 언리얼 재질을 만들면 된다. 다음으로 서브스턴스에서 정리된 어셋을 언리얼로 임포트한 뒤, 컨셉에 맞게 조정한다.


언리얼 엔진으로 애니메이션에 맞는 라이팅 주기

언리얼 엔진에는 모든 라이트마다 트랜스폼 카테고리 안에 모빌리티 프로퍼티가 있다. 그 안에는 스태틱, 스테이셔너리, 무버블 세 가지 세팅이 있는데, 각자 라이팅 방식과 퍼포먼스테 끼치는 영향이 극적으로 다르다.

스태틱 라이트(Static Lights)는 어떤 식으로든 움직이거나 변경할 수 없도록 디자인된 라이트다. 라이트맵 안에서만 계산되며, 한 번 처리된 이후로는 퍼포먼스에 영향을 주지 않는다.

스테이셔너리 라이트(Stationary Lights)는 한 위치에 머물되, 밝기나 색과 같은 것은 바꿀 수 있다. 그러나 밝기를 실행 시간에 바꿔도 직사광에만 영향을 끼치는 데 유의해야 한다. 간접광은 라이트매스에서 미리 계산되어 변하지 않는다.

무버블 라이트(Movable Lights)는 완벽하게 동적인 빛과 그림자를 준다. 위치나 방향, 색, 밝기, 감쇠, 반경 등 거의 모든 프로퍼티를 변경할 수 있다. 이때 라이트 맵에 구워 넣지 않으며, 현재의 간접광을 받을 수 없다.



▲ 언리얼 공식 가이드가 아닌 강연자가 경험으로 파악한 사항

또한, 언리얼 엔진에서는 라이트 모빌리티에 따라 2가지 라이팅 시나리오가 만들어진다. 베이크 라이팅은 스태틱 라이트와 스테이셔너리 라이트를 사용하게 되면, 계산을 통해 라이트맵 안에 간접광과 그림자를 저장해 사용한다. 다이나믹 라이팅은 무버블을 사용할 때 모든 빛과 그림자는 리얼타임으로 변하고 적용된다.

끝으로 백동진 팀장은 언리얼 엔진을 통한 애니메이션 작업이 렌더 타임 절약이 비용 절감으로 이어진다고 소감을 밝혔다. 다만, 아낀 제작비만큼 인원을 줄이질 않길 바랐다. 아낀 제작비로 애니메이션 퀄리티를 올리고, 사람도 더 뽑는다면 더 좋은 애니메이션이 나오리라 전망했다.

댓글

새로고침
새로고침

기사 목록

1 2 3 4 5