Unity 검색

전문가가 알려주는 콘솔용 게임 그래픽스 최적화 팁

2021년 11월 3일 게임 | 12 분 소요
FPS Sample Screenshot
FPS Sample Screenshot
다루는 주제
공유

Is this article helpful for you?

Thank you for your feedback!

유니티 블로그 구독자라면, 모바일 게임 최적화를 다룬 최근 포스팅 시리즈에서 그래픽스와 에셋, 프로파일링과 메모리, 코드 아키텍처, 그리고 물리, UI 및 오디오와 관련한 유용한 팁을 확인하셨을 겁니다.

이번에는 더 많은 간편한 팁과 함께, 콘솔에서 고사양 그래픽스를 최적화하는 방법에 대해 알아봅니다. 배치 카운트를 줄이는 방법을 비롯하여 지양해야 하는 셰이더, 렌더링 옵션 등 다양한 팁을 살펴보세요. 이번 블로그에서 소개하는 팁은 PC와 콘솔 게임을 위한 고급 최적화 기술을 다루는 최신 전자책에서 발췌했으며, 해당 전자책은 무료로 다운로드할 수 있습니다.

콘솔을 위한 그래픽스 최적화

Xbox 및 PlayStation 게임의 개발 과정은 PC 게임 개발과 비슷하지만, 플랫폼 고유의 풀어야 할 과제가 있습니다. 원활한 프레임 속도를 확보하기 위해 GPU 최적화에 집중해야 하는 경우가 많습니다.

Forest

성능 병목 지점 파악

우선 GPU 로드가 높은 프레임을 찾습니다. Microsoft와 Sony에서는 CPU 및 GPU에 대한 프로젝트의 성능을 분석할 수 있는 훌륭한 툴을 제공합니다. Xbox의 경우 PIX를, PlayStation의 경우 Razor를 툴박스에 추가하여 각 플랫폼에서 최적화 작업을 수행할 때 사용하세요. 

각 네이티브 프로파일러를 사용하여 프레임 비용을 세부 분류하세요. 그래픽스 성능을 개선하기 위한 기본 정보로 사용할 수 있습니다.

배치 카운트 줄이기

다른 플랫폼과 마찬가지로 콘솔에서도 최적화 작업 시 드로우 콜 배치를 줄여야 하는 경우가 많습니다. 이때 유용한 몇 가지 기술이 있습니다.

  • 오클루전 컬링을 사용하면 전경 오브젝트에 가려진 오브젝트를 제거하고 오버드로우를 줄일 수 있습니다. 이 작업은 CPU 처리를 추가로 요구하므로, 프로파일러를 사용하여 작업을 GPU에서 CPU로 옮기는 것이 올바른 선택인지 확인해야 합니다. 
  • 다수의 오브젝트가 같은 메시와 머티리얼을 공유한다면 GPU 인스턴싱으로 배치를 줄일 수도 있습니다. 씬에서 모델 수를 제한하면 성능을 개선할 수 있습니다. 세심하게 다듬는다면 반복적인 느낌을 주지 않고도 복잡한 씬을 빌드할 수 있습니다.

SRP Batcher바인드 및 드로우 GPU 명령을 배칭하여 드로우 콜 사이에 소모되는 GPU 설정 비용을 줄입니다. 이러한 SRP 배칭의 장점을 활용하려면, 머티리얼을 필요한 만큼 사용하되, 서로 호환되는 소수의 셰이더(예: URP와 HDRP의 릿 셰이더와 언릿 셰이더)와 함께 사용하세요.

Graphics Jobs 활성화

Player Settings > Other Settings에서 이 옵션을 활성화하여 PlayStation이나 Xbox의 멀티 코어 프로세서를 활용합니다. Graphics Jobs(실험 단계)를 사용하면 Unity에서 여러 CPU 코어에 렌더링 작업을 분산하므로 렌더 스레드의 부담을 해소할 수 있습니다. 자세한 내용은 멀티스레드 렌더링 및 Graphics Jobs 튜토리얼을 참조하세요.

포스트 프로세싱 프로파일링

콘솔에 최적화된 포스트 프로세싱 에셋을 사용하세요. PC용으로 저작된 에셋 스토어의 툴은 Xbox나 PlayStation에서 필요 이상으로 많은 리소스를 소모할 수 있습니다. 네이티브 프로파일러로 프로파일링하여 확인하세요.

테셀레이션 셰이더 사용 지양

테셀레이션은 셰이프를 더 작은 버전의 셰이프로 분할합니다. 그렇게 하면 지오메트리가 늘어 디테일 수준을 높일 수 있습니다. 테셀레이션을 사용하는 것이 적절한 경우도 있지만(예: 사자의 서(Book of the Dead)의 사실적인 나무 껍질) 일반적인 경우에는 콘솔에서 테셀레이션 사용을 지양하세요. GPU에서 많은 리소스를 소모할 수 있습니다.

지오메트리 셰이더를 컴퓨트 셰이더로 교체

테셀레이션 셰이더와 마찬가지로 지오메트리 셰이더와 버텍스 셰이더는 뎁스 프리패스 시 한 번 실행되고, 섀도우 패스 시 다시 한 번 실행되므로, GPU에서 프레임당 두 번 실행됩니다.

GPU에서 버텍스 데이터를 생성하거나 수정하고 싶다면, 지오메트리 셰이더보다 컴퓨트 셰이더를 사용하는 편이 바람직한 경우가 많습니다 컴퓨트 셰이더에서 작업하면 실제로 지오메트리를 렌더링하는 버텍스 셰이더가 상대적으로 빠르고 간소해집니다.

웨이브프론트(wavefront) 점유율 개선

