성능과 속도 향상을 위한 ‘서브웨이 서퍼스 시티’ 최적화

SYBO는 최신작인 ‘Subway Surfers City’를 ‘Subway Surfers’ 세계관의 새로운 장으로 빌드했습니다. 전작이 전 세계를 무대로 한 반면, 이번 작품은 플레이어를 ‘서브웨이 시티’에 정착시켜 각기 다른 구역과 더욱 다채로운 게임플레이를 선보입니다.
클래식 무한 러닝 모드와 더불어, 이 게임은 주기적으로 열리는 이벤트와 시티 투어와 같은 한정된 기간 동안 즐길 수 있는 경험도 선보입니다. 이 새로운 모드들은 전 세계 수백만 명의 플레이어에게 사랑받는 이 시리즈의 특징인 반응성과 게임의 흐름을 그대로 유지하면서도, 진행 방식과 게임플레이 시스템을 한층 더 확장합니다.
이 비전의 핵심은 게임의 그래픽스 품질을 한 단계 높이는 것으로, 향상된 애니메이션, 더욱 입체감 있는 배경, 그리고 확장된 게임플레이 기능을 특징으로 합니다. 하지만 이러한 개선 작업이 명확성이나 런타임 효율성을 저해해서는 안 됩니다.
이번 작업의 과제는, 누적 다운로드 수 45억 건을 돌파하며 전 세계적인 성공을 거둔 원본의, 원래의 즉각적인 매력을 그대로 유지하면서도, 러너 장르에 현대적인 해석을 더해 익숙하면서도 신선한 경험을 선사하는 것이었습니다.
목표:
다양한 기기에서 원활하게 구동되며 일관된 성능을 유지하는, ‘Subway Surfers’의 높은 정확도를 가진 후속작을 선보입니다
플랫폼:
iOS, Android
위치:
덴마크 코펜하겐
프로젝트 인력:
35
서브웨이 서퍼스 시티: Unity 활용 사례
개발팀은 ‘Subway Surfers City’를 확장 가능한 라이브 게임으로 구축하여, 향후 수년에 걸쳐 대대적인 코드 개편 없이도 연속적인 콘텐츠 업데이트, 새로운 게임 메카닉, 그리고 더욱 높은 정확도를 지원할 수 있도록 했습니다. SYBO의 수석 게임 디자이너 아타시 카심은 “기술적인 측면에서도 디자인과 콘텐츠가 창의적인 측면에서 확장되는 속도와 동일한 속도로 확장되어야 했다”고 말했다.
이 팀은 모듈성과 성능에 중점을 두고 아키텍처를 설계했습니다. 이들은 시스템을 캡슐화하고 확장함으로써, 디자이너들이 핵심 게임플레이 루프의 안정성을 해치지 않으면서도 게임플레이 요소나 환경적 배리에이션을 추가할 수 있게 해주었습니다.
동시에, 정확도가 높아짐에 따라 성능상의 문제도 발생했습니다. 세밀한 환경, 고해상도 에셋, 그리고 더욱 정교해진 애니메이션은 중저사양 기기에 부담을 줄 수 있습니다. SYBO의 기술 총괄인 가브리엘 라스카노는 “우리는 메쉬와 셰이더의 복잡도에 대한 엄격한 제한을 설정하고, 다양한 품질 수준과 해상도 조정 기능을 갖춘 계층형 렌더링 경로를 구현했으며, 대표적인 기기들을 대상으로 연속적으로 성능 분석을 수행했습니다”라고 설명합니다. “또한 셰이더 사전 로딩을 위한 최적의 시점을 찾기 위해 많은 노력을 기울였으며, 빠른 로딩 시간과 런타임 시 셰이더 컴파일로 인한 불안정한 현상 사이의 균형을 맞추었습니다.”
그들은 무작정 최적화를 시도하기보다는, 타일 기반 GPU에서 발생하는 과도한 마이크로 트라이앵글 밀도와 프래그먼트 오버드로우를 비롯한 실제 병목 현상을 식별했다. 그 결과, 안정성과 폭넓은 기기 호환성을 유지하면서도 복잡도가 증가함에 따라 유연하게 발전할 수 있는, 성능 중심의 기반이 구축되었습니다.

