CS/그래픽스

[Rendering Pipeline] Stage 1 : Input Assembly

tae-woong 2025. 12. 25. 00:27

렌더링 파이프라인이란 3차원 상의 물체를 2차원의 컴퓨터 화면에 표현하기 위한 과정

0. 정점 데이터의 구조화와 기본 도형의 정의 (Primitive Topology)

Input Assembly 단계는 앞선 Stage 0에서 VRAM으로 전송된 Vertex BufferIndex Buffer를 읽어 들여, GPU가 처리할 수 있는 기본 단위인 Primitive (점, 선, 삼각형 등)로 조립하는 과정입니다.

 

이 단계는 프로그래밍이 불가능한 고정 기능(Fixed-Function) 단계로, 하드웨어적으로 매우 빠르게 수행됩니다.

 

1. Primitive Topology : 도형의 조립 방식 정의

같은 정점 데이터라도 이를 어떻게 해석하느냐에 따라 전혀 다른 결과물이 나옵니다.

 

Input Assembler는 CPU가 설정한 Primitive Topology 정보를 바탕으로 정점들을 연결합니다.

  • Point List : 각 정점을 개별적인 점으로 처리합니다.
  • Line List : 두 개의 정점을 쌍으로 묶어 선분으로 처리합니다.
  • Triangle List : 세 개의 정점을 하나로 묶어 독립적인 삼각형을 만듭니다. 가장 일반적으로 사용되는 방식입니다.
  • Triangle Strip : 인접한 삼각형들이 정점을 공유하게 하여, 적은 데이터로 많은 삼각형을 연속해서 그려냅니다.

개발자 관점의 포인트 : 데이터 전송량을 최적화하기 위해 적절한 Topology를 선택하는 것이 중요합니다. 현대적인 엔진에서는 주로 Triangle ListIndex 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)을 신경 써야 합니다.

  1. Memory Alignment : 정점 데이터 구조체가 메모리상에서 잘 정렬되어 있어야 GPU가 한 번에 데이터를 읽어오는 효율(Bus Efficiency)이 극대화됩니다.
  2. Cache Locality : Index Buffer의 순서가 실제 메모리상의 정점 순서와 너무 동떨어져 있으면 캐시 미스가 발생하여 성능이 저하될 수 있습니다. (정점 재배치 최적화의 이유입니다.)

 

5. 핵심 요약 및 시사점

Input Assembly는 거대한 데이터 덩어리인 버퍼를 의미 있는 '도형의 흐름'으로 바꾸는 변환기입니다.

  • Primitive Topology : 점을 선으로 만들지, 삼각형으로 만들지 결정합니다.
  • Fixed-Function : 하드웨어가 담당하는 고정 단계입니다.
  • VertexID / InstanceID : 각 정점에 고유 번호를 부여하여 다음 단계인 Vertex Shader가 일을 할 수 있게 돕습니다.