Version: Unity 6.0 (6000.0)
언어 : 한국어
BatchRendererGroup API용 커스텀 셰이더 작성
URP의 커스텀 셰이더에서 DOTS 인스턴싱 지원

URP의 DOTS 인스턴싱 셰이더

큰 인스턴스 수를 효율적으로 렌더링하기 위해 BRG는 DOTS 인스턴싱이라는 새로운 셰이더 인스턴싱 모드를 사용합니다. BRG가 사용하는 모든 셰이더는 DOTS 인스턴싱을 지원해야 합니다. 기존의 인스턴스화된 셰이더에서 셰이더는 상수 또는 균일 버퍼로 각 인스턴스화된 프로퍼티에 대한 배열을 전달하므로, 각 배열의 각 요소는 드로우의 단일 인스턴스에 대한 프로퍼티 값을 포함합니다. DOTS 인스턴스화된 셰이더에서 Unity는 각 DOTS 인스턴스화된 프로퍼티에 대해 하나의 32비트 정수를 셰이더에 전달합니다. 이 32비트 정수를 메타데이터 값이라고 합니다. 이 정수는 원하는 모든 요소를 나타낼 수 있지만 일반적으로 셰이더가 렌더링 중인 인스턴스의 프로퍼티 데이터를 셰이더가 로드하는 버퍼의 오프셋을 나타냅니다.

DOTS 인스턴싱에는 다음과 같이 기존 인스턴싱에 비해 많은 장점이 있습니다.

  • 인스턴스 데이터는 GraphicsBuffer에 저장되며 GPU에서 유지되므로 Unity가 인스턴스를 렌더링할 때마다 다시 설정할 필요가 없습니다. 인스턴스가 실제로 변경될 때만 데이터를 설정하면 인스턴스 데이터가 거의 또는 전혀 변경되지 않는 경우 성능이 크게 향상될 수 있습니다. 이는 엔진이 프레임마다 모든 인스턴스에 대한 모든 데이터를 설정해야 하는 기존 인스턴싱보다 훨씬 더 효율적입니다.
  • 인스턴스 데이터 설정 프로세스는 드로우 콜 설정과는 별개입니다. 이렇게 하면 드로우 콜 설정이 더 가볍고 효율적입니다. BRG는 각 드로우 콜에 대해 최소한의 작업만 수행하는 SRP 배처의 빠른 특수 경로를 통해 이를 지원합니다. 이 작업에 대한 책임은 사용자에게 넘어가며, 각 드로우 콜에서 렌더링할 항목을 더 세밀하게 제어할 수 있습니다.
  • 드로우 콜의 크기는 더 이상 상수 또는 균일 버퍼에 들어갈 수 있는 인스턴스 데이터의 양에 의해 제한되지 않습니다. 이를 통해 BRG는 단일 드로우 콜로 더 큰 인스턴스 수를 렌더링할 수 있습니다.
    참고: 각 인덱스에는 여전히 일부 데이터가 필요하므로 인스턴스 인덱스 수에 따라 드로우 콜 크기가 제한됩니다. 그러나 인덱스는 전체 인스턴스화된 프로퍼티 세트보다 훨씬 더 적은 메모리를 사용하므로 상수 또는 균일 버퍼 내에 더 많은 인스턴스가 들어갈 수 있습니다. 예를 들어 각 인덱스에는 16바이트가 필요하므로 특정 플랫폼의 버퍼에 대한 메모리 제한이 64KB이면 버퍼에 4,096개의 인덱스가 들어갈 수 있습니다.
  • 모든 인스턴스가 주어진 프로퍼티에 대해 동일한 값을 사용하는 경우 모든 인스턴스가 메모리의 동일한 위치에서 값을 로드하도록 할 수 있습니다. 이렇게 하면 각 인스턴스 값을 복제하는 데 사용되는 메모리와 GPU 주기 수를 줄일 수 있습니다.
BatchRendererGroup API용 커스텀 셰이더 작성
URP의 커스텀 셰이더에서 DOTS 인스턴싱 지원