C++ Algorithm & Study/Game Math & DirectX 11

[Direct11] 4. Rendering Pipeline - Input Assembler (IA)

GameChoi 2023. 6. 13. 16:39

1. Rendering PipeLine

1.1 Rendering PipeLine

1.1.1 Input Assembler

 - 메모리에서 기하 자료를 읽어 기하학적 기본도형을 조립

   - Vertex

     - Direct3D의 정점은 본질적으로 공간적 위치 이외의 정보도 담고, 좀 더 복잡한 렌더링 효과를 낼 수 있음

   - 정점들은 정점 버퍼를 통해 렌더링 파이프라인에 묶임

     - 연속적인 메모리에 저장하는 자료구조, 어떤 식으로 조합해서 기본 도형을 형성할 것인지 말하지 않음

1.1.1.1 Primitive Topology

 - 기본 도형을 형성하는 방식을 DX3D에게 알려주는 수단

   - 기본 도형 위상 구조를 지정하는 함수 & 다양한 기본 도형 위상 구조들을 정의한 열거형

void ID3D11DeviceContext::IASetPrimitiveTopology(D3D11_PRIMITIVE_T0P0LᄋGY Topology);
typedef enum D3D11_PRIMITIVE_T0P0L0GY;

     - 한 번 기본도형 위상구조를 설정하면 다음 호출이 있을 때 까지 모든 그리기 호출에서 위상 구조가 적용

1.1.1.2 Index

 - 사각형 하나와 팔각형 하나를 삼각형 목록을 이용하여 구축하기 위해 정점 배열을 사용

Vertex quad[6] = { vO, vl, v2, vO, v2, v3, };
Vertex octagon[24] = { vO, vl, v2, 
            		vO, v2, v3, 
            		vO, v3, v4,
            		vO, v4, v5, 
            		vO, v5, v6, 
            		vO, v6, v7,
            		vO, v7, v8, 
            		vO, v8, vl };

   - 3차원 물체를 형성하는 삼각형들은 다수의 정점들을 공유

     - 2개가 중복되는 것은 큰 문제X, 하지만 팔각형의 경우는 문제가 심각

       - 팔각형은 모든 삼각형이 중심 중점을 공유하므로 모형이 세밀하고 복잡할수록 중복되는 정점들도 많아짐

   - 정점들의 중복이 바람직하지 않는 이유

     - 메모리 요구량이 증가 & 그래픽 하드웨어의 처리량이 증가

 - 삼각형 목록에서 중복 정점들을 제거하는 방법을 고안하여 생각해낸 해법은 Index를 사용

   - 고유한 정점들로 정점 목록을 만들어 어떤 정점들을 어떤 순서로 사용해서 삼각형을 형성하는지 그 정점들의 색인들을 적절히 나열함으로써 지정

Vertex v [4] = {v0, vl, v2, v3}; UINT indexList[6] = {0, 1, 2, /* */ 0, 2, 3};

   - 그래픽 카드는 정점 목록의 고유한 정점들을 처리한 후 색인 목록을 이용하여 정점들을 조합해 삼각형을 형성

     - 정점들에 중복이 없어진 대신 색인들에 중복이 생겼지만 큰 문제X

       - 색인은 그냥 정수이므로 완전한 정점 구조체보다 적은 양의 메모리를 차지

       - 정점 캐시 순서가 좋은 경우 그래픽 하드웨어는 중복된 정점들을 처리하지 않아도 됨