Unity/정보

[Unity] GPU Instancing

달시_Dalsi 2024. 9. 13. 21:28

GPU Instancing이란?

GPU Instancing은 동일한 메쉬와 머티리얼을 사용하는 여러 오브젝트를 한 번의 드로우 콜로 렌더링하는 기술입니다. 일반적으로 다수의 오브젝트를 렌더링할 때, 각각의 오브젝트마다 GPU로 데이터를 보내는 과정(드로우 콜)이 필요합니다. 하지만 GPU Instancing을 사용하면 이 드로우 콜의 횟수를 크게 줄일 수 있습니다.

 

GPU Instancing의 원리

  • GPU Instancing은 동일한 메쉬와 머티리얼을 사용하는 여러 오브젝트를 묶어서 한 번에 GPU로 전송합니다.
  • 각 오브젝트의 위치, 회전, 크기와 같은 개별적인 변환 정보만을 GPU로 넘겨주고, 나머지 메쉬 데이터는 공유됩니다.
  • 이를 통해 CPU에서 처리해야 할 작업이 줄어들어 성능이 향상됩니다.
  •  

GPU Instancing이 적합한 상황

  • 동일한 메쉬와 머티리얼을 가진 다수의 오브젝트가 존재할 때 (예: 나무, 바위, 적 캐릭터 등).
  • 오브젝트마다 동일한 셰이더가 적용될 때.
  • 오브젝트가 개별적으로 움직이거나 회전하지만, 그 외의 속성(텍스처, 쉐이딩 등)은 동일할 때.

 

GPU Instancing 사용방법

머티리얼 인스펙터에서 Enable GPU Instancing 체크박스를 활성화하면 됩니다.

 

GPU Instancing 사용 효과

다음과 같은 상황을 만들어 드로우콜(Batches) 수를 대폭 올렸습니다.

 

이 상황에서 각 Cube마다 공통적으로 들어가있는 머티리얼의 GPU Instancing을 켜주면 드로우콜(Batches)가 아래와 같이 확 줄어들게됩니다.

 

 

GPU Instancing 사용 시 주의사항

  • 메쉬 및 머티리얼 공유: 인스턴싱 대상 오브젝트는 반드시 동일한 메쉬와 머티리얼을 공유해야 합니다. 다른 머티리얼을 사용하면 Instancing이 적용되지 않습니다.
  • 셰이더 지원: GPU Instancing을 사용하려면 셰이더가 Instancing을 지원해야 합니다. Unity의 기본 표준 셰이더는 Instancing을 지원하지만, 커스텀 셰이더를 사용하는 경우에는 셰이더 코드에 Instancing을 지원하도록 추가해야 합니다.