반응형

 

메쉬는 같은데 데이터 값만 다른 인스턴싱의 예시 이미지들..

 

 

 

 

 

https://learn.microsoft.com/ko-kr/windows/win32/api/d3d11/nf-d3d11-id3d11devicecontext-drawindexedinstanced

 

ID3D11DeviceContext::D rawIndexedInstanced(d3d11.h) - Win32 apps

인덱싱된 인스턴스화된 기본 형식을 그립니다. (ID3D11DeviceContext.DrawIndexedInstanced)

learn.microsoft.com

 

 

CPU 단에서 위치등을 지정하여 gpu 에 인스턴싱을 하기 위한 방법으로 다음의 것들을 쓸 수 있다

IASetVertexBuffers

- 물체의 정점의 구조세팅을 말함, 각 물체의 위치정보들을 넘겨주게 됨

 

즉 하나의 오브젝트를 여러 위치에 대해 여러번 그리는것

 

  1. 한번에 그릴 여러 위치에 대한 데이터를 CPU 단에서 모아서GPU 에 한번에 보낸다
  2. GPU 에 넘겨줄 인스턴스 파라미들은 예를 들어 월드, 뷰, 투영행렬 등의 정보를 넘길 수 있다
  3. 리소스 버퍼 또한 한번에 데이터를 묶어 보낼 만큼의 양을 확보한다
  4.  

정점 셰이더에서 입력으로 사용될 정보들이 추가로 있는 걸 알 수 있자 world, MV, MVP

보통 월드, 카메라, 투영을 전역으로 넘겨 받는데

 

위 VS_IN 에서 인스턴싱이 꼭 이런 데이터만 넘어오는 것은 아니지만 인스턴싱시 VS 에서도 데이터를 받아서 오브젝트마다 위치를 다르게 처리 할 수 있는 예시로 볼 수 있다 ( 오브젝트 메시는 동일하지만)

다시 말해 오브젝트마다 최소한의 다른 데이터만 넘겨 주어 렌더링 한다는 것이다

 

뭉처서 넘기는 만큼 드로우 콜 횟수가 줄어들게 됨으로 더 빠른 성능을 보인다

 

파티클 같은경우 최소한의 정점만 (보통 정점 1개) 만 통과 시켜 지오메트리 셰이더에서 파티클이 그려져야 하는경우

Plane 을 마들어 파티킬을 그려 인스턴싱의 효과를 더욱 극대화 할 수 있다

https://3dmpengines.tistory.com/2317

 

성능은 1.5~2배 이상의 성능 향상을볼 수 있다( 상황에 따라 다름)

 

 

 

 

 

 

반응형

+ Recent posts