
0. 정점 데이터의 구조화와 기본 도형의 정의 (Primitive Topology)
Input Assembly 단계는 앞선 Stage 0에서 VRAM으로 전송된 Vertex Buffer와 Index Buffer를 읽어 들여, GPU가 처리할 수 있는 기본 단위인 Primitive (점, 선, 삼각형 등)로 조립하는 과정입니다.
이 단계는 프로그래밍이 불가능한 고정 기능(Fixed-Function) 단계로, 하드웨어적으로 매우 빠르게 수행됩니다.
1. Primitive Topology : 도형의 조립 방식 정의
같은 정점 데이터라도 이를 어떻게 해석하느냐에 따라 전혀 다른 결과물이 나옵니다.
Input Assembler는 CPU가 설정한 Primitive Topology 정보를 바탕으로 정점들을 연결합니다.
- Point List : 각 정점을 개별적인 점으로 처리합니다.
- Line List : 두 개의 정점을 쌍으로 묶어 선분으로 처리합니다.
- Triangle List : 세 개의 정점을 하나로 묶어 독립적인 삼각형을 만듭니다. 가장 일반적으로 사용되는 방식입니다.
- Triangle Strip : 인접한 삼각형들이 정점을 공유하게 하여, 적은 데이터로 많은 삼각형을 연속해서 그려냅니다.
개발자 관점의 포인트 : 데이터 전송량을 최적화하기 위해 적절한 Topology를 선택하는 것이 중요합니다. 현대적인 엔진에서는 주로 Triangle List와 Index Buffer를 조합하여 유연성과 효율성을 동시에 잡습니다.
2. Indexing : 정점의 재사용과 조립
Stage 0에서 언급한 Index Buffer가 실제로 일을 하는 곳이 바로 여기입니다.
- Process : Input Assembler는 Index Buffer를 차례대로 읽으며, 해당 인덱스 번호가 가리키는 Vertex Buffer의 정점 데이터를 찾아(Fetch) 쉐이더로 보낼 스트림을 형성합니다.
- Vertex Reuse : 인덱싱을 통해 동일한 정점이 여러 삼각형에 포함되어 있음을 확인하면, GPU는 불필요한 중복 연산을 피할 준비를 합니다.
3. Fixed-Function Stage : 하드웨어 최적화
Input Assembly는 개발자가 직접 코드를 작성하는 단계가 아닙니다. 대신 그래픽 API(DirectX/Vulkan 등)를 통해 설정값을 넘겨주면 GPU 하드웨어가 자동으로 처리합니다.
- 속도 : 전용 회로에서 동작하므로 처리 속도가 매우 빠릅니다.
- 자동화 : 정점에 시스템 값(System-Generated Values)인 VertexID나 InstanceID를 부여하여, 쉐이더에서 "내가 몇 번째 점인지" 알 수 있게 해줍니다.
4. 클라이언트 개발자 관점의 포인트 (Data Layout)
이 단계에서 퍼포먼스를 높이기 위해 개발자는 Input Layout (혹은 Vertex Declaration)을 신경 써야 합니다.
- Memory Alignment : 정점 데이터 구조체가 메모리상에서 잘 정렬되어 있어야 GPU가 한 번에 데이터를 읽어오는 효율(Bus Efficiency)이 극대화됩니다.
- Cache Locality : Index Buffer의 순서가 실제 메모리상의 정점 순서와 너무 동떨어져 있으면 캐시 미스가 발생하여 성능이 저하될 수 있습니다. (정점 재배치 최적화의 이유입니다.)
5. 핵심 요약 및 시사점
Input Assembly는 거대한 데이터 덩어리인 버퍼를 의미 있는 '도형의 흐름'으로 바꾸는 변환기입니다.
- Primitive Topology : 점을 선으로 만들지, 삼각형으로 만들지 결정합니다.
- Fixed-Function : 하드웨어가 담당하는 고정 단계입니다.
- VertexID / InstanceID : 각 정점에 고유 번호를 부여하여 다음 단계인 Vertex Shader가 일을 할 수 있게 돕습니다.
'CS > 그래픽스' 카테고리의 다른 글
| [Rendering Pipeline] Stage 3 : Tessellation (Hull Shader, Tessellator, Domain Shader) (0) | 2025.12.25 |
|---|---|
| [Rendering Pipeline] Stage 2 : Vertex Shader (0) | 2025.12.25 |
| [Rendering Pipeline] Stage 0 : Vertex/index Buffer Preparation(Application Stage) (0) | 2025.12.25 |
| Anti-Aliasing (0) | 2025.11.11 |
| Normal Map (0) | 2025.11.04 |