서적 정리/DirectX11을 이용한 3D 게임 프로그래밍 입문

39.래스터화기 단계(Rasterizer Stage : RS)

민돌이2 2022. 1. 25. 18:04

래스터화기 단계(Raterizer Stage)의 주 임무는 투영된 3차원 삼각형으로부터 픽셀 색상들을 계산하는 것이다.

 

 

1.뷰포트(viewport) 변환

뷰포트(vewport)는 3차원 장면이 투영되는 2차원 직사각형으로 렌더링할 대상의 화면 영역이다.

절단(clipping)을 마치고 나면 원근 나누기를 수행한 동차 절단 공간 좌표를 NDC로 변환하고, 정점들이 NDC 공간으로 들어왔다면, 2차원 이미지를 형성하는 2차원 x, y 좌표성분들을 후면 버퍼의 한 직사각형 영역으로 변환한다. 이때 직사각형 영역으로 변환을 뷰포트 변환이라 하고, 직사각형은 뷰포트이다. x, y 성분은 픽셀 단위의 값이고, 뷰포트 변환은 z성분을 변경하진 않는다. 그러나 D3D11_VIEWPORT 구조체의 MinDepth와 MaxDepth를 변경할 수는 있고 [0, 1]의 범위를 지켜야 한다.

 

 

2.후면 선별(backface culling)

도형의 전면, 후면을 구별해야 한다. DirectX는 기본적으로 후면을 렌더링하지 않는다. 실제 게임을 하다보면 자주 겪는 일인데, 3D 게임에서 카메라가 지형안으로 들어간 경우 지형으로 인해 캐릭터나 배경이 가려지지 않는 일이 발생한다.

카메라가 지형을 이루는 삼각형의 후면을 바라보고 있기 때문에 렌더링하지 않는다. 이것을 후면 선별(backface culling)이라고 한다.

 

삼각형의 정점 v0, v1, v2 이 있을 때 삼각형의 법선 벡터 n은 다음과 같이 정의된다.

이 법선 벡터의 방향이면 삼각형의 앞쪽면이고, 반대쪽 면이 뒤쪽면으로 판단한다. 법선 벡터 n은 외적의 단위 벡터이다. 그리고 외적은 왼손 엄지 법칙이라는 점을 기억하자. 즉 왼손 엄지 손가락 방향이 법선 벡터의 방향이고, 엄지 손가락 방향이 전면이라는 뜻이다.

그리고 사람 시선 기준으로 정점의 순서가 시계방향일 때 삼각형은 전면이다. 왼손 엄지 손가락법칙으로 판단하던, 정점의 순서가 시계방향으로 판단하든 사용자 마음이다. 따라서 따로 설정을 하지 않는 이상 모델이나 지형을 이루는 삼각형의 정점의 순서를 막 나열하면 안된다. 삼각형의 법선 벡터가 특별한 상황이 아니라면 항상 물체의 바깥쪽을 향하도록 하는게 좋다. 처음 DirectX를 배울 때 이것 때매 고생을 많이 했다.

삼각형의 법선 벡터가 모두 바깥쪽을 향하는 오브젝트를 카메라가 바라봤을 때 오브젝트의 후면의 삼각형은 전면 삼각형들에 가려지기 때문에 보이지 않을 것이다.

위 그림에서 (a)는 후면 선별을 하지 않은 상황이고 (b)는 후면 선별을 거친 것이다. 시점에서 바라봤을 때 사각형의 뒷면은 보이지 않는다. 어차피 보이지 않는 것을 렌더링하는 하는 것은 연산 낭비로 이어진다. 후면 선별(backface culling)은 파이프라인에서 후면 삼각형을 버리는 과정이다. 이로 인해 처리해야할 삼각형의 수가 줄어드는 이점을 얻을 수 있다.

 

 

3.정점 특성의 보간

삼각형은 정점들로 정의되고, 정점 자료에는 위치 정보, 색상, 법선 벡터, 텍스처 좌표 등 추가적인 특성을 붙일 수 있다. 뷰포트 변환 후, 정점의 특성들을 삼각형을 덮는 각 픽셀에 대해 보간해야 한다. 정점 특성들뿐만 아니라 정점의 깊이 값도 보간해야 한다. 정점 특성들은 화면 공간에서 보간되는데, 3차원 공간에서 삼각형의 면을 따라 선형으로 보간되는 방식이다. 이를 위해서 원근 보정 보간(perspective correct interpolation)이 필요하다. 보간은 삼각형 내부 픽셀들을 위한 값들을 정점에 부착된 값들로부터 계산할 수 있게 한다. 사실 원근 보정 보간은 하드웨어가 수행해줘서 알 필요는 없다.

책에 써져 있는 말이 어렵다. 쉽게 말해서 삼각형을 렌더링 할때 정점은 세 개만 사용한다. 삼각형을 빨간색으로 칠할 때 삼각형 안의 픽셀들은 내가 빨간색으로 색칠하지 않아도 빨간색으로 색칠된다. 정점 세개만 사용했는데 수백개의 픽셀이 빨간색으로 색칠되게 하는 것이 정점 특성의 보간이고, 래스터화기 단계에서 수행한다 정도만 이해하면 된다.

728x90