GPU 인스턴싱은 단일 드로우 콜에서 동일한 재질의 메시 사본을 여러 개 렌더링하는 드로우 콜 최적화 방법입니다. 각 메시 사본을 인스턴스라고 합니다. 씬 내에 여러 번 나타나는 나무나 덤불과 같은 것을 드로우하는 데 유용합니다.
GPU 인스턴싱은 동일한 드로우 콜에서 동일한 메시를 렌더링합니다. 배리에이션을 추가하고 반복된 형상을 줄이기 위해 각 인스턴스는 Color 또는 Scale과 같은 프로퍼티를 다르게 가질 수 있습니다. 여러 인스턴스를 렌더링하는 드로우 콜은 프레임 디버거에 Draw Mesh (instanced)로 나타납니다.
이 섹션은 GPU 인스턴싱의 플랫폼, 렌더 파이프라인, SRP 배처 호환성을 포함하고 있습니다.
GPU 인스턴싱은 WebGL 1.0을 제외한 모든 플랫폼에서 사용할 수 있습니다.
기능 | 빌트인 렌더 파이프라인 | 유니버설 렌더 파이프라인(URP) | 고해상도 렌더 파이프라인(HDRP) | 커스텀 스크립터블 렌더 파이프라인(SRP) |
---|---|---|---|---|
GPU 인스턴싱 | 지원 | 지원(1) | 지원(1) | 지원(1) |
참고:
GPU 인스턴싱은 SRP 배처와 호환되지 않습니다. SRP 배처는 GPU 인스턴싱보다 우선합니다. 게임 오브젝트가 SRP 배처와 호환되는 경우 Unity는 GPU 인스턴싱이 아닌 SRP 배처를 사용하여 렌더링합니다. 최적화 방법 우선 순위에 대한 자세한 내용은 최적화 우선 순위를 참조하십시오.
프로젝트에서 SRP 배처를 사용하고 게임 오브젝트에 GPU 인스턴싱을 사용하려는 경우 다음 중 하나를 수행할 수 있습니다.
Unity는 동일한 메시와 머티리얼을 공유하는 게임 오브젝트에 GPU 인스턴싱을 사용합니다. 메시와 머티리얼을 인스턴스화하려면 다음 단계를 따르십시오.
머티리얼에 GPU 인스턴싱을 사용하려면 인스펙터에서 Enable GPU Instancing 옵션을 선택합니다.
GPU 인스턴싱은 Unity의 베이크된 전역 조명 시스템을 지원합니다. Unity 스탠다드 셰이더와 표면 셰이더는 기본적으로 GPU 인스턴싱 및 Unity의 베이크된 전역 조명 시스템을 지원합니다.
각 GPU 인스턴스는 다음 소스 중 하나에서 전역 조명을 지원합니다.
GPU 인스턴싱은 다음과 함께 자동으로 작동합니다.
Graphics.DrawMeshInstanced
에 대한 라이트 프로브 렌더링을 활성화하려면 LightProbeUsage 파라미터를 CustomProvided로 설정하고 프로브 데이터를 포함하는 MaterialPropertyBlock을 제공합니다. 자세한 정보 및 코드 예제는 LightProbes.CalculateInterpolatedLightAndOcclusionProbes를 참조하십시오.
또는 LPPV 컴포넌트 레퍼런스와 LightProbeUsage.UseProxyVolume을 Graphics.DrawMeshInstanced
에 전달할 수 있습니다. 그러면 모든 인스턴스가 라이트 프로브 데이터의 L0 및 L1 대역 볼륨을 샘플링합니다. L2 데이터와 오클루전 데이터를 보완하려면 MaterialPropertyBlock
을 사용합니다. 자세한 내용은 라이트 프로브: 기술 정보를 참조하십시오.
버텍스 수가 적은 메시는 GPU 인스턴싱을 사용하여 효율적으로 처리할 수 없습니다. GPU가 GPU 리소스를 완전히 사용하는 방식으로 작업을 배포할 수 없기 때문입니다. 이러한 비효율적인 처리는 퍼포먼스에 부정적인 영향을 미칠 수 있습니다. 비효율성이 시작되는 임계값은 GPU에 따라 다르지만 일반적으로 256개 미만의 버텍스를 가진 메시에는 GPU 인스턴싱을 사용하지 않습니다.
버텍스 수가 적은 메시를 여러 번 렌더링하려는 경우 모든 메시 정보가 포함된 단일 버퍼를 생성하여 메시를 드로우하는 것이 가장 좋습니다.