결과
- 꾸준히 60 FPS를 유지합니다
- 성능 최적화 단계 이후 지원 기기 수가 5.9배 증가했다
- 스카이라인을 26만 개에서 소수의 버텍스로 줄이고, 드로우 콜을 27개에서 불과 몇 개로 줄였습니다
- 저사양 기기에서 프레임당 GPU 처리 완료를 기다리는 10ms의 지연 시간을 제거했습니다
- 애니메이션 및 렌더링 관리 오버헤드를 약 50~60% 줄여, 저사양 Android 기기에서 메인 스레드 CPU 시간을 약 2ms 확보했습니다.
신속한 반복 개발을 위한 레벨 설계
‘Subway Surfers City’의 레벨 디자인은 속도와 유연성을 중점으로 구성되었습니다. 이 시리즈의 특징인 다양성과 반응성을 구현하기 위해, 개발팀은 청크 기반의 절차적 시스템을 활용하여 디자이너들이 Unity 에디터 내에서 독립적인 세그먼트를 자유롭게 생성, 조정 및 조합할 수 있도록 했습니다.
각 청크에는 일관성을 유지하면서도 반복적인 실행이 참여를 유도하도록 하는 레이어 요소와 배리에이션 규칙이 포함되어 있습니다. 이 시스템은 확장 가능한 레벨 확장을 활성화하여, 전체 경로를 다시 정의할 필요 없이 무한 모드나 유한 모드에 새로운 청크를 직접 추가할 수 있게 해줍니다.
디자이너들은 에디터를 사용하여 장애물의 움직임을 시뮬레이션하고, 상호작용을 미리 확인하며, 동적 요소를 실시간으로 테스트합니다. “플레이어들은 게임을 끝까지 플레이하지 않고도 챕터가 어떤 느낌일지 정확히 경험할 수 있습니다,”라고 라스카노는 설명한다.

서브웨이 서퍼스 시티 | SYBO
스냅 기능이 있는 배치 도구와 Unity의 콜라이더 시각화 기능은 반복 작업을 더욱 효율적으로 만들어 주어, 정밀도 높은 신속한 조정이 가능하게 했습니다. ‘시티 투어’와 같은 단계별 모드의 경우, 디자이너들은 전체 프로젝트 컴파일 과정을 거치지 않고 에디터에서 직접 특정 부분이나 단계를 실행했습니다.
모듈식 구조체는 콘텐츠의 신속한 배리에이션도 지원합니다. “우리의 레벨은 매우 모듈식입니다,”라고 카심은 말한다. “우리는 다양한 레벨 디자인 배리에이션에 맞춰 제작된 여러 가지 프리팹을 보유하고 있으며, 이를 챕터에 드래그 앤 드롭할 수 있습니다.” “각 챕터는 여러 레이어로 구성되어 있어, 플레이어가 같은 세그먼트를 통과할 때마다 다양한 배리에이션을 경험하게 되어 게임플레이가 지루하지 않습니다.”
개발팀은 모듈식 레벨 아키텍처와 실시간 시각화 기술을 조합하여, 품질을 저하시키지 않으면서도 반복 작업 속도를 높였습니다. 라스카노가 참고했듯이, “이 시스템을 통해 디자이너들은 자유롭게 실험하고, 콘텐츠를 효율적으로 확장하며, 무한 게임플레이 모드와 유한 게임플레이 모드 모두에서 플레이어가 기대하는 반응성과 완성도를 유지할 수 있습니다.”

