저는 크리스 생클랜드(Chris Shankland)입니다. 오디세이 인터랙티브(Odyssey Interactive)의 CTO이며, 이전에 오메가 스트라이커스(Omega Strikers)에 테크니컬 리드로 참여했습니다. 오메가 스트라이커스는 빠른 속도로 진행되는 3대3 격투 축구 게임으로, 상대를 경기장 밖으로 몰아내서 골대까지 길을 뚫는 것이 기본인 게임입니다. 저희는 PC, PlayStation, Xbox, Nintendo Switch, iOS, 그리고 Android까지 모든 주요 플랫폼에 오메가 스트라이커스를 출시했습니다. 모바일에서 고퀄리티의 경쟁력 있고 시각적으로 만족스러운 경험을 선사하기 위해 저희가 사용한 몇 가지 기술에 대해 설명해 드리겠습니다. 오메가 스트라이커스를 고퀄리티로 빠르게 출시할 수 있었던 것은 팀 전체의 노력 덕분입니다. 저는 그저 저희가 겪은 어려움과 사용한 솔루션을 알려드리는 가이드로서 비슷한 게임에 통찰력과 가치를 전달할 수 있기를 바랍니다.
오메가 스트라이커스는 기본적으로 경쟁 게임이기에, 무엇보다도 진정한 경쟁을 우선시합니다. 이는 실질적으로 퍼포먼스와 명확한 게임플레이, 컨트롤에 중점을 둔다는 뜻입니다. 저희는 이러한 기준을 바탕으로 게임의 놀라운 아트가 빛을 발하도록 비주얼 퀄리티에 매진합니다. 비주얼과 퍼포먼스 측면에서 원대한 목표를 달성하기 위해서는 메모리와 CPU, GPU라는 몇 가지 익숙한 제약 사항을 관리해야 합니다. 이런 각 영역에 대한 구체적인 예시를 통해 출시에 걸림돌이 되는 어려움을 파악하고 궁극적으로 해결하는 데 사용한 프로세스를 설명해 드리겠습니다.
오메가 스트라이커스는 캐릭터 기반 게임으로, 출시 시점의 캐릭터는 15명이고 정기적인 콘텐츠 업데이트를 통해 캐릭터 수가 계속 늘어나고 있습니다. 개발 초기로 거슬러 올라가면, 캐릭터도 적고, 커스터마이징과 자리표시자 그래픽도 모두 적었습니다. 당시에는 캐릭터와 모든 캐릭터 관련 콘텐츠에 대한 글로벌 하드 레퍼런스 세트를 유지하는 것이 매우 편리했습니다. 대부분의 개발 과정에서 최소 사양 디바이스로 내부 테스트를 진행하면 이 구성에 아무런 문제가 없었습니다. 하지만 출시가 다가오면서 비주얼 퀄리티와 양이 급격하게 증가했습니다. 이런 고퀄리티 에셋으로 한동안 개발을 진행하자 메모리 문제가 누적됐고 최소 사양 디바이스에서 게임이 부팅되지 않는 상황에 이르렀습니다.
초기 오메가 스트라이커스 빌드의 패키지 시각화
그 시점에서는 두 가지 일반적인 전략을 사용할 수 있었습니다. 에셋 크기를 줄이거나 상시 로딩 체계에서 요청 시 로딩 체계로 에셋 관리 방식을 완전히 개편하는 것이었습니다. 요청 시 로딩 체계가 라이브 서비스 모델의 확장성 기대치에 잘 맞았기에 그 방향으로 진행했습니다. 리팩터링은 텍스처나 캐릭터 같은 대형 에셋에 대한 모든 하드 레퍼런스를 소프트 레퍼런스로 변환하는 작업으로 이루어졌습니다. 에셋을 빠르게 동기식으로 리졸브할 수 있도록 게임 카탈로그를 나타내는 전체 데이터 에셋 세트를 메모리에 유지했습니다. 이 방법을 사용하여 필요한 리팩터링의 양을 관리할 수 있는 수준으로 제한했고, 대략 1주일 만에 전체 변경 작업을 완료할 수 있었습니다. 이 솔루션을 적용함으로써 다시 메모리 문제를 겪지 않고 새로운 맵과 캐릭터를 포함한 네 번의 오메가 스트라이커스 주요 콘텐츠 업데이트를 성공적으로 출시했습니다.
CPU 퍼포먼스는 저희가 마감에 맞춰 원활하게 출시하기 위해 항상 주의를 기울이는 부분입니다. 개발 기간 내내 CPU 퍼포먼스에 신경 썼으며, 그 덕분에 출시 시기가 다가왔을 때 심각한 최적화 부담을 겪지 않을 수 있었습니다. 여기서 전략은 최소 사양 디바이스에서 정기적으로 플레이하고 퍼포먼스 저하를 우선시하는 것입니다. 문제가 발생하면 언리얼 인사이트를 진단 툴로 사용했습니다.
다양한 모바일 디바이스에서 그래픽 퍼포먼스를 구현하는 것은 어려운 일입니다. 플레이어는 프리미엄 디바이스에서 프리미엄 비주얼 퀄리티를 기대하며 모든 디바이스에서 높은 퍼포먼스를 기대합니다. 오메가 스트라이커스는 커스텀 환경 퀄리티 세팅과 더불어 텍스처와 메시에 표준 레벨 오브 디테일 기법을 사용하여 다양한 그래픽 스케일링을 생성합니다. 이러한 세팅은 CVar를 통해 노출되고 조작되며, 이를 통해 디바이스 프로파일을 생성하고 사용자가 각자의 세팅을 커스터마이징할 수 있습니다. 저희는 최적화 가이드에 사용되는 대다수의 프로파일링 데이터를 제공하기 위해 다시 언리얼 인사이트를 사용합니다. RenderDoc은 저희가 사용하는 또 다른 툴인데, 특정 디바이스 퍼포먼스를 더 자세히 분석하거나 세밀한 타이밍이 필요할 때 플러그인과 함께 사용합니다.
셰이더를 처음으로 사용하면서 히치를 방지하기 위해 모바일 디바이스에서 PSO 캐싱의 필요성이 빠르게 대두되었습니다. 저희는 자동화된 프로세스를 개발했는데, 이를 통해 모든 퀄리티 세팅에서 가능한 모든 비주얼을 자동으로 렌더링하여 실제 디바이스에 디플로이하는 게임 버전을 생성합니다. 자동 실행이 끝나면 애플리케이션이 향후 빌드에 포함되도록 전체 PSO 캐시를 빌드 파이프라인에 퍼블리시합니다.
소규모 팀으로 모바일 디바이스에 오메가 스트라이커스를 출시하고 계속 업데이트할 수 있는 것은 처음부터 모바일용으로 빌드했고 언리얼 엔진에서 제공하는 툴을 활용하여 개발 과정을 최적화했기에 가능한 일입니다. 성능이 떨어지는 디바이스에서 작업을 제거하거나, 에셋 또는 데이터를 적은 메모리 예산에 맞춰 스트리밍하거나, 꼭 필요할 때 모바일 전용 솔루션을 사용하는 등의 전략을 사용했는데, UI나 컨트롤이 좋은 예입니다. 최소 사양 디바이스에서 게임을 정기적으로 검증하면 일정에서 문제가 발생했을 때 당황하는 대신, 문제가 무엇인지 파악할 수 있습니다. 개발 초기에 계획을 수립하고 테스트를 진행한 덕분에 프로덕션을 확장하기 전에 적절한 전략을 세우고 예산을 확보할 수 있었습니다. 이러한 모든 솔루션과 훌륭한 팀 덕분에 광범위한 플랫폼에 오메가 스트라이커스를 출시할 수 있었으며 앞으로도 기대했던 만큼 원활하게 라이브 서비스를 계속 운영할 수 있을 것입니다.
저희가 배운 것이 앞으로 나올 게임에 도움이 되기를 바라며 어서 빨리 그런 게임들을 플레이해 보고 싶습니다!
지금 언리얼 엔진을 다운로드하세요!
세계에서 가장 개방적이고 진보된 창작 툴을 받아보세요.
모든 기능과 무료 소스 코드 액세스를 제공하는 언리얼 엔진은 제작에 바로 사용할 수 있습니다.