[DX] 입력 조립기 단계 (Input assembler, IA)

김진우·2025년 7월 7일

DirectX

목록 보기
14/32
post-thumbnail

정의

입력 조립기 단계는 DirectX 그래픽스 파이프라인에서 첫 번째 단계로, 정점(Vertex) 데이터를 GPU 파이프라인에 전달하기 위해 형식에 맞게 준비하고 조립하는 역할을 한다.

IA는 정점 버퍼(Vertex Buffer) 및 인덱스 버퍼(Index Buffer)에서 데이터를 읽고, 프리미티브 형태(삼각형, 선 등)로 조합하며, 다음 단계인 버텍스 셰이더(Vertex Shader)로 넘긴다.

구성 요소

  • 정점 버퍼(Vertex Buffer) : 정점들의 위치, 색상, 텍스처 좌표 등의 데이터 배열
  • 인덱스 버퍼(Index Buffer) : 정점의 인덱스를 저장하여 중복 정점 사용 최소화
  • 입력 레이아웃(Input Layout) : 정점의 데이터 구조(포맷)를 GPU에 명시
  • 프리미티브 토폴로지(Primitive Topology) : 정점들을 어떤 도형(점, 선, 삼각형 등)으로 조합할지 지정

동작 방식

  1. 정점 버퍼 및 인덱스 버퍼 설정 : CPU 메모리에서 GPU 메모리로 정점 데이터를 업로드한다.
  2. 입력 레이아웃 정의 및 설정 : 정점 구조를 설명하는 D3D11_INPUT_ELEMENT_DESC 배열을 정의한다.
  3. 프리미티브 토폴로지 설정 : 정점이 어떤 형태(삼각형, 선 등)로 조립될지 설정한다.
  4. 정점 데이터 조립 : 정점 버퍼에서 데이터를 읽고, 입력 레이아웃을 기준으로 해석하며, 토폴로지에 따라 정점들을 조합한다.
  5. 버텍스 셰이더로 전달 : 조립된 정점 데이터가 버텍스 셰이더로 전달된다.

프리미티브 토폴로지 (Primitive Topology)

열거형 상수의미설명
D3D11_PRIMITIVE_TOPOLOGY_POINTLIST점 리스트각 정점이 하나의 점
D3D11_PRIMITIVE_TOPOLOGY_LINELIST선 리스트2개 정점 → 1개 선분
D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP선 스트립선분들이 이어서 그려짐
D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST삼각형 리스트3개 정점 → 독립 삼각형
D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP삼각형 스트립연속된 삼각형으로 구성, 정점 수 절약

선 그리는 방식 차이
D3D11_PRIMITIVE_TOPOLOGY_LINELIST vs D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP

LINELIST는 항상 정점 2개를 이용해서 선을 그리기 선분을 여러 개 그릴 때 따로 그려지게 된다. 따라서 연속된 선분을 그리려면 이전에 끝났던 정점을 또다시 사용해서 선분을 그려야 한다.
LINESTRIP은 선분을 그릴 때 두 정점을 시작지점, 도착지점 2가지로 봤을 때 마지막 도착 지점의 정점이 다음에 그릴 때 시작 지점이 된다. 즉, 한 개의 정점이 추가로 들어오면 마지막에 도착했던 정점에서부터 이어져서 새로운 정점까지 선분이 그려지게 된다.

삼각형 그리는 방식 차이
D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST vs D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP

TRIANGLELIST는 새로운 정점 3개 단위로 삼각형이 그려진다. 즉, 삼각형 2개를 그리려면 6개의 정점, 삼각형 3개를 그리려면 9개의 정점이 필요하다.
TRIANGLESTRIP는 정점 3개 단위로 삼각형을 그리지만, 여러개의 삼각형을 그릴 때 정점을 이어서 그리게 된다. 즉, 1개의 삼각형에서는 똑같이 3개의 정점이 필요하지만 2개의 삼각형을 그릴때 마지막 2개의 정점에서부터 새로운 1개의 정점으로 이어지게 삼각형이 그려지기 때문에 4개의 정점 정보만 있으면 된다.

0개의 댓글