game-1 님의 블로그

[DirectX12] 렌더링 파이프 라인 1-4 본문

DirectX

[DirectX12] 렌더링 파이프 라인 1-4

game-1 2025. 3. 17. 10:09

DirectX12 study


기하 셰이더

기본 도형을 입력받아 추가적인 도형을 생성하거나 변경할 수 있습니다. 

삼각형 목록을 그리는 경우, 기하 셰이더에는 삼각형을 정의하는 정점 세 개가 입력됩니다.

 

기하 셰이더 이점

1. 기하구조를 gpu에서 생성하거나 파괴할 수 있습니다.

 입력 기하구조를 여러 개의 기하구조들로 확장할 수도 있고, 조건에 따라 입력 기하구조를 폐기할 수도 있습니다.

2. 기하학적 효과를 쉽게 구현 할 수 있습니다. (ex 실루엣 생성, 법선 벡터 시각화)

3. LOD 기술과 결합하여 최적화 가능합니다.

 

 

기하 셰이더의 역할

1. 입력된 기본 도형을 증식하거나 제거할 수 있습니다.

이를 통해, 하나의 점을 여러 개의 점으로 변환 가능합니다.

하나의 삼각형을 여러 개의 삼각형으로 확장 가능합니다.

특정 도형을 제거하여 최적화가 가능합니다.

 

2. 기본 도형을 기반으로 새로운 도형을 생성합니다.

삼각형을 입력받아 법선을 기반으로 실루엣 생성합니다.

ex) 한 개의 선을 입력받아 리본 형태로 확장한다.

 

3. 기본 도형의 속성을 변경합니다.

추가적인 색상 및 텍스처 좌표를 적용합니다.

삼각형의 꼭짓점을 다른 형태로 변형합니다.

 


절단

 

시야 절두체 바깥에 있는 기하구조는 폐기해야합니다

따라서 절두체의 경계면과 교차하는 기하구조는 절두체 내부의 것만 남도록 잘라내는 작업을 하는데,

이를 절단(clipping)연산이라고 부릅니다.

 


래스터화 단계

래스터화 단계는 투영된 3차원 삼각형으로부터 픽셀 색상들을 계산합니다.

 

 

 


1. 뷰포트 변환

절단을 마치고 나면 하드웨어는 원근 나누기를 수행해서 동차 절단 공간 좌표를 정규화된 장치좌표로 변환할 수 있습니다.

그리고 일단 정점들이 NDC 공간으로 들어오면, 2차원 이미지를 형성하는 점들의 2차원 X,Y 좌표성분들이 후면 버퍼의 한 직사각형 영역으로 변환됩니다.

 

그 직사각형 영역이 바로 뷰포트입니다. 이러한 뷰포트 변환을 마치고 나면 X,X성분은 픽셀 단위의 값이 됩니다. 

 

2. 후면 선별

렌더링할 때 후면 선별을 사용하여 화면을 바라보지 않는 삼각형을 제거할 수 있습니다.

이를 위해 삼각형의 법선 벡터와 카메라 방향 벡터v의 내적을 계산하여 판단합니다.

 

감는 순서가 시계방향인 삼각형은 전면이고, 반시계방향인 삼각형은 후면이된다.

만약, 법선 벡터 n과 뷰 방향 벡터 v가 동일한 방향이라면, 삼각형은 후면으로 간주되어 제거됩니다.

 

 

3. 정점 특성의 보간

뷰포트 변환 이후 삼각형의 각 정점들에 대한 보간을 진행합니다.

각 정점의 색이 존재한다면, 삼각형에서 비어있는 각 픽셀들에 대해 색 보간이 진행됩니다.


픽셀 셰이더 단계

픽셀 셰이더는 프로그래머가 작성하고 gpu가 실행하는 프로그램입니다.

픽셀 셰이더는 각각의 픽셀 단면에 대해 실행됩니다. 

 

출력 병합기 단계

픽셀 셰이더가 생성한 픽셀 단편들은 렌더링 파이프라인의 출력 병합기 단계로 입력됩니다.

이 단계에서 일부 픽셀 단편들이 기각될 수 있습니다.

기각 되지 않은 픽셀 단편들은 후면 버퍼에 기록됩니다. 혼합도 이 단계에서 일어납니다. 

새 픽셀이 후면 버퍼의 기기존 픽셀을 완전히 덮어쓰는 것이 아니라 두 픽셀을 일정한 공식에 따라 석은 결과를 기록하는 것을 말합니다.