유니티 최적화 GPU 인스턴싱(instancing)

유니티 최적화 GPU 인스턴싱(instancing)

GPU 인스턴싱을 사용하면 다중으로 복사된 동일한 메시의 오브젝트(인스턴스)를 한번에 렌더링하여 드로우콜 수치를 낮추고 렌더링 퍼포먼스를 향상시킬수있다. 씬에서 반복적으로 사용되는 건물, 나무, 기타 오브젝트에 사용할수있다.

 

아래 예에서 씬에 게임 오브젝트를 생성하였다.

 

 

게임 오브젝트를 여러개 복사하면 batches의 수치가 증가한것을 확인할수있다.

 

 

재질의 쉐이더가 gpu instancing을 지원한다면 재질에 enable GPU instancing 속성이 표시된다. 유니티에서 기본적으로 제공하는 쉐이더인 standard, standardSpecular, mobile diffuse, mobile bumped등이 gpu instancing을 지원한다.

예에서 standard 쉐이더를 사용하였다. 재질의 enable GPU Instancing 속성에 체크한다.

 

 

batches의 수치가 감소한것을 확인할수있다. 단일 GPU 인스턴싱 드로우콜에서 동일한 메시와 동일한 재질을 공유하는 게임 오브젝트에 대하여 일괄처리한다.

 

 

각각의 인스턴스는 변형이 가능하다.  기본적으로 유니티는 각 인스턴스 드로우콜에서 서로 다른 트랜스폼을 가진 게임오브젝트 인스턴스만 처리한다.

각 인스턴스에 대해 서로 다른 색상 값으로 인스턴스화 된 셰이더를 만드는 방법은 아래를 참고한다.

docs.unity3d.com/Manual/GPUInstancing.html

(adding per-instance data)

 

 

batching priority(배칭 우선순위)
일괄 처리시(batching) 유니티는 인스턴싱(GPU instancing)보다 정적 배칭을(static bathcing) 우선시한다. 
게임 오브젝트에 gpu instancing와 static batching을 설정한 경우 만약 유니티가 정적 배칭을 성공적으로 처리한다면 해당 게임 오브젝트의 인스턴싱을 비활성화한다.
동적배칭보다 인스턴싱을 우선시한다. 유니티가 게임오브젝트의 인스턴싱을 처리할수있다면 해당 오브젝트의 동적 배칭을 비활성화한다.

 


기타
gpu instancing는 skinnedMeshRenderer를 지원하지않는다.
포워드 렌더링에서 다중 라이트에 영향을받는 오브젝트를 효율적으로 인스턴싱할수없으며 추가적인 패스가 아닌 오직 기본 패스가 효과적으로 인스턴싱을 사용할수있다.

docs.unity3d.com/Manual/GPUInstancing.html

댓글

Designed by JB FACTORY