Version: 2023.1
언어: 한국어
드로우 콜 최적화
GPU 인스턴싱을 지원하는 셰이더 생성

GPU 인스턴싱

GPU 인스턴싱은 단일 드로우 콜에서 동일한 재질의 메시 사본을 여러 개 렌더링하는 드로우 콜 최적화 방법입니다. 각 메시 사본을 인스턴스라고 합니다. 씬 내에 여러 번 나타나는 나무나 덤불과 같은 것을 드로우하는 데 유용합니다.

GPU instancing renders identical meshes in the same draw call. To add variation and reduce the appearance of repetition, each instance can have different properties, such as Color or Scale. Draw calls that render multiple instances appear in the Frame Debugger as Render Mesh (instanced).

요구 사항 및 호환성

이 섹션은 GPU 인스턴싱의 플랫폼, 렌더 파이프라인, SRP 배처 호환성을 포함하고 있습니다.

플랫폼 호환성

GPU 인스턴싱은 WebGL 1.0을 제외한 모든 플랫폼에서 사용할 수 있습니다.

렌더 파이프라인 호환성

기능 빌트인 렌더 파이프라인 유니버설 렌더 파이프라인(URP) 고해상도 렌더 파이프라인(HDRP) 커스텀 스크립터블 렌더 파이프라인(SRP)
GPU 인스턴싱 지원 지원(1) 지원(1) 지원(1)

참고:

  1. 셰이더가 SRP 배처와 호환되지 않는 경우에만 해당됩니다.

SRP 배처

GPU 인스턴싱은 SRP 배처와 호환되지 않습니다. SRP 배처는 GPU 인스턴싱보다 우선합니다. 게임 오브젝트가 SRP 배처와 호환되는 경우 Unity는 GPU 인스턴싱이 아닌 SRP 배처를 사용하여 렌더링합니다. 최적화 방법 우선 순위에 대한 자세한 내용은 최적화 우선 순위를 참조하십시오.

프로젝트에서 SRP 배처를 사용하고 게임 오브젝트에 GPU 인스턴싱을 사용하려는 경우 다음 중 하나를 수행할 수 있습니다.

  • Use Graphics.RenderMeshInstanced. This API bypasses the use of GameObjects and uses the specified parameters to directly draw a mesh on screen.
  • SRP 배처 호환성을 수동으로 제거합니다. 수동으로 제거하는 방법에 대한 자세한 내용은 의도적으로 호환성 제거를 참조하십시오.

GPU 인스턴싱 사용

Unity는 동일한 메시와 머티리얼을 공유하는 게임 오브젝트에 GPU 인스턴싱을 사용합니다. 메시와 머티리얼을 인스턴스화하려면 다음 단계를 따르십시오.

머티리얼에 GPU 인스턴싱을 사용하려면 인스펙터에서 Enable GPU Instancing 옵션을 선택합니다.

머티리얼 인스펙터에 표시된 Enable GPU instancing 옵션
머티리얼 인스펙터에 표시된 Enable GPU instancing 옵션

조명

GPU instancing supports Unity’s Baked Global Illumination system. Unity Standard Shaders and surface shaders support GPU instancing and Unity’s Baked Global Illumination system by default.

각 GPU 인스턴스는 다음 소스 중 하나에서 전역 조명을 지원합니다.

  • 임의 개수의 광원 프로브
  • 하나의 라이트맵
    참고: 인스턴스는 라이트맵에서 여러 아틀라스 영역을 사용할 수 있습니다.
  • 하나의 Light Probe Proxy Volume(LPPV) 컴포넌트
    참고: 모든 인스턴스가 포함된 공간 볼륨을 위해 LPPV를 베이크해야 합니다.

GPU 인스턴싱은 다음과 함께 자동으로 작동합니다.

  • 동적 메시 렌더러는 라이트 프로브의 영향을 받습니다.
  • 정적 메시 렌더러는 동일한 라이트맵 텍스처로 베이크합니다. 메시 렌더러는 정적 에디터 플래그Contribute GI를 포함하는 경우 이 컨텍스트에서 정적입니다.

To enable Light Probe rendering for Graphics.RenderMeshInstanced, provide a MaterialPropertyBlock that includes the Probe data. For more information and code examples, see LightProbes.CalculateInterpolatedLightAndOcclusionProbes.

Alternatively, you can pass an LPPV component reference and LightProbeUsage.UseProxyVolume to Graphics.RenderMeshInstanced. When you do this, all instances sample the volume for the L0 and L1 bands of the Light Probe data. If you want to supplement L2 data and occlusion data, use a MaterialPropertyBlock. For more information, see Light Probes: Technical Information.

퍼포먼스 영향

버텍스 수가 적은 메시는 GPU 인스턴싱을 사용하여 효율적으로 처리할 수 없습니다. GPU가 GPU 리소스를 완전히 사용하는 방식으로 작업을 배포할 수 없기 때문입니다. 이러한 비효율적인 처리는 퍼포먼스에 부정적인 영향을 미칠 수 있습니다. 비효율성이 시작되는 임계값은 GPU에 따라 다르지만 일반적으로 256개 미만의 버텍스를 가진 메시에는 GPU 인스턴싱을 사용하지 않습니다.

버텍스 수가 적은 메시를 여러 번 렌더링하려는 경우 모든 메시 정보가 포함된 단일 버퍼를 생성하여 메시를 드로우하는 것이 가장 좋습니다.


  • 2017–10–24 페이지 수정됨

  • 인스턴스화 활성화 체크박스 설명, DrawMeshInstancedIndirect, #pragma multi-compile은 5.6 버전에서 추가됨

  • 2017.3에서 GPU 인스턴싱을 위한 셰이더 웜업 추가됨 NewIn20173

  • 2018.1에서 GPU 인스턴싱에 전역 조명(GI) 지원 추가됨 NewIn20181

드로우 콜 최적화
GPU 인스턴싱을 지원하는 셰이더 생성
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961