개발자 면접 공부/그래픽스

그래픽스 DirectX11렌더링 파이프라인

chogyujin 2022. 7. 21. 23:37
728x90

오늘은 다이렉트 X11 렌더링 파이프라인에 대해 공부해보겠습니다.


다이렉트 X11은 9개의 단계에 걸처 렌더링을 진행합니다.(더 있는걸로 알지만 자세히는 안보겠습니다.)

 

1. Input Assembler(IA)

사용자로부터 원시 데이터를 읽어 그 후 파이프 라인 단계에서 사용될 Primitive types(line list, triangle strips등등)
데이터로 assemble하는 역활을 합니다.

 

2. Vertex Shader(VS)

IA단계를 통과한 정점들을 처리하는 단계입니다. 변환, 스키닝, 조명등 수많은 특수 효과를 정점 쉐이더에서 수행합니다.
정점 쉐이더에서 입력 정점 자료는 텍스쳐라든가 변환 행렬, 장면 광원 정보등 GPU 메모리에 담긴 다른 자료에도 접근이 가능합니다.

이 단계에서는 작업 중 변환이 어느 물체의 로컬 좌표를 월드 좌표로, 왈드 좌표를 뷰 스페이스 좌표로 바꿔줍니다

투영 변환등도 여기서 작업이 이루어집니다.

 

3. Hull Shader

다이렉트 11 버전부터 나온 파이프 라인입니다. LOD를 구현합니다.

 

4.Tesselator

도메인을 더 많은 작은 오브젝트로 잘게 나누는 작업을 합니다.

 

5. Domain Shader

잘게 나누어진 포인트의 vertex Position을 계산하는 단계

 

6. Geometry Shader

이 단계에서는 정점 쉐이더의 처리를 거친 정점 데이터를 입력받습니다. 정점에 정보를 추가하거나 삭제해 입력 기본도형을 다른 여러 기본 도형들로 확장할 수도, 특정 조건에 따라서는 입력된 기본 도형을 출력하지 않고 버립니다.

 

7.Rasterizer(RS)

레스터라이저 단계는 3차원 삼각형들을 픽셀 색상을 계산합니다.

또한, 각 프리미티브 구성하는 정점은 픽셀로 변환되고 프리미티브 내부에 해당하는 점들은 보간을 통해 픽셀로 변환시킵니다.

 

1. 원근 투영 나누기

2. 카메라 절두체를 벗어나는 점들을 클리핑

3. 프리미티브를 2차원 뷰포트로 매핑

4. 프리미티브의 모든 픽셀들에 대해 픽셀 쉐이더에 호출

 

8. Pixel Shader(PS)

각 픽셀의 데이터들을 생성합니다. 상수 변수, 텍스처 데이터, 또는 픽셀 출력 데이터 등을 결합해 출력 색상을 결정합니다.

이 단계에서 픽셀 조명 계산 또는 픽셀에 대한 후처리를 할 수 있습니다.

 

하나의 프리미티브 구성하는 각 픽셀에 대해 픽셀 쉐이더를 한 번씩 호출합니다.

 

9. Output Merge(OM)

최종적으로 픽셀의 색상을 생성해 렌더 타깃으로 출력하는 단계입니다. 일부 픽셀 단편 들이 깊이 판정이나 스텐실 판정에 의해 버려지게 되며 버려지지 않은 픽셀 단편은 후면 버퍼에 기록됩니다.

흔히 말하는 블렌딩도 이 단계에서 일어남

블렌딩은 새 픽셀이 후면 버퍼의 기존 픽셀을 완전히 덮는게 아니라 두 픽셀을 일정한 공식에 따라 혼합합니다.

 

깊이 스텐실 검사도 여기서 진행합니다.

픽셀이 그려저야 말아야하나 검사를 하고 그 검사는 보통 z값으로 검사를 합니다.