다이렉트11에서 그래픽 파이프라인을 정의하는 인터페이스는 ID3D11Device, ID3D11DeviceContext 이다.
ID3D11Device: GPU와 GPU의 자원의 virtual representation을 제공.
ID3D11DeviceContext: 파이프라인에 대한 그래픽처리를 나타낸다.
ID3D11Device 인스턴스로 장면에서의 그래픽을 처리하는 GPU 자원으로 구성하고 획득하며, ID3D11DeviceContext로 그래픽 파이프라인에서의 적절한 쉐이더 단계에서 자원들을 처리한다. ID3D11Device 메소드는 씬을 setup하거나 device가 바뀔때 호출되지만 ID3D11DeviceContext는 매 프레임마다 호출한다.
1. Input Assembler 단계
user-filled buffer로부터 원시 데이터를 읽어들여 그 후 파이프라인 단계에서 사용될 primitive types(line list, triangle strips 등등)데이터로 assemble하는 역할을 수행한다.
2. vertex shader 단계
input assembler 단계를 통과한 vertices들을 처리하는 단계. transformation, skinning, morphing, and per-vertex lighting과 같은 작업을 수행.
vertex shader는 단일 input vertex을 받고 output으로 단일 vertex를 출력한다.
3. Hull shader 단계
다이렉트11은 테셀레이션(GPU에서 low-detail subdivision surface를 higher-detail primitves로 바꾸는)을 구현하기위한 3가지의 새로운 단계를 support합니다. Hull shader, tesselator, domain shader 단계가 그것입니다.
4. Tesselator 단계
도메인(quad, tri or line)을 더 많은 작은 오브젝트(triangles, points or lines)로 잘게 나누는 작업을 수행한다.
5. Domain shader 단계
잘게 나누어진 포인트의 vertex position를 계산하는 단계.
6. Geomtry shader 단계
정점을 input으로 받아 application-specified 쉐이더를 적용하고 생성된 정점들을 출력한다.
버텍스 쉐이더와는 다르게 기하쉐이더는 입력으로 full primitive의 정점을 받는다. 기하쉐이더는 edge 인접 원시 데이터들을 입력을 받을 수 있다.
7. Stream Output shader
기하 쉐이더단계(또는 정점쉐이더 단계)에서 메모리에 있는 하나 이상의 버퍼로 정점 데이터를 연속적으로 출력하는 단계. 메모리에 출력된 데이터들은 pipeline에서 다시 읽어들일 수 있다.
8. Rasterizer 단계
vector 정보를 레스터 이미지(픽셀)로 변환하는 단계.
9. Pixel-shader 단계
픽셀 라이팅이나 post-processing과 같은 쉐이딩을 가능하게하는 단계.
10. Output-merger 단계
최종출력되는 픽셀의 색상을 생성한다. depth/stencil 테스트를 수행하여 실제로 렌더링여부를 결정하고 최종색상을 blend 한다.
'2020 이전 > DirectX' 카테고리의 다른 글
스텐실 버퍼를 이용한 라이트 볼륨 디퍼드 렌더링 (0) | 2019.06.05 |
---|---|
다이렉트X 2D게임 모작 (0) | 2019.04.23 |
HLSL 셰이더: paper burn, mask, distortion (0) | 2019.03.04 |
상수버퍼 패딩 (0) | 2019.02.07 |
DirectX input 시스템 (0) | 2019.01.22 |