'Input Assembler(입력 조립)' 단계에서는 CPU에서 GPU로 전달되는 3차원 모델의 정보를 GPU에서 처리할 수 있는 형식으로 변환한다. CPU 자원인 3차원 모델 정보는 GPU에서 직접 접근할 수 없기 때문에,
이 정보들은 'Vertex Buffer'와 'Index Buffer'라 불리는 자료구조에 저장되어 GPU로 전달된다. 이후 GPU는 전달 받은 데이터를 읽어와 '기본 도형(Primitive)'을 조립하여 화면에 표시할 준비를 한다.
정리하면 'Input Assembler(입력 조립)' 단계는 CPU로 부터 전달 받은 Vertex Buffer 와 Index Buffer 를 통해 기본도형(Primitive) 를 조립하는 단계이다.
* 알아두면 좋은것 - 'Mesh' 의 개념
컴퓨터 그래픽스에서 'Mesh' 는 3차원 모델을 표한하기 위한 가장 기본적인 구조 중 하나이다.
'Mesh' 는 3차원 모델에 관련된 정보를 기혹한 데이터로 여러개의 점(Vertex) 과 이를 연결하는 선(Edge) 또는
면(Face) 으로 구성된다.
일반적으로 'Mesh' 는 삼각형으로 구성된다. (3차원 모델을 구성하는 가장 기본적인 단위 == 삼각형)
삼각형은 표면을 효과적으로 표현할 수 있고, 컴퓨터 그래픽스에서 계산하기에도 비교적 간단한 형태이기 때문이다.
Vertex Buffer (정점 버퍼)
'정점(Vertex)'은 3차원 모델을 구성하는 가장 기본적인 단위이다.
3차원 모델은 여러 개의 '점(Vertex)'과 이를 연결하는 '선(Edge)' 또는 '면(Face)'로 구성된다.

Direct3D의 정점은 공간적 위치 이외의 정보도 담을 수 있으며, 이를 통해서 복잡한 렌더링 효과를 나타낼 수 있다.
일반적으로 정점에 포함될 수 있는 값들의 예시는 다음과 같다.
- 위치 : 정점의 3차원 좌표
- 색상 : 정점의 색상
- Normal Vector : 정점의 표면 방향을 나타내는 벡터 (조명 및 그림자 효과에 사용)
- 텍스처 좌표 : 텍스처 이미지의 특정 부분을 매핑하기 우한 좌표 (UV 좌표)
- Tangent / BiTangent : 텍스처 매핑에 사용되는 보조 벡터 (조명 효과에 사용)
이러한 정점 목록을 저장한 자료구조를 'Vertex Buffer' 라고 한다.
Index Buffer (인덱스 버퍼)
하나의 3차원 모델을 구성하는 삼각형들은 다수의 정점들을 공유하며, 그 형태가 세밀하고 복잡할수록 중복되는 정점들도 많아진다. 정점들의 중복은 다음과 같은 문제를 야기할 수 있다.
- 메모리 요구량 증가 (같은 정점 자료를 여러 번 저장할 필요가 있을까?)
- GPU 처리량 증가 (같은 정점 자료를 여러 번 처리할 필요가 있을까?)
이를 해결할 방법은 인덱스(Index)를 사용하는 것이다. 정점들로 목록을 만들어 두고(정점 버퍼) 어떤 정점을 어떤 순서로 사용할지 인덱스를 나열하는 것이다. 이러한 인덱스 목록을 저장한 자료구조를 'Index Buffer' 라고 한다.

* 중요!
Index Buffer 를 사용할 때는 Index 의 순서에 주의해야 한다.
Index 의 순서를 반드시 시계 방향으로 지정해 주어야 하며, 이는 매쉬의 앞과 뒤를 구분할 때 사용된다.
(현재 매쉬의 방향이 앞일 경우 - 시계 방향 / 뒤일 경우 - 반시계 방향)
Primitive Topology (기본도형 위상구조)
정점 버퍼는 단순히 정점들을 연속적인 메모리에 저장하는 자료구조에 불과하기 때문에 실제로 GPU에서는 이러한 정점들을 이용하여 어떤 도형을 만들어야 할지에 대한 정보가 필요하다. 예를 들면 정점을 두 개씩 엮어 선분을 구성할 수도 있고, 세 개씩 엮어 삼각형을 구성할 수도 있다.
DirectX 에서는 기본 도형을 형성하는 방식을 지정하는데 'Primitive Topology (기본도형 위상구조)' 를 이용한다.
4개의 정점과 Vertex Buffer, Index Buffer 가 주어 졌을 때 정사각형을 만드는 경우는 아래와 같다.

'DirectX' 카테고리의 다른 글
| [Computer Graphics] 렌더링 파이프라인 - Rasterization (0) | 2024.04.10 |
|---|---|
| [Computer Graphics] 렌더링 파이프라인 - Vertex Processing (0) | 2024.04.10 |