레스터화 단계 (rasterization stage)라고도 하는 레스터화기 단계 (rasterizer stage)의 주 임무는 투영된 3차원 삼각형으로부터 픽셀 색상들을 계산해내는 것이다.
1. 뷰포트 변환
절단을 마치고 나면 하드웨어는 원근 나누기를 수행해서 동차 절단 공간 좌표를 정규화된 정규화된 좌표 (NDC)로 변환한다.
정점들들이 NDC 공간으로 들어왔다면, 2차원 이미지를 형성하는 2차원 x,y 좌표 성분들을 후면 버퍼의 한 직사각형 영역으로 변환한다. 그 직사각형 영역이 바로 뷰포트 이다. 이 변환을 마치고 나면 x,y 성분은 픽셀 단위의 값이 된다. 일반적으로 이 뷰포트 변환은 z 성분을 변경하지 않는다. (그 성분은 깊이 버퍼링에 사용해야 하므로) 그러나 D3D11_VIEWPORT 구조체의 MinDepth와 MaxDepth를 변경할 수는 있다. MinDepth와 MaxDepth의 값은 반드시 0에서 1까지이어야 한다.
2. 후면 선별
하나의 삼각형에는 면이 두개 있다. 두 면을 구분하기 위해 다음과 같은 관례를 사용한다.
삼각형 정점들이 V0, V1, V2의 순서로 감긴다고 할 때, 삼각형 법선 n은 다음과 같이 정의된다.
E0 = V1 - V0
E1 = V2 - V0
n = E0 x E1 / || E0 x E1 ||
이 법선과 같은 방향을 향한 면의 삼각형의 앞쪽면이고 그 반대쪽 면이 뒤쪽면이다.
관찰자가 삼각형의 앞쪽 면을 보고 있는 경우 그 삼각형을 가리켜 전면 삼각형이라고 부르고, 관찰자가 삼각형의 뒤쪽 면을 보고 있는 경우 후면 삼각형이라고 부른다. 이 관점에서 왼쪽 삼각형의 정점들은 시계방향으로 감긴 반면 오른쪽 삼각형은 반시계방향이다. 방금 말한 Direct3D가 사용하는 관례(즉 삼각형 법선을 계산하는 방식)에서, (관찰자를 기준으로) 시계방향 순서의 삼각형은 전면이고 반시계방향 순서의 삼각형은 후면이다.
3차원 장면에서 대부분의 물체는 닫힌 고형체이다. 각 물체의 삼각형들을 항상 법선이 물체의 바깥쪽을 향하도록 구성한다고 하자. 그러면 카메라(관찰자)에는 고형제의 후면 삼각형들이 보이지 않는다. 후면 삼각형들은 모두 전면 삼각형들에게 가려지기 때문이다.
전면 삼각형들이 후면 삼각형들을 가리므로 후면 삼각형들은 그릴 필요가 전혀 없다. 후면 선별은 파이프라인에서 그러한 후면 삼각형을 골라서 폐기하는 공정이다. 이에 의해, 처리해야 할 삼각형의 수가 거의 절반으로 줄어들 수 있다.
기본적으로 Direct3D는 시계방향으로 감긴 삼각형을 전면으로 간주하고 반시계방향으로 감긴 삼각형을 후면으로 간주하지만 Direct3D 렌더 상태의 설정에 따라서는 그 반대의 방식도 가능하다.
3. 정점 특성의 보간
뷰포트 변환을 거친 후에는 정점의 그러한 특성들을 삼각형을 덮는 각 픽셀에 대해 보간해야 한다. 정점 특성들뿐만 아니라 정점의 깊이 값도 그런 식으로 보간해야 한다. 그러면 각 픽셀마다 깊이 버퍼링 알고리즘을 위한 깊이 값도 그런 식으로 보간해야 한다. 그러면 각 픽셀마다 깊이 버퍼링 알고리즘을 위한 깊이 값이 만들어진다. 정점 특성들은 화면 공간에서 보간되는데, 3차원 공간에서 삼각형의 면을 따라 선형으로 보간되는 방식이다. 이를 위해서는 원근 보정 보간이 필요한다.
본질적으로, 이러한 보간은 삼각형 내부 픽셀들을 위한 값들을 정점에 부착된 값들로부터 계산할 수 있게 한다.원근 보정 보간은 하드웨어가 수행하는 것이므로 그에 깔리 수학적 세부사항을 일일이 알 필요는 없다.
아래의 그림을 보고 어느정도 감을 잡기만 하면 될 것이다.
'그래픽스 > 공통' 카테고리의 다른 글
NDC (Clip Space)란 무엇인가? (1) | 2024.05.07 |
---|---|
드로우콜 (Draw Call) (0) | 2024.01.22 |
배칭 (Batching) (0) | 2024.01.22 |
병목 (Bottleneck) (0) | 2024.01.21 |
곡선 (Curve) & 스플라인 (Spline) (0) | 2024.01.21 |