개요
지금까지는 DrawIndexedInstanced의 두번째 매개변수인 인스턴스 갯수를 1로 해서 렌더링 파이프라인을 실행했었다. 이 인스턴스 갯수를 1이상으로 하면 여러개의 인스턴스를 그릴 수 있다. 이는 보통 같은 메쉬의 오브젝트 여러개를 동시에 그릴때 활용된다.
인스턴스 ID
인스턴스 개수를 n개로 하여 렌더링 파이프라인을 실행하면 우리가 넘겨준 색인 범위의 기하구조들을 n번씩 그리게 된다. 이때 한번의 색인 범위는 하나의 인스턴스가 되며 n번의 인스턴스 그리기가 이루어지는 셈이다.
이때 정점셰이더의 SV_InstanceID 의미소 매개변수에 현재 해당 정점의 소속 인스턴스 ID가 전달된다. 이 ID를 활용하여 인스턴싱 렌더링이 가능하다.
우선 월드행렬, 사용 재질 인덱스등의 인스턴스 오브젝트 별 데이터를 구조적버퍼로 셰이더에 넘겨준다. 그 후 정점셰이더에서 인스턴스ID를 색인으로 하여 인스턴스 오브젝트 별 데이터에 접근하면 현재 자신의 인스턴스에 해당하는 오브젝트 데이터로 렌더링이 진행된다. 따라서 각각의 인스턴스의 정점들은 자신의 데이터로 렌더링되어 각 인스턴스들이 그려지게 된다. 정점셰이더에서는 자신이 필요한 데이터를 처리하고 다음 단계들에서 필요한 인스턴스 데이터를 그 자체를 담아 넘겨주거나 인스턴스 ID를 그대로 넘겨주면 다음 단계들에서도 인스턴스 데이터로 렌더링이 진행되게 된다.
이렇게 각각의 인스턴스별로 렌더링 단계들이 수행되어 한번의 그리기 호출로 여러개의 인스턴스 오브젝트를 그릴 수 있다.
참고서적
DirectX 12를 이용한 3D 게임 프로그래밍 입문
'그래픽스 > DirectX12' 카테고리의 다른 글
[Directx12][17장]3차원 물체의 선택 (0) | 2023.03.21 |
---|---|
[Directx12][16장][2]절두체 선별 (0) | 2023.03.21 |
[Directx12][15장]1인칭 카메라 & 동적 색인화 (0) | 2023.03.21 |
[Directx12][14장]테셀레이션 (0) | 2023.03.21 |
[Directx12][13장]계산셰이더 (0) | 2023.03.21 |