[기사 본문]
22일, 코엑스에서 열리고 있는 ‘유나이트 서울 2019’ 2일차 행사에서 퍼니파우의 최재형 CTO와 류재성 TA 팀장이 ‘일곱 개의 대죄: 애니메이션의 감성을 그대로, 개발 최적화’라는 주제로 세션을 진행했다. 이 강연에서는 ‘애니메이션 같은’ 또는 ‘감성적인’ 게임을 개발할 때의 고민과 해결 방법이 소개됐다.
상업적으로 성공한 만화/애니메이션 원작 일곱 개의 대죄를 기반으로 한 게임은 시네마틱 어드벤처 RPG를 표방하고 있으며, 연출 하나, 컷 하나가 연결될 수 있도록 600여 장의 로딩 화면을 수록했다.
이 프로젝트의 진행에 있어 내부에서 바라본 두 가지 측면은 경쟁력과 생산성이었다. 본작의 경우 경쟁력은 애니메이션과 같은 감성의 전달이라 할 수 있는데, 이를 위해 카메라 각도, 연출 등을 연구했다고 한다. 생산성은 비효율적인 요소를 제거해 더 많은 재미를 검증할 수 있게 하는 것이었다.
이를 위한 도전은 캐릭터 랜더링 디자인, 얼굴을 위한 노멀 시프트, 눈썹 랜더링, 캐릭터 FX, 배경 컬러, 군중 표현을 위한 임포스터 등 다방면에 걸쳐 있다.
가장 중요한 부분은 역시 캐릭터 디자인이었는데, 처음에는 단순히 디테일이 높은 모델링을 만들었으나 애니메이션의 감성이 빠져 있었다. 그래서 애니메이션 특유의 단조로운 명암, 선의 강조, 캐릭터의 개성을 살릴 수 있는 의도적인 비율을 차용한 카툰 렌더링을 선택했다. 또 카툰 랜더링으로 변경하면서 디테일이 필요한 눈, 머리, 눈썹 등에는 비중을 많이 할애했지만 다른 부분은 생략의 미를 살렸다.
라이팅은 전통적인 셀 쉐이딩을 적용할 경우 라이팅 방향에 따라 어색함이 발생했는데, 매 장면마다 라이트의 방향을 바꾸는 것이 너무 비효율적이라 애니메이션을 참고, 캐릭터 방향에 상관 없이 가장 예쁘게, 가장 감정이 잘 전달되는 방향으로 고정하게 되었고, 택스처 방향에만 좌우되는 맷캡 캐릭터 쉐이더로 변경해 작업 효율을 높였다.
얼굴 그림자는 정면의 경우 코 주위에 어색한 부분이 발생하는 것을 알게 되어 애니메이션을 참고하니 코와 입 주변에 음영이 없을 뿐 아니라 아예 생략하는 경우도 있어서 얼굴 그림자에 버텍스 컬러 알파를 사용, 값이 0에 가까울수록 정면을 향하는 노멀이 되게 했다.
눈썹은 애니메이션을 보면 머리카락 밖으로 빠져나가는 경우가 있는데 그 이유는 캐릭터의 표정이 잘 보이게 하기 위함이었다. 이를 위해 캐릭터에 뎁스 테스트 그레이터 이퀄을 사용, 머리카락 위에 표현했다.
연출에서의 캐릭터 표현은 전투 중 발생하는 상태 이상 효과를 의미한다. 그런데 이 때마다 쉐이더를 변경하거나 모델링을 교체하면 비용이 너무 커지기 때문에 기존 맷캡에서 간단히 텍스처를 교체하는 식으로 빙결, 헤비메탈, 석화 등을 나타냈다.
이펙트에 의한 광원 효과 역시 맷캡 변경으로 광원 효과를 추가, 별도의 광원을 적용하지 않고도 비슷한 효과를 얻었다.
배경은 초보자 마을의 경우 대낮처럼 밝아서 심심한 느낌이 강했다. 그래서 구름 그림자를 넣기로 했는데, 배경 맵 전역에 색상, 크기, 속도 조절이 가능한 구름 효과를 적용, 보다 다이나믹한 느낌을 주었다.
또 배경이 LUT 텍스처와 프랍을 추가하여 효율적으로 다양한 배경을 생성했다. 아래 그림에서 가장 왼쪽이 기본 배경인데, 가운데는 오후 같은 연출, 가장 오른쪽은 파괴된 것 같은 연출을 가미한 것이다.
임포스터는 한 화면에 다수의 캐릭터가 필요할 때 2D 빌보드로 교체, 폴리곤과 드로우 콜을 절약하는 기술이다. 이는 게임 중간에 많은 관중들의 응원을 받으면서 두 캐릭터가 싸우는 장면이 있기 때문에 적용하게 되었는데, 카메라 개수, 위치, 각도, 거리 등을 조절하여 아틀러스 텍스처를 출력한 뒤 상황에 맞게 적용한 후 임포스터 쉐이더로 애니메이팅을 구현했다.
아래 사진에서 왼쪽은 폴리곤으로 만든 모델, 오른쪽은 임포스터 텍스처로 만든 캐릭터인데, 구분하기가 쉽지 않으며, 아틀러스 텍스처 2장을 이용해 원했던 군중 캐릭터를 만들 수 있었다고 한다.
다음은 생산성과 관련한 부분이었다. 페이셜 애니메이션은 처음에 본 애니메이션과 결합되어 있다 보니 상황 별로 신규 모션을 제작해야 했다. 그래서 애니메이션 시스템과 분리, 시스템을 통한 동작 제어를 추구하게 되었고, 그런 중에도 고품질 페이셜이 나올 수 있도록 하기 위해 블렌드 쉐이프를 사용했다.
기준이 되는 15개 쉐이프를 만든 후 이를 자연스럽게 연결 될 수 있도록 페이셜 툴을 제작, 자동 대화형 애니메이션을 만들면서 작업 속도가 크게 증가했다.
본 애니메이션에 결합된 또 다른 요소로 룩엣 시스템이 있다. 이것 역시 비용 문제로 애니메이션 시스템과 분리하게 됐는데, 처음에는 좌우로 90도씩 회전할 수 있도록 간단히 구현했으나 캐릭터가 정면만 보는 것은 아니었기에 머리만 돌아가는 것이 아니라 머리, 목, 가슴 순으로 회전하게 만들었다.
또 목만 돌아가는 경우 특정 모션에서 이상하게 보이는 경우가 많아 특정 회전각에 제한을 가했으며, 골반과 어깨 선을 중심으로 최대 회전각을 제한하여 머리가 빙글빙글 돌아가는 일이 일어나지 않게 했다.
스토리 텔링은 원화가의 콘티를 보고 이를 기반으로 만든 연출, 전통적인 대화 연출, 애니메이션을 그대로 옮긴 연출 등 세분화된 연출이 존재하다 보니 컷 단위 편집과 섬세한 카메라 연출이 가능하게 하는 툴을 제작했다.
화면 효과(포스트 이펙트)는 하나의 브라이트 패스를 통해 만드는 방법 대신 여러 개의 다운스케일링 된 버퍼를 이용하는 블룸을 사용했고, 색수차 현상은 실제보다 과장하여 표현했다. 또 과거 회상 씬에 자주 쓰이는 오래된 필름 효과 연출도 따로 만들었으며, 이들을 보다 생산성 높게 사용하기 위하여 디자이너가 간단한 조작으로 효과를 삽입할 수 있도록 우버쉐이더를 활용했다.
비헤비어 트리 시스템(BTS)은 코드 재사용성을 강화하는 동시에 빠른 대응 및 피드백을 위해 적용했다. 이는 4가지 노드의 계층적 연결을 통해 if/else, switch/case를 시각적으로 구현하는 모델링 방식으로, 간단한 AI를 이용해 기존 코드의 수정 없이 기능 개선 및 추가가 가능하다.
개발팀은 이 BTS를 잦은 변경이 이루어지는 튜토리얼 등에 사용했는데, 노드 간 독립성의 핵심이라 할 수 있는 블랙보드를 이용, 클래스 종속 없이 코드 재사용성을 높인 것이 특징이다.
이 외에도 오늘 프리젠테이션에는 내용이 없지만 캐릭터 원화를 생성하는 딥 러닝과 밸런스를 검증하는 머신 러닝도 개발에 활용했다고 한다.
아래는 이후 이어진 질의 응답을 정리한 것이다.
● 캐릭터 동작을 제작하는 팁이 있다면? 모션 캡쳐 장비라던가…
모션 캡쳐 장비는 특수한 경우에만 사용했다. 그 이유는 애니메이션의 과장된 액션을 표현하는데 모션 캡쳐보다 직접 키를 잡는 쪽이 유리했기 때문이다.
● 카메라워크는 어떻게 구현했나? 혹시 시네머신을 썼나?
자체적으로 구현했다. 시네머신은 우리가 원하는 카메라워크에 맞지 않았기 때문이다.
● 일본 CBT에서 어떤 이슈가 있었는지 궁금하다.
정말 많이 고민했고 준비도 했는데, 반응은 뜨거웠지만 이슈는 딱히 없었다.
● 개발 기간은 어느 정도 걸렸는지?
약 2년 정도 걸렸다. 사실 개발 기간이 중요한 게 아니라 어떤 사람이 모이는가가 중요하지 않나 싶다. 이번 프로젝트에서 특히 그런 부분을 많이 느꼈는데, 좋은 사람이 모이니 퀄리티가 점점 높아지더라.
● 개발을 하면서 어떤 사람과 함께 할 때가 가장 즐거웠는가?
실력 좋은 친구들과 함께 하는 것이 가장 즐거울 것 같았는데 실제 해보니 힘들었고, 다음으로 인성 좋은 친구들과 함께 했는데 그것도 힘들었다. 결국 실력과 인성이 모두 좋으면서 커뮤니케이션에 적극적인 친구들과 함께 하는 게 가장 좋더라. 너무 정답 같은 말이지만 직접 겪은 일이라 정말 마음에 와 닿는다.
● 블랙 보드는 어떤 식으로 생성하나?
전체 BT에 맞는 블랙 보드 하나를 갖는 게 가장 좋은 방식인 듯하다. 사실 어떤 식으로 사용해도 관계 없지만, 논리적인 BT 안에 또 다른 BT가 들어가는 경우가 있어, 그것까지 블랙 보드에 담아내는 게 좋은 것 같다.
● 포스트 이펙트를 쓸 때 최저 사양에서 프레임은 얼마나 나오는가?
프로파일링이 필요할 듯하다. 처음에는 잘 나오지 않았지만 해상도를 줄인다든지 하는 식으로 프레임을 높였고, 현재는 2GB 안드로이드폰… 갤럭시 S6 정도에서 45~60fps가 나와 게임 진행에 무리가 없다.