서브웨이 서퍼스 시티 | SYBO
Addressables를 활용한 메모리 관리
Addressables 시스템은 성능 저하 없이 풍부한 비주얼과 광활한 환경을 구현하는 데 있어 팀의 핵심적인 역할을 합니다. 개발팀은 Addressables를 활용해 플레이어와 관련된 부분만 로드하고(이미 언로드된 섹션은 언로드하며 새로운 섹션을 스트리밍하는 방식), 이를 통해 메모리 사용량을 최소화하고 풍부하고 역동적인 콘텐츠를 구현했습니다.
라스카노는 “청크들은 Addressables 시스템을 통해 엄격한 유효기간 관리 하에 스트리밍 방식으로 송수신되며, 이를 통해 메모리 사용량이 전체 콘텐츠 크기가 아닌 실제 게임플레이 상황에 따라 조정되도록 보장합니다”라고 설명한다. “풀링과 조합하면, 콘텐츠 규모가 확대되더라도 할당 급증을 최소화하고 런타임 메모리를 안정적으로 유지할 수 있습니다.”
Addressables 시스템을 통해 팀은 콘텐츠를 기본 빌드에서 분리하고, 레벨 청크를 독립적으로 로드 가능한 단위로 다룰 수 있습니다. 라스카노는 “이는 초기 다운로드 용량을 줄이고 런타임 동안 메모리 점유량을 조절함으로써 스토어 규정 준수를 유지하는 데 핵심적인 역할을 했다”고 말했다.

서브웨이 서퍼스 시티 | SYBO
기기 유형별 성능 확장
‘Subway Surfers City’의 그래픽은 저사양, 중사양, 고사양 기기 전반에 걸쳐 최적화되어 있으며, 섬세한 화질과 안정적인 프레임 속도를 유지합니다. 팀은 엄격한 병목 현상 우선 최적화 방법론을 따랐다. 제약 조건이 하나씩 제거될 때마다, 프로파일링 분석을 통해 다음 제한 요인이 드러났다. 라스카노는 “이러한 반복적인 과정을 통해 우리는 광범위하고 초점이 흐릿한 최적화에 의존하는 대신, 체계적으로 지원 기기 범위를 확대할 수 있었다”고 말했다.
개발팀은 유니버설 렌더 파이프라인(URP)과 스크립터블 렌더 파이프라인(SRP) 배처(batcher)를 함께 사용하여, GPU에 머티리얼 상수 버퍼를 캐싱하고 동일한 셰이더 변형을 공유하는 오브젝트 간에 이를 재사용함으로써 CPU 렌더링 오버헤드를 줄였으며, 이를 통해 렌더 스레드에서 드로우 콜(드로우 콜)당 상태 설정 작업을 최소화했습니다.
“우리는 품질 단계별로 여러 셰이더 변형을 구현하고, 전역 키워드와 URP 설정을 통해 이를 제어했습니다.” 라스카노는 “저사양 기기에서는 조명 효과를 줄이고 프래그먼트 경로를 단순화하는 반면, 고사양 기기에서는 에셋 콘텐츠를 변경하지 않고도 완벽한 정확도를 유지합니다”라고 말합니다.

