https://learn.microsoft.com/en-us/windows-hardware/drivers/display/pipelines-for-direct3d-version-11

https://learn.microsoft.com/en-us/windows-hardware/drivers/display/pipelines-for-direct3d-version-11

DirectX11의 Pipeline

Input-Assembler

Input Assembler는 CPU에서 제공받은 정보를 바탕으로 Primitive를 생성

CPU는 Draw Call을 통해 Data Bus를 통해 GPU로 그래픽 정보를 넘겨준다.

여기에는 두 가지 방법이 있는데,

  1. Vertex Buffer

    Rendering할 Vertex 정보 만을 넘겨준다.

    여기에서 문제가 될 수 있는 것은

    triangle이나 quad 단위로 Vertex를 넘기는 경우,

    중복된 Vertex 정보를 넘기게 된다.

    Untitled

    이렇게 겹치는 vertex는 여러 번 전송된다.

    Data Bus는 실제로 두 하드웨어 간에 연결이기 때문에,

    Data의 양이 많아지면 속도가 크게 느려진다.

    때문에 이를 보완하기 위해 Index Buffer를 사용한다.

  2. Index Buffer

    vertex 정보를 table에 저장해두고, primitive를 만드는데 필요한 index를 저장한다.

    Index Vertex
    1 (2,4,5)
    2 (3,4,7)
    3 (1,7,4)
    4 (6,3,9)
    5 (4.4,3)

    이렇게 Table을 넘겨주고, Primitive 생성 시에 index를 통해 접근하면,

    중복된 Vertex Data의 양을 줄여, Data Bus에서 원활한 이동이 가능

    Untitled

    실제로는 요래 생겼습니다. (아닐 수도 있음)

어찌 되었건 IA Stage는 이렇게 전달 받은 vertex 정보를 통해 Primitive를 생성한다.

(Primitive - Polygon Mesh 생성에서 기본이 되는 단위)

Vertex Shader

Shader들은 기본적으로 Pragrammable한 단계, 병렬로 연산을 진행함.

그래서 Vertex Shader는 무엇이냐

Pixel Shader(Fragment Shader)와 함께 Pipeline에 필수적인 단계

이름처럼 각 Vertex에 대한 정보(위치, normal, 색상 등등)를 계산

모든 Vertex를 동시에 병렬처리하기 때문에,

계산 과정에서 인근 Vertex 정보를 참조할 수 없다.

이 단계에서 3가지 Transform을 진행한다.

Object Space → Word Space → Camera Space → Clip Space

각 단계는 World Transform, View Transform, Projection Transform이다.

Untitled

Projection Transform에서는 View Frustum외의 vertex를 Clipping한다.

Hull Shader - Tessellator - Domain Shader (Displacement Mapping)

Hull Shader에서 Tessellation Level을 결정

Tessellator가 Primitive를 분할

Domain Shader가 Height Map을 바탕으로 Displacement Mapping을 실시

Geometry Shader

Vertex를 바탕으로 더 많은 Vertex를 생성하거나 오히려 감소시켜 LOD에 사용하기도 함.

여러 그래픽적인 효과 구현에 사용

Rasterizer

Untitled

Pixel Shader로 진입하기 전에 Primitive의 내부를 Pixel로 채우는 과정

Untitled

Vertex의 정보를 Rater 이미지화 한다.

Untitled

이것이 Raster 이미지

굳이 이렇게 하는 이유도 역시 PCI-e Bus를 통해 전부 들여오는 것보다

GPU내에서 연산을 통해 생성하는 것이 효율적이기 때문이다.

Pixel Shader