https://docs.microsoft.com/ko-kr/windows/win32/direct3d12/pipelines-and-shaders-with-directx-12
그래픽 파이프라인이란, GPU가 프레임을 렌더링하면서 데이터가 어떻게 들어오고 나가는지를 나타내는 순차적 흐름이다.
파이프라인으로 상태나 입력이 들어오면 GPU가 작업들을 수행하면서 결과를 화면상에 나타낸다.
이 그래픽 파이프라인에는 이러한 계산 및 처리를 위한 프로그래밍 기능, 렌더링 효과와 셰이더와 같은 기능들이 포함된다.
DirectX3D 10이상 버전부터는 API상에서 파이프라인의 기능 영역으로 스테이지라는 것으로 구분한다고 한다.
Input Assembler Stage(입력 어셈블러)는 이 파이프라인의 첫 번째 단계이며 입력 어셈블러는 점 혹은 선이나 삼각형과같은 데이터로 채워진 버퍼를 읽어서, 다른 파이프라인 단계에서 사용할 수 있도록 데이터를 기본형식으로 Assemble한다.
입력 어셈블러에서 처리되는 기본 형식은 아래와 같다.
정점 셰이더(MS Doc에서는 꼭짓점 셰이더로 표기)라고도 부르는 Vertex Shader는 이전의 입력 어셈블러로부터 받은 정점을 처리하여 변환하거나 정점별로 조명을 적용하는 등, 정점별로 작업을 수행하는 단계이다.
정점 셰이더는 항상 단일 입력 정점에서 작동하여 단일 출력 정점을 생성한다.(?) 파이프라인이 실행되기위해서는 이 정점 셰이더 단계가 항상 활성화되어 있어야 하며, 정점을 수정하거나 변환이 필요하지 않은 경우일지라도 통과 정점 셰이더(?)를 작성하여 이를 파이프라인에 설정해야한다.
정점 셰이더는 하나 이상의 입력과 출력이 존재하며, 입력은 각각 최대 4개로 구성될 수 있는 32벡터 16개를 필요로한다. 출력 역시 마찬가지로 입력과 같이 16개의 32비트 4개 구성요소 벡터를 필요로한다.
우선 테셀레이션이라는 용어 자체는 Tile이라고 부르는 일정한 형태의 도형들로 겹치지않게 빈틈없이 평면을 채우는 것을 의미한다. 테셀레이션 기술을 사용하여 표면들을 더욱 디테일하게 표현할 수 있다.
DirectX3D 11기준으로 테셀레이션 단계는 아래의 3가지의 파이프라인으로 구성된다.
테셀레이션은 표면을 일정한 형태의 기하도형으로 나눠야 하는데, 입력으로 들어온 삼각형이나 선에 해당하는 기하 도형을 생성하는 단계이다.
기하 도형을 나타내는 도메인의 샘플링 패턴을 만들고, 더욱 작은 삼각형이나 점 혹은 선과같은 개체 집합을 생성하여 샘플을 연결하는 단계이다.
각 도메인 샘플에 해당하는 정점의 위치를 계산하는 단계이다.
Resterizer 단계는 3D 그래픽을 실시간으로 구성하기 위해 벡터 정보를 픽셀로 구성되는 래스터 이미지로 변환하는 단계이다.
이 단계가 진행되는 동안 입력으로 들어온 기본 요소들은 픽셀로 변환이 되며 각각의 정점별 값을 보간하게된다.
Pixel Shader는 상수, 텍스처 데이터, Resterizer 단계로부터 보간된 정점별 값 및 기타 데이터들을 사용하여 픽셀별로 출력을 계산하는 프로그램이다.