그래픽스(Graphics)/DirectX9~12
Instancing
3DMP
2023. 2. 5. 10:00
메쉬는 같은데 데이터 값만 다른 인스턴싱의 예시 이미지들..
CPU 단에서 위치등을 지정하여 gpu 에 인스턴싱을 하기 위한 방법으로 다음의 것들을 쓸 수 있다
IASetVertexBuffers
- 물체의 정점의 구조세팅을 말함, 각 물체의 위치정보들을 넘겨주게 됨
즉 하나의 오브젝트를 여러 위치에 대해 여러번 그리는것
- 한번에 그릴 여러 위치에 대한 데이터를 CPU 단에서 모아서GPU 에 한번에 보낸다
- GPU 에 넘겨줄 인스턴스 파라미들은 예를 들어 월드, 뷰, 투영행렬 등의 정보를 넘길 수 있다
- 리소스 버퍼 또한 한번에 데이터를 묶어 보낼 만큼의 양을 확보한다
정점 셰이더에서 입력으로 사용될 정보들이 추가로 있는 걸 알 수 있자 world, MV, MVP
보통 월드, 카메라, 투영을 전역으로 넘겨 받는데
위 VS_IN 에서 인스턴싱이 꼭 이런 데이터만 넘어오는 것은 아니지만 인스턴싱시 VS 에서도 데이터를 받아서 오브젝트마다 위치를 다르게 처리 할 수 있는 예시로 볼 수 있다 ( 오브젝트 메시는 동일하지만)
다시 말해 오브젝트마다 최소한의 다른 데이터만 넘겨 주어 렌더링 한다는 것이다
뭉처서 넘기는 만큼 드로우 콜 횟수가 줄어들게 됨으로 더 빠른 성능을 보인다
파티클 같은경우 최소한의 정점만 (보통 정점 1개) 만 통과 시켜 지오메트리 셰이더에서 파티클이 그려져야 하는경우
Plane 을 마들어 파티킬을 그려 인스턴싱의 효과를 더욱 극대화 할 수 있다
https://3dmpengines.tistory.com/2317
성능은 1.5~2배 이상의 성능 향상을볼 수 있다( 상황에 따라 다름)
반응형