서브웨이 서퍼스 시티 | SYBO
아티스트들은 Amplify 셰이더 에디터를 사용하여 셰이더를 직접 저작함으로써, 엔지니어링 팀의 지원 없이도 창작의 주도권을 행사할 수 있었습니다. 개발팀은 다양한 기기에서 성능을 테스트하고, 복잡한 셰이더를 재작성했으며, 도시 스카이라인을 비롯한 주요 에셋을 최적화했습니다.
라스카노는 “27개의 드로우 콜에 걸쳐 약 26만 개의 버텍스로 구성된 고버텍스 3D 애니메이션 스카이라인을 플랫 메쉬와 패닝 텍스처로 대체했습니다”라고 말합니다. “이러한 변경을 통해 버텍스 처리량과 미세 삼각형 단편화가 크게 줄어들어, 몇 번의 드로우 콜에 걸쳐 소수의 버텍스만 처리되게 되었으며, 그 결과 저사양 Android 기기에서 GPU 처리 시간을 수 밀리초 단축할 수 있었습니다.”
모바일 GPU에서 미세 삼각형 오버드로우 현상 줄이기
Mali GPU 기기에 대한 초기 GPU 프로파일링 결과, 해당 애플리케이션을 통해 가시적인 픽셀에 실질적으로 기여하는 것보다 훨씬 더 많은 지오메트리가 전송되고 있는 것으로 드러났다. 제출된 기본 중 약 33%만이 표시되었으며, GPU는 샘플 테스트 컬링을 통해 약 25%를 폐기했습니다(이상적인 수치는 5% 미만입니다). 또한, 미세 삼각형에 의한 부분 커버리지는 지속적으로 50~80%에 도달했다(이상적인 수치는 10% 미만이다).
이 결과는 해당 애플리케이션이 과도한 미세 삼각형 밀도를 생성하고 있음을 보여주었는데, 이는 타일 기반 모바일 GPU에서 잘 알려진 비효율성 문제로, 지오메트리가 화면 픽셀을 간신히 덮는 경우에도 프래그먼트 처리 비용이 크게 증가하는 원인이 됩니다. 이 팀은 커스텀 적응적 시스템을 사용하여 CPU 및 GPU 부하를 실시간으로 모니터링합니다. 목표 성능을 유지하기 위해 품질, 에셋 인스턴스화, 거리 기반 컬링, 그리고 고해상도 프랍과 같은 비필수 요소를 동적으로 조정합니다.
“이에 대응하여 폴리곤 수를 대폭 줄이고, 정적 지오메트리의 뒷면을 제거하며, 스카이라인 메쉬를 단순화하고, 청크별 메시 메모리 할당량을 엄격하게 적용했습니다.” 라스카노는 “이를 통해 저사양 Android 기기에서 프래그먼트 처리 부하가 크게 줄어들었고 GPU 사용 시간도 안정화되었습니다”라고 말합니다. “버텍스 컬러, 폴리곤 수 제한, 그리고 정적 지오메트리에서 뒷면을 제거함으로써 게임의 시각적 품질에는 영향을 주지 않으면서 GPU 처리 부하를 더욱 줄일 수 있었습니다.”

서브웨이 서퍼스 시티 | SYBO
프로파일링을 통한 지원 기기 확대
개발 초기에는 그래픽스 복잡도가 높아 지원되는 기기 중 16%만이 ‘Subway Surfers City’를 실행할 수 있었습니다. 프로파일링 과정에서 팀은 GPU 프래그먼트 비용과 셰이더 복잡도뿐만 아니라 CPU 제출 오버헤드 및 메모리 리텐션 문제 등 끊임없이 변화하는 병목 현상에 직면했다.
지원되는 기기 범위를 확대하기 위해, 개발팀은 커스텀 프로파일링 도구와 더불어 Project Auditor 및 Memory Profiler를 적극 활용했습니다. Project Auditor를 통해 과도한 셰이더 변형이나 중복되거나 잘못된 설정 등 구성 및 에셋 수준의 비효율성을 식별할 수 있었으며, 런타임 병목 현상은 Unity 프로파일러와 RenderDoc, Snapdragon Profiler와 같은 기기 수준 프로파일링 도구를 사용하여 분석했습니다.
Memory Profiler는 에셋 메모리 사용량의 핫스팟을 파악하여, 메모리 사용량 급증이나 불필요한 리텐션을 유발하는 텍스처, 메시 또는 오브젝트를 정확히 찾아냈습니다.

