Unity 6의 GPU 기반 렌더링 성능 개선
STP - Spatial Temporal Post Processing
섹션 제목: “STP - Spatial Temporal Post Processing”- 낮은 해상도로 렌더링한 뒤 높은 해상도로 업스케일링한다.
- GPU 성능에 비해 디스플레이 해상도가 높다.
- 래스터화 부하가 크다.
- Intel, Nvidia, AMD 모두 이미 업스케일링 기술을 가지고 있다.
- Intel: XeSS
- Nvidia: DLSS
- AMD: FSR
- STP는 Unity가 자체 개발한 업스케일링 기술이다.
- 기존 DLSS, FSR은 해당 GPU에 종속적이다.
GPU Occlusion Culling
섹션 제목: “GPU Occlusion Culling”- 현재 Unity의 오클루전 컬링은 CPU에서 동작하는 Umbra를 사용한다.
- https://umbra3d.com/
- 모기업은 Amazon이다.
- CPU에서 하던 작업을 GPU로 옮겨 더 빠르게 처리한다.
- 내부적으로 Depth Buffer를 사용한다.
- 발표에서는 가려지는 오브젝트가 많은 복잡한 씬에서 성능이 오른다고 설명했다.
GPU Resident Drawer
섹션 제목: “GPU Resident Drawer”- 렌더링은 Command Buffer를 통해 이루어진다.
- CPU와 GPU는 병렬로 동작한다.
- CPU는 렌더링을 준비해 GPU로 보낸 뒤 기다리지 않고 다른 일을 한다.
- Vulkan, Metal
- Command Buffer 작성에 멀티 스레드를 지원한다.
- 실제로 그리라는 명령인
DrawIndexed보다 상태 변경의 비용이 크다. - Unity에서는 이 비싼 동작을 SetPass Call이라고 부른다.
- 비싼 SetPass Call을 줄이려고 Unity는 SRP Batcher를 만들었다.
- 매번 머티리얼 관련 데이터를 전송하지 않고 GPU에 상주시킨다.
- 드로우콜 사이에 필요한 리소스 바인딩과 업데이트가 줄어든다.
- 여기에 BatchRendererGroup API를 사용한다.
- Unity Burst Job으로 성능을 최적화한다.
- 인스턴스 데이터를 Persistent Data에 저장한다.
- 이것들을 모두 조합해 GPU Resident Drawer가 동작한다.
- 배칭과 인스턴싱이 자동으로 동작한다.
- 구형 그래픽스 API는 지원하지 않는다(Vulkan, Metal만 지원).