콘텐츠로 이동

Unity 6의 GPU 기반 렌더링 성능 개선

  • 낮은 해상도로 렌더링한 뒤 높은 해상도로 업스케일링한다.
  • GPU 성능에 비해 디스플레이 해상도가 높다.
    • 래스터화 부하가 크다.
  • Intel, Nvidia, AMD 모두 이미 업스케일링 기술을 가지고 있다.
    • Intel: XeSS
    • Nvidia: DLSS
    • AMD: FSR
  • STP는 Unity가 자체 개발한 업스케일링 기술이다.
    • 기존 DLSS, FSR은 해당 GPU에 종속적이다.
  • 현재 Unity의 오클루전 컬링은 CPU에서 동작하는 Umbra를 사용한다.
  • CPU에서 하던 작업을 GPU로 옮겨 더 빠르게 처리한다.
    • 내부적으로 Depth Buffer를 사용한다.
  • 발표에서는 가려지는 오브젝트가 많은 복잡한 씬에서 성능이 오른다고 설명했다.
  • 렌더링은 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만 지원).