서브웨이 서퍼스 시티 | SYBO
“프로파일링 기능이 릴리스 게이트에 통합되었습니다.” 라스카노는 “모든 주요 빌드는 회귀 현상을 방지하고 특정 기기 계층에서 이루어진 개선 사항이 다른 계층에 불안정성을 초래하지 않도록 CPU, GPU 및 메모리 할당량에 맞춰 확인되었습니다”라고 설명합니다.
팀은 이러한 지표를 체계적으로 분석하여 최적화 작업의 우선순위를 정하고, 폴리곤 수와 메모리 할당량을 준수하며, 저사양 기기에서도 안정적인 프레임 빈도를 보장했습니다.
또한 팀은 중복 및 충돌을 방지하기 위해 내부적으로 Addressables 검증을 수행했으며, 모듈식 청크 시스템과 오브젝트 풀링을 통해 게임플레이 중 발생하는 메모리 급증 현상을 최소화했습니다.
최고 성능보다 프레임 안정성을 우선시함
렌더링에 있어 팀은 테스트 매트릭스 전반에 걸친 성능 측정 결과를 바탕으로, 저사양 기기에서도 안정적인 프레임 빈도를 유지하기 위해 Vulkan 대신 OpenGL을 선택했습니다.
라스카노는 “Vulkan은 고사양 기기에서는 우수한 성능을 보였지만, 프로파일링 결과 저사양 Android 하드웨어에서는 렌더 스레드 정지와 불안정한 프레임 빈도가 확인되었다”고 말했다. “OpenGL은 타겟 디바이스 매트릭스 전반에 걸쳐 더 일관된 프레임 시간을 제공했기 때문에, 우리는 이론상 최고 성능보다는 기기 호환성과 프레임 안정성을 우선시했습니다.”
Adaptive Performance, 계층형 셰이더, SRP 배칭, 그리고 에셋 기반 최적화 기술과 조합된 이 프로파일링 방식 덕분에, 지원되는 기기의 95%에서 풍부하고 섬세한 그래픽이 원활하게 구동될 수 있었습니다.
라스카노는 “Unity의 통합 성공(Integrated Success) 팀과의 협력을 통해, 우리가 이미 검토 중이던 결정 사항들을 확인하고 가속화할 수 있었으며, ROI (투자 대비 수익률)를 기준으로 최적화 방안을 평가할 수 있었다”고 말했다. “가장 큰 게인은 일반적인 모범 사례를 적용하는 것보다, CPU에 의존하는 바운딩 볼륨 업데이트, 메쉬 스키닝 중복, GPU 프래그먼트 처리 비용 등 실제 병목 현상을 체계적으로 제거한 데서 비롯되었습니다.”

서브웨이 서퍼스 시티 | SYBO
주요 성과 관련 교훈 공유
성능 최적화와 관련하여 라스카노는 LOD(디테일 수준(LOD)) 시스템이나 Vulkan과 같은 모범 사례를 가설로 간주하고, 게임의 컨텍스트에 맞춰 테스트해 볼 것을 강조한다.
실시간 게임의 경우, 그는 폴리곤 수 제한, 셰이더 복잡도 메모리 할당량, 메모리 관리, 연속 프로파일링과 같은 안전 장치를 갖추어 반복 개발에 대비할 수 있는 아키텍처를 구축할 것을 권장합니다. 그는 또한 생산 후반부에 발생할 수 있는 비용이 많이 드는 재작업을 방지하기 위해 초기 단계에서 기기의 도달률을 고려할 것을 제안합니다.
“평균 FPS 수는 오해를 불러일으킬 수 있습니다.” 이런 종류의 게임에서 플레이어들이 가장 중요하게 여기는 것은 프레임 속도 안정성입니다. 라스카노는 “프레임 속도의 급격한 변동과 렌더 스레드의 지연을 제거하는 것이 최대 프레임 속도를 높이는 것보다 플레이어 경험에 더 큰 영향을 미쳤다”고 말했다. “프레임 페이싱을 최적화하기 위해 적절한 렌더링 파이프라인과 배칭 전략을 선택하는 것은 판도를 바꿀 수 있는 결정적인 요소가 될 수 있습니다.”
그는 또한 “성능 최적화는 병목 현상을 반복적으로 제거해 나가는 과정”이라고 강조한다. 각 수정 사항은 제약 조건을 GPU, CPU, 메모리, 메모리 대역폭 중 다른 곳으로 옮겨 놓습니다. 핵심은 체계적인 프로파일링, 신중한 타협, 그리고 기술적 결정의 얼라인먼트를 지원하려는 기기 중 성능이 가장 낮은 기기에 맞춰 조정하는 것입니다.”
지금 Unity Pro 다운로드하기
강력한 도구, 지원, 검증된 파트너, 그리고 활기찬 커뮤니티의 도움을 받아 대형 스튜디오의 작품들과 어깨를 나란히 하거나 그 품질과 성공을 뛰어넘는 게임을 제작해 보세요.