Dx11의 파이프 라인의 첫번째 스테이지는 Input-Assembler(IA) 스테이지라고 한다. 이 스테이지에서는 Direct3D가 렌더를 하기위해 필요한 정보를 설정하는 단계인다.
두번째 스테이지는 버텍스 셰이더(VS)이다. 하나의 점을 Vertex(정점)라고 하고 이 정점들이 모여서 삼각형과 같은 도형을 만들게 된다. VS에서는 각각의 정점에 대해서 우리가 작성해 놓은 코드를 실행하게 된다. 또한 버텍스 셰이더는 항상 하나의 Input 정점과 Output정점을 가진다. 이 정점 데이터는 IA에의해서 버텍스 셰이더로 제공된다.
3,4,5번째 스테이지는 텍셀레이션을 다루는 선택적인 스테이지이다. 텍셀레이션은 Direct3D에 새롭게 추가된 Hull Shader와 Domain Shader를 사용 한다. 하드웨어 텍셀레이션은 간단히 말해 지오메트리 데이터를 증가 시키거나 감소 시키는 일종의 LOD(Level of detail)이다. 이 기술을 사용하면 모델을 수 십만개 또는 수 억개의 고 폴리곤 모델로 실시간으로 렌더할 수 있다. 어플리케이션에서는 로우 폴리곤의 적은 데이터만을 하드웨어로 넘겨주면 하드웨어에서 폴리곤을 더 작은 조각으로 나눠서 좀더 디테일하게 생성하여 랜더하게 된다.
hull shader는 버텍스 셰이더의 output을 input으로 받는다. 그리고 제어점(Control point)을 생성하는 작업과 Patch Constant Data를 계산하는 잡업을 한다.
텍셀레이션 스테이지는 hull shader와 domain shader사이의 스테이지로써 hull shader의 output을 가지고 하드웨어에서 폴리곤을 분할하는 고정 함수 스테이지 이다. domain shader는 나누어진 포인트를 정점으로 출력하는 역할을 한다.
6번째 스테이지는 지오메트리 셰이더(GS)이다. 이 스테이지도 역시 선택 사항이다. 만약 텍셀레이션을 사용하지 않는다면 지오메트리 셰이더는 버텍스 셰이더 다음단계에 실행된다. 지오메트리 셰이더에서는 필요에 따라 정점을 제거하거나, 정점을 새로 생성하는 기능을 한다. 주로 그림자 효과나 큐브 맵을 한번의 처리로 렌더링 할때 사용한다.
7번째 스테이지는 픽셀 셰이더(PS)이다. 픽셀 셰이더에서는 이전 단계의 결과물인 지오메트리 데이터를 받아 픽셀들에 셰이드를 하는 역할을 한다. 픽셀 셰이더의 최종 결과물은 최종 스크린에 출력될 하나의 컬러값이다. 만약 텍셀레이션과 지오메트리 셰이더를 사용하지 않는다면 픽셀 셰이더는 버텍스 셰이더의 출력값을 입력값으로 받아 사용한다. 픽셀 셰이더의 입력값은 각각의 프리미티브가 레스터라이져된 보간된 값들이다.
'IT 이모저모' 카테고리의 다른 글
스텐실 버퍼 (0) | 2018.03.05 |
---|---|
소프트웨어 스키닝 (0) | 2018.03.05 |
DirectX Tools (0) | 2018.03.05 |
DX 11 - Direct3D 초기화 (0) | 2018.03.05 |
Geometric Skinning with Approximate Dual Quaternion Blending (0) | 2018.03.05 |