Vulkan을 사용하여 그래픽을 개선한 Call of Duty Warzone Mobile

Call of Duty Warzone Mobile의 게임 제목 로고 스크린샷

Call of Duty: Warzone Mobile은 인기 있는 Call of Duty 프랜차이즈의 1인칭 액션 게임입니다. 매우 인기 있는 콘솔과 PC 게임이 모바일에서 실현됨에 따라 우수한 플레이어 환경을 제공하기 위해 하위 수준의 모바일 API를 활용할 수 있습니다.

기술적 관점에서 모바일 구현의 목표는 다양한 Android 휴대기기를 지원하는 동시에 구현을 콘솔 버전에 최대한 가깝게 유지하고 그래픽 파이프라인과 도구 모음이 현재 콘솔 및 PC 타이틀 및 콘텐츠와 계속 호환되도록 하는 것입니다.

Call of Duty 엔진은 작업 그래프 렌더기라는 시스템을 사용하여 렌더링 제출 관리를 위한 동기화, 메모리 할당 및 예약을 구현합니다. 이 시스템은 GPU에서 실행할 작업을 결정하고 필요한 리소스를 지정합니다. 구체적으로, 시스템은 GPU에서 실행될 작업의 최적 순서를 생성하고 프레임 제출 시 사용되는 리소스를 제공하기 위해 로드 시 처리되는 상위 수준 스크립트에 정의된 작업, 리소스, 종속 항목이 있는 렌더링 그래프입니다.

최신 크로스 플랫폼 3D 그래픽 API인 Vulkan이 Android에서 작업 그래프 렌더기의 백엔드 렌더링 인터페이스로 선택되었습니다.

그림 1. 오버레이된 그래픽이 있는 자세한 배경

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의 기존 빌드 파이프라인에 통합할 수 있습니다. 이 프로세스에는 어려움이 없지만 재작성보다 더 유용하며 여러 버전 또는 언어를 유지보수하는 오버헤드가 발생합니다.

그림 2. 복잡한 렌더링 환경
그림 3. 고화질 콘텐츠 렌더링

Call of Duty: Warzone Mobile에서 사용되는 Vulkan 기능

  • 리소스 앨리어싱과 명시적 배리어 제어를 사용하면 렌더링 작업 그래프에서 정적 할당에 비해 렌더링 타겟의 메모리 요구사항을 크게 줄일 수 있습니다.
    • 유연성을 통해 렌더링 작업에서 모바일 친화적인 방식을 원활하게 사용할 수 있습니다.
    • 렌더러는 렌더링 패스를 핵심 기능으로 사용하여 일반적인 모바일 GPU 아키텍처를 위한 최적의 결정을 내릴 수 있습니다. 이러한 결정은 대부분 다른 플랫폼에서도 이점을 제공합니다
    • 동적 장면 해상도는 기본적으로 작업 그래프에서 지원되므로 성능 및 전력 소모를 어느 정도 제어할 수 있습니다.
  • 광범위한 컴퓨팅 기반 컬링이 포함된 전체 GPU 파이프라인으로 장면 복잡성이 크게 증가합니다.
    • 타일 기반 지연된 렌더기 타겟팅을 고려하여 선별 세부사항의 균형을 맞춥니다.
    • 병목 현상은 삼각형 수와 달리 복잡한 컴퓨팅 워크로드입니다.
      • GPU 파이프라인은 다양한 시나리오를 염두에 두고 설계되었습니다.
      • 선별 세부사항을 변경하는 옵션입니다.
  • 매우 큰 설명자 집합은 호환되는 하드웨어에서 완전한 결합 없는 렌더링을 허용하므로 관련 성능, 전력 및 열적 이점과 함께 CPU 그리기 호출 생성 비용이 크게 절감됩니다.
  • HW configurator를 통해 최상의 사용자 환경을 위해 특정 기기 모델에 따라 충실도 설정을 조정할 수 있습니다.
    • 사용자가 최고 성능, 최고 화질 또는 배터리 절약 모드를 설정합니다.
  • 기기별 셰이더 세트 디자인은 다양한 GPU 사전 설정 (품질 및 충실도 설정)에 다양한 셰이더 세트를 제공합니다. HW 구성자는 게임이 기기에 가장 적합한 셰이더 세트를 선택하도록 도와줍니다.
    • 파이프라인 객체를 만들어야 하는 필요성으로 구성 가능한 셰이더의 조합적 폭발을 줄이는 데 도움이 됩니다.
    • 많은 셰이더 리소스를 지원하지 않는 이전 휴대전화와 드라이버를 타겟팅하기 위한 대체 비바인드 셰이더 집합이 포함됩니다.
  • 특화 상수를 현명하게 사용하여 드라이버 차이를 처리합니다.
    • 드라이버의 셰이더 컴파일러 버그는 대부분 특수 상수를 사용하여 해결됩니다.
    • 기기별 셰이더 집합 수에 맞게 균형을 유지합니다.
그림 4. 복잡한 장면을 가능하게 하는 광범위한 컴퓨팅 기반 컬링이 포함된 전체 GPU 파이프라인

프로파일링 및 디버깅

Activision은 개발 초기에 Vulkan 프로파일링 및 디버깅 도구를 통해 안정성과 기능 측면에서 많은 격차를 발견했습니다. 그 이후로 RenderDoc와 같은 공급업체별 프로파일러 및 공급업체 제약이 없는 도구가 꾸준히 개선되었습니다. 이제 개발자가 렌더링 문제와 최적화 기회를 더욱 자신 있게 좁힐 수 있습니다.

Vulkan을 통한 높은 충실도

Call of Duty: Warzone Mobile은 콘솔 및 PC 타이틀과 공유되는 렌더링 기술을 사용하여 다양한 Vulkan 지원 Android 기기에서 실행됩니다. Vulkan은 개발 오버헤드와 마찰을 줄였으며 Android 플레이어에게 진정성 높은 충실도 높은 Call of Duty 콘텐츠와 게임플레이를 제공할 수 있도록 했습니다.