kwan's note

래스터라이저 (Rasterizer) 본문

graphics VR AR/Computer Graphics -Korea Univ

래스터라이저 (Rasterizer)

kwan's note 2021. 6. 25. 00:28
반응형

본 학습노트는 2021년 1학기 고려대학교 한정현 교수님의 컴퓨터 그래픽스 강의를 수강하고 이 내용을 기반으로작성하였습니다.

 

https://reminder-by-kwan.tistory.com/134

 

정점 처리 ( view transform, projection transform)

본 학습노트는 2021년 1학기 고려대학교 한정현 교수님의 컴퓨터 그래픽스 강의를 수강하고 이 내용을 기반으로작성하였습니다. 이전 노트: https://reminder-by-kwan.tistory.com/133 좌표계 변환 (transform

reminder-by-kwan.tistory.com

 

object space부터 clip space까지 변환을 배웠다. 이제 클리핑 스페이스에서 보이지 않는 부분을 처리하는 방법과 screen에 어떻게 표현이 되는지 알아보자. vertex shader가 출력한 정점은 primitive로 assemble되고 이 primitive는 스크린에 그려질 형태로 변환, 분해된다. 이를 rasterization이라고 한다.

 

rasterizer는 이전 강의에서 배운 클리핑, perspective division, back-face culling, viewport transform, scanconversion을 진행한다. 여기서 모르는 단어들은 이번 노트에서 다룰 예정이다.

 

먼저 이전강의에서 cliping, perspective division은 다루었다. 이제 backface culling을 보도록 하자. 

 

먼저 뒷면은 그대로 처리할 필요가 없다.back face culling은 실제 화면에 보이지 않는부분들(뒷면)을 지우는 과정이다.

이때 카메라와 해당 polygon의 normal과 카메라를 잇는 선을 내적하여 양수이면 앞면, 음수이면 뒷면이 나옴을 알 수 있다. 이렇게 연산하는 방식은 다음과 같다.

우리는 이미 카메라스페이스이므로 z축이 투영선과 평행하다. 따라서 각각의 vertex에서 x,y 좌표만 보자. v1 v2 v3는 폴리곤 메시에서 반시계방향으로 순서되어있다. 만약 z좌표를 무시한다면 v1에서 v2, v3로 가는 벡터 두개의 det를 구한다면 v1 v2 v3가 반시계방향인지 시계방향인지 알 수 있게된다. 3차원일때와 동일하게 ccw이면 앞면이되고 3차원과 다르게 z축을 무시하면 cw가 되는 경우 cw이다.

 

이렇게 뒷면을 바라보는 삼각형은 모두 지울 수 있다. 다만 물체가 투명하거나 반투명하다면 뒷면을 아예 지우는것은 바람직 하지 않을 수 있다. 하지만 여기서는 지워야하는경우를 가정하여 지우는 방법을 알아보았다.

 

마지막으로 clip space에 정의된 물체가 실제 스크린에서 어떻게 보이는지 알아보기 위해 viewport 변환을 진행하도록 하자.

다른 연산에 비해 훨씬 간단하다. 2x2x2를 wxhx1로 바꿔주자.

만약 screen이 (0,0,0)부터 (w,h,1)까지 차지한다면 원점으로 이동시키면된다.

이제 모든 정점들이 viewport transform 을 통해 화면으로 나타났다. 

이제 정점으로 이루어진 삼각형 내부의 점들(픽셀)들을 정의하고 이 점들의 normal을 어떻게 계산하는지 알아보자.

이를 scan conversion이라고 한다. 이런 정점별 attribute는 삼각형의 변을 따라 선형보간된다.

 

먼저 vertex를 잇는 선 위에 점들에 대해 보간을 진행한다. 왼쪽 그림의 빨간색에 해당한다.

다음으로 내부의 점들에 대해 빨간색 점 두개를 이용해 보간을 진행한다. 이렇게 두번 보간을 진행하는것을 bilinear interpolation이라고 한다.

 

반응형