2022년 몬트리올에 설립된 Strange Shift Studio는 Matthieu Fiorilli가 설립한 1인 독립 게임 스튜디오입니다.
체이싱 디 언신(Chasing the Unseen) 프랙탈 수학을 활용하여 생성한 거대 크리처에 올라타고 외계 환경을 탐험해 보는 게임입니다. 1인 게임 개발자로서 이렇게 야심 찬 프로젝트에 도전하려면 알맞은 툴이 필요했습니다. 이번 기술 블로그에서는 체이싱 디 언신의 개발 과제를 어떤 방식으로 해결했는지 살펴보고자 합니다.
이런 종류의 프로젝트는 비교적 최근까지 불가능했을 것입니다. 최근 몇 년 사이에 인디 개발자를 지원하는 여러 툴들이 크게 발전했습니다. 이 프로젝트가 가능했던 것은 에픽, 사이드FX(SideFX) 등의 노력으로 이처럼 강력한 툴을 누구나 사용할 수 있게 되었기 때문입니다.
이렇게 야심 찬 프로젝트에 접근하려면 꼭 맞는 툴이 필요하다고 생각했습니다. 그때 발견한 것이 언리얼 엔진과 Houdini를 함께 사용하는 것이었습니다.
크리처
먼저 크리처와 등반 시스템을 살펴보겠습니다.
Matthieu Fiorilli 이미지 제공
인게임 스크린샷
제 크리처는 Houdini의 다양한 툴을 활용하여 만들었습니다. 문어를 예로 들면, Houdini의 기존 툴을 사용해서 프로시저럴 모델링을 하고 Vellum이라는 Houdini의 최신 멀티 솔버를 활용하여 시뮬레이션했습니다. 이 시뮬레이션 덕분에 매우 자연스럽고 유연한 디포메이션이 가능합니다. 여기서의 난관은 에셋을 언리얼 엔진으로 가져와서 올라탈 수 있게 만드는 작업입니다. 이 작업에는 Dem Bones라는 강력한 툴을 활용했습니다. Houdini에서 제작한 문어 시뮬레이션은 매우 무겁습니다. 지오메트리의 각 지점마다 자체 애니메이션이 있기 때문에 이런 상태로는 게임 엔진으로 간단하게 가져올 수 없습니다. Dem Bones를 활용하면 본과 스키닝을 절차적으로 생성하고 게임 엔진 친화적인 데이터로 시뮬레이션을 재구성할 수 있습니다. 즉, 128,000개에 달하는 문어의 버텍스/포인트마다 개별 애니메이션을 갖추는 대신 600여 개의 본에만 애니메이션을 갖추게 됩니다.
Matthieu Fiorilli 이미지 제공
Dem Bones로 베이킹한 Vellum 시뮬레이션
이제 크리처를 언리얼 엔진으로 가져와 실시간으로 재생할 수 있습니다. 언리얼 엔진에서는 스테이트 머신으로 서로 다른 애니메이션을 혼합합니다. Dem Bones에서 생성한 스키닝 정보를 바탕으로 콜리전의 컨벡스 헐을 절차적으로 생성할 수 있으며, 그 결과물은 커스텀 툴을 통해 언리얼 엔진으로 들어옵니다.
Matthieu Fiorilli 이미지 제공
언리얼 엔진의 콜리전 메시
이렇게 생성한 저해상도 메시는 등반 기능을 위해 언리얼 엔진으로 불러옵니다. 블루프린트와 C++를 활용한 등반 시스템은 저해상도 메시를 사용하여 크리처에 캐릭터를 어태치할 수 있습니다.
Matthieu Fiorilli 이미지 제공
블루프린트와 C++를 활용한 등반 시스템
환경
환경에는 프랙탈 수학과 다른 프로시저럴 기술을 활용합니다. 프랙탈은 이와 같이 짧은 수학 공식으로 무한히 자가 반복되는 형태를 생성합니다. 가장 잘 알려진 것은 망델브로 집합(Mandelbrot set)입니다.
Wikipedia 이미지 제공
Wikipedia의 망델브로 집합 이미지
망델브로 집합은 브누아 망델브로의 이름을 딴 2D 프랙탈입니다. 이 발견이 있은 후 수년 뒤에는 이와 유사한 형태의 3D 버전 망델벌브(Mandelbulb)가 발견되었습니다.
여기서 의문점이 하나 생깁니다. 어떻게 게이밍에 프랙탈을 구현할 수 있을까요? 저는 Houdini와 언리얼 엔진을 함께 사용하여 이 문제를 해결할 수 있었습니다. Houdini에서 주라즈 토모리(Juraj Tomori)의 졸업 프로젝트인 VFX 프랙탈 툴키트를 사용하여 프랙탈을 생성한 뒤 이를 둘러싼 파이프라인을 개발하여 언리얼 엔진으로 가져올 수 있게 지오메트리를 준비합니다. 이 파이프라인은 각 레벨에 따라 프랙탈 및 기타 프로시저럴 메시 생성 메서드에 활용됩니다.
Matthieu Fiorilli 이미지 제공
게임 레벨을 위해 생성된 프랙탈 메시
언리얼 엔진에서 프랙탈을 사용하려면 많은 작업을 거쳐야 합니다. 너무 사소한 디테일은 제거하고, 보행용 평면 슬로프를 생성하고, 언리얼 엔진의 적절한 오클루전에 맞춰 메시를 분할하고, 메시를 줄이고, LOD 생성, UV, 라이트맵 등 해야 할 작업이 아주 많죠. 이 모든 프로세스는 전부 언리얼 엔진 요구사항에 맞춰 자동으로 진행됩니다.
Matthieu Fiorilli 이미지 제공
레벨의 인게임 스크린샷
이 모든 프로세스를 통해 마침내 언리얼 엔진에서 레벨이 구성되면 라이팅 시스템을 활용하여 라이트맵을 굽습니다. 레벨이 여러 조각으로 나뉘어 있기 때문에 언리얼 엔진의 오클루전 시스템은 카메라에 보이는 메시만을 아주 훌륭하게 그려냅니다. 언리얼 엔진의 LOD 시스템은 카메라 거리에 따라 필요한 밀도의 메시만을 그려냅니다. 그리고 콜리전용으로 사용할 별도의 저해상도 메시를 생성합니다.
Matthieu Fiorilli 이미지 제공
게임 레벨의 인게임 스크린샷
맺는말
이렇게 해서 제 게임의 크리처, 등반 시스템, 레벨을 어떻게 다루었는지 간략하게 살펴보았습니다. 게임 개발 내내 이를 핵심 워크플로로 활용했으며, 필요하다면 크리처나 레벨에 따라 조금씩 변형하여 도입할 수도 있습니다.
이 프로젝트의 과제를 해결하기 위한 솔루션을 찾는 과정은 꽤 힘들었지만 인디 개발자이기에 최신 툴을 자유롭고 유연하게 활용하며 난관을 돌파할 수 있었습니다. 이 블로그가 프로젝트의 기술 프로세스에 대한 인사이트를 얻는 데 도움이 되었길 바랍니다. 상용 툴을 활용하여 어떤 작업이 가능한지 파악하고 아이디어를 얻는 정도라도 괜찮습니다.