Call of Duty: Warzone Mobile은 인기 있는 Call of Duty 프랜차이즈의 1인칭 액션 게임입니다. 매우 인기 있는 콘솔과 PC 게임이 모바일에서 실현됨에 따라 우수한 플레이어 환경을 제공하기 위해 하위 수준의 모바일 API를 활용할 수 있습니다.
기술적 관점에서 모바일 구현의 목표는 다양한 Android 휴대기기를 지원하는 동시에 구현을 콘솔 버전에 최대한 가깝게 유지하고 그래픽 파이프라인과 도구 모음이 현재 콘솔 및 PC 타이틀 및 콘텐츠와 계속 호환되도록 하는 것입니다.
Call of Duty 엔진은 작업 그래프 렌더기라는 시스템을 사용하여 렌더링 제출 관리를 위한 동기화, 메모리 할당 및 예약을 구현합니다. 이 시스템은 GPU에서 실행할 작업을 결정하고 필요한 리소스를 지정합니다. 구체적으로, 시스템은 GPU에서 실행될 작업의 최적 순서를 생성하고 프레임 제출 시 사용되는 리소스를 제공하기 위해 로드 시 처리되는 상위 수준 스크립트에 정의된 작업, 리소스, 종속 항목이 있는 렌더링 그래프입니다.
최신 크로스 플랫폼 3D 그래픽 API인 Vulkan이 Android에서 작업 그래프 렌더기의 백엔드 렌더링 인터페이스로 선택되었습니다.
![](https://developer.android.com/static/images/cards/distribute/stories/codwzm_figure1.jpg?authuser=0000&hl=ko)
Vulkan API의 이점
Call of Duty의 독특한 시각적 스타일을 유지하고 Call of Duty: Warzone Mobile과 그 콘솔 및 PC의 진행 상황 공유를 더 잘 지원하기 위해 이 게임은 기존 콘솔 및 PC 구현과 유사한 렌더링 API를 사용합니다. Android에서 Vulkan을 사용하면 Activision이 기존 도구, 파이프라인, 셰이더를 기반으로 빌드하고 전체 소프트웨어 스택을 정비하지 않고도 아티스트가 만든 콘텐츠를 지원할 수 있습니다.
완전히 다른 렌더기를 사용하여 이를 달성하려면 엄청난 비용이 들며 Call of Duty 파이프라인에서 이전 세대의 그래픽 API를 지원하려고 하면 기능 세트에 너무 큰 영향을 미치게 됩니다. Activision은 전반적인 개발 오버헤드에 미치는 영향을 최소화하면서 Android에 전체 기능을 제공하는 데 가장 적합한 선택이라고 판단했습니다. Vulkan은 Android 기기 제조업체 사이에서 큰 폭의 지원을 얻어 향후 개발에도 적합한 API입니다.
Vulkan을 지원하는 하드웨어나 드라이버가 없는 기기는 일반적으로 오래되어 게임을 실행할 만큼 강력하지 않습니다. 따라서 Vulkan이 엔진 및 콘텐츠 파이프라인에 기술 적합할 뿐만 아니라 하드웨어 요구사항인 Vulkan 지원이 성능 필터 역할을 합니다.
기존 플랫폼 API와의 호환성
Vulkan은 개념적으로 Call of Duty: Warzone에 사용되는 기존 API와 유사하지만, 명시적 리소스 관리, 메모리 앨리어싱, 유사한 컴퓨팅 파이프라인, 결합 없는 리소스 액세스 등이 있습니다. 이러한 유사점 덕분에 Activision은 렌더러를 콘솔 및 PC 렌더기와 구조적으로 일관되게 유지할 수 있었으며, 백엔드 변경만 Vulkan과의 인터페이스를 유지할 수 있었습니다.
DXC에서 SPIR-V 컴파일을 사용하여 전체 기능 세트가 있는 기존 HLSL 기반 셰이더를 지원하므로 Android를 Activision의 기존 빌드 파이프라인에 통합할 수 있습니다. 이 프로세스에는 어려움이 없지만 재작성보다 더 유용하며 여러 버전 또는 언어를 유지보수하는 오버헤드가 발생합니다.
![](https://developer.android.com/static/images/cards/distribute/stories/codwzm_figure2.jpg?authuser=0000&hl=ko)
![](https://developer.android.com/static/images/cards/distribute/stories/codwzm_figure3.jpg?authuser=0000&hl=ko)
Call of Duty: Warzone Mobile에서 사용되는 Vulkan 기능
- 리소스 앨리어싱과 명시적 배리어 제어를 사용하면 렌더링 작업 그래프에서 정적 할당에 비해 렌더링 타겟의 메모리 요구사항을 크게 줄일 수 있습니다.
- 유연성을 통해 렌더링 작업에서 모바일 친화적인 방식을 원활하게 사용할 수 있습니다.
- 렌더러는 렌더링 패스를 핵심 기능으로 사용하여 일반적인 모바일 GPU 아키텍처를 위한 최적의 결정을 내릴 수 있습니다. 이러한 결정은 대부분 다른 플랫폼에서도 이점을 제공합니다
- 동적 장면 해상도는 기본적으로 작업 그래프에서 지원되므로 성능 및 전력 소모를 어느 정도 제어할 수 있습니다.
- 광범위한 컴퓨팅 기반 컬링이 포함된 전체 GPU 파이프라인으로 장면 복잡성이 크게 증가합니다.
- 타일 기반 지연된 렌더기 타겟팅을 고려하여 선별 세부사항의 균형을 맞춥니다.
- 병목 현상은 삼각형 수와 달리 복잡한 컴퓨팅 워크로드입니다.
- GPU 파이프라인은 다양한 시나리오를 염두에 두고 설계되었습니다.
- 선별 세부사항을 변경하는 옵션입니다.
- 매우 큰 설명자 집합은 호환되는 하드웨어에서 완전한 결합 없는 렌더링을 허용하므로 관련 성능, 전력 및 열적 이점과 함께 CPU 그리기 호출 생성 비용이 크게 절감됩니다.
- HW configurator를 통해 최상의 사용자 환경을 위해 특정 기기 모델에 따라 충실도 설정을 조정할 수 있습니다.
- 사용자가 최고 성능, 최고 화질 또는 배터리 절약 모드를 설정합니다.
- 기기별 셰이더 세트 디자인은 다양한 GPU 사전 설정 (품질 및 충실도 설정)에 다양한 셰이더 세트를 제공합니다. HW 구성자는 게임이 기기에 가장 적합한 셰이더 세트를 선택하도록 도와줍니다.
- 파이프라인 객체를 만들어야 하는 필요성으로 구성 가능한 셰이더의 조합적 폭발을 줄이는 데 도움이 됩니다.
- 많은 셰이더 리소스를 지원하지 않는 이전 휴대전화와 드라이버를 타겟팅하기 위한 대체 비바인드 셰이더 집합이 포함됩니다.
- 특화 상수를 현명하게 사용하여 드라이버 차이를 처리합니다.
- 드라이버의 셰이더 컴파일러 버그는 대부분 특수 상수를 사용하여 해결됩니다.
- 기기별 셰이더 집합 수에 맞게 균형을 유지합니다.
![](https://developer.android.com/static/images/cards/distribute/stories/codwzm_figure4.jpg?authuser=0000&hl=ko)
프로파일링 및 디버깅
Activision은 개발 초기에 Vulkan 프로파일링 및 디버깅 도구를 통해 안정성과 기능 측면에서 많은 격차를 발견했습니다. 그 이후로 RenderDoc와 같은 공급업체별 프로파일러 및 공급업체 제약이 없는 도구가 꾸준히 개선되었습니다. 이제 개발자가 렌더링 문제와 최적화 기회를 더욱 자신 있게 좁힐 수 있습니다.
Vulkan을 통한 높은 충실도
Call of Duty: Warzone Mobile은 콘솔 및 PC 타이틀과 공유되는 렌더링 기술을 사용하여 다양한 Vulkan 지원 Android 기기에서 실행됩니다. Vulkan은 개발 오버헤드와 마찰을 줄였으며 Android 플레이어에게 진정성 높은 충실도 높은 Call of Duty 콘텐츠와 게임플레이를 제공할 수 있도록 했습니다.