GPU에 드로우 콜을 보내면, Unity에서 GPU 내 사용 가능한 SIMD 전체에 이를 배포하여 여러 웨이브프론트에 작업이 분할됩니다.

각 SIMD에는 동시 실행 가능한 최대 웨이브프론트 수가 있습니다. 웨이브프론트 점유율은 이러한 최대치와 비교하여 현재 사용 중인 웨이브프론트의 수를 나타냅니다. 이를 통해 GPU 성능이 얼마나 충분히 활용되고 있는지 측정할 수 있습니다. PIX와 Razor는 웨이브프론트 점유율을 매우 상세하게 보여줍니다.

Wavefront occupancy
바람직한 웨이브프론트 점유율 예시와 그렇지 못한 예시

사자의 서에서 가져온 이 예시에서 버텍스 셰이더 웨이브프론트는 녹색, 픽셀 셰이더 웨이브프론트는 파란색으로 표시되어 있습니다. 아래쪽 그래프를 보면, 픽셀 셰이더 활동이 별로 없는데 상당한 양의 버텍스 셰이더 웨이브프론트가 나타납니다. 따라서 GPU 성능 활용도가 낮음을 알 수 있습니다.

픽셀로 표시되지 않는 버텍스 셰이더 작업이 많다면 이는 비효율적일 수 있습니다. 웨이브프론트 점유율이 낮다는 사실이 무조건 나쁜 것은 아니지만, 셰이더를 최적화하고 다른 병목 현상을 확인하는 지표로 활용할 수 있습니다. 예를 들어 메모리나 컴퓨팅 작업으로 인해 지연이 생긴다면, 점유율을 높여 성능을 개선할 수 있습니다. 반면에 너무 많은 웨이브프론트가 실행된 경우에도 캐시 스레싱(cache thrashing)이 발생하고 성능이 저하될 수 있습니다.

HDRP 빌트인 패스와 커스텀 패스 사용

프로젝트에서 HDRP를 사용한다면 빌트인 패스와 커스텀 패스를 활용하세요. 씬 렌더링에 도움이 될 수 있습니다. 빌트인 패스는 셰이더를 최적화하는 데 도움이 됩니다. HDRP는 셰이더에 커스텀 패스를 추가할 수 있는 여러 인젝션 포인트를 포함하고 있습니다.

Use HDRP injection points to customize the pipeline.
이 포인트들을 활용하여 파이프라인을 커스터마이즈하세요.

투명 머티리얼의 동작을 최적화하려면, 렌더러 및 머티리얼 우선 순위에 대해 다룬 이 페이지를 참조하세요. 

섀도우 매핑 렌더 타겟의 크기 줄이기

HDRP의 High Quality 설정은 기본적으로 4K 섀도우 맵을 사용합니다. 섀도우 맵 해상도를 낮추고 프레임 비용에 미치는 영향을 측정하세요. 참고로 광원 설정을 통해 화질의 변화를 보완해야 할 수 있습니다. 

Async Compute 활용

GPU 사용률이 낮은 구간이 있을 때 Async Compute를 활용하면, 유용한 컴퓨트 셰이더 작업을 그래픽스 대기열에 병렬로 이동할 수 있고, 이를 통해 GPU 리소스 활용을 개선할 수 있습니다. 

예를 들어, GPU는 섀도우 맵이 생성되는 동안 뎁스 전용 렌더링을 수행합니다. 이때 픽셀 셰이더 작업은 거의 수행되지 않으며, 많은 웨이브프론트들이 비점유 상태로 유지됩니다.

Async Compute can move compute shader work in parallel to the graphics queue
Async Compute로 컴퓨트 셰이더 작업을 그래픽스 대기열에 병렬로 이동할 수 있습니다.

일부 컴퓨트 셰이더 작업을 뎁스 전용 렌더링과 동기화하면, 전반적인 GPU 사용률을 개선할 수 있습니다. 사용되지 않는 웨이브프론트를 스크린 공간 앰비언트 오클루전이나 현재 진행되는 작업을 보완하는 데 활용할 수도 있습니다.

Optimized render at 30 fps
30fps에서 최적화된 렌더링

사자의 서를 보면, 여러 최적화를 통해 섀도우 매핑, 조명 패스, 대기 구현에서 수 밀리 초를 단축했습니다. 그 결과 프레임 비용이 낮아져 PS4 Pro에서 30fps에 애플리케이션을 실행할 수 있게 되었습니다.

Unity 그래픽스 개발자 Rob Thompson이 사자의 서를 PlayStation 4에 이식하는 과정에 대해 설명하는 고사양 콘솔에서 성능 최적화 활용 사례를 시청하세요. 콘솔 게임 그래픽스 최적화를 위한 10가지 팁에서도 자세한 내용을 확인할 수 있습니다.

성능 최적화에 대한 전체 가이드 다운로드

유니티 팀에서 제공하는 유용한 팁을 모두 확인하려면 아래에서 전자책을 다운로드하세요. 총 92페이지 분량이며 즉시 적용 가능한 인사이트가 가득합니다. 

전자책 다운로드

통합 지원 서비스에 대해 자세히 알아보고 프로젝트를 지원해 줄 엔지니어 및 전문가 조언, 베스트 프랙티스 가이드를 이용하려면 여기에서 유니티의 Success 플랜을 확인해 보세요.

원하는 내용을 찾지 못하셨나요?

유니티는 Unity 애플리케이션이 성능을 최대한 발휘할 수 있도록 지원하고 있습니다. 자세히 알고 싶은 최적화 주제가 있다면 댓글로 알려주세요.

 

2021년 11월 3일 게임 | 12 분 소요

Is this article helpful for you?

Thank you for your feedback!

다루는 주제