kwan's note

정점 처리 ( view transform, projection transform) 본문

graphics VR AR/Computer Graphics -Korea Univ

정점 처리 ( view transform, projection transform)

kwan's note 2021. 6. 24. 21:49
반응형

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

 

이전 노트:

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

 

좌표계 변환 (transform and rotation)

본 학습노트는 2021년 1학기 고려대학교 한정현 교수님의 컴퓨터 그래픽스 강의를 수강하고 작성하였습니다. https://reminder-by-kwan.tistory.com/132 모델링, vertex array 와 index array 본 학습노트는 202..

reminder-by-kwan.tistory.com

 

지금까지 정점들로 이루어진 object가 어떻게 변환하는지 알아보았다.

이제 이러한 물체가 어떻게 화면에 표현되는지 알아보도록 하자.

 

world transform에서 변환을 행렬곱으로 표현했다. 이때 vertex normal은 어떻게 변환시켜야 할까.

결론적으로는 L의 inverse transpose를 이용하면 된다. (L^(-T))

L의 inverse transpose를 이용하는 이유는 다음과 같다.

먼저 삼각형을 이루는 세 vertex를 각각 p ,q ,r 이라고 하자.

이때 이 삼각형의 normal이 n이라면(수직이므로) nT dot (q-p) = 0 이다.(식1)

 

그리고 L에 의해 변환된 vertex를 p' q' r'라고 하고 normal을 n'라고 하자.

즉 Lp=p' , Lq=q' 이다. 이때 L의 inverse를 각 항에 곱하면 p=L^(-1)p' ,  q=L^(-1)q'가 된다.

이를 이전 (식1) 에 대입하면 nT dot (L^(-1)p'- L^(-1)q') = 0이다.

 

이를 고쳐쓰면 ( p'-q')TL^(-T)n = 0이 된다.

n'이 L^(-T)n와 같으므로 n을 n'로 만드는 행렬은 L^(-T)가 된다.

 

비균등확대가 아닌경우에는 L을 그대로 사용해도 무관하나 연산의 일관성을 위해 모든 연산에 대해 L 의 inverse transpose를 이용해 연산한다.

 

이제부터 world transform 이후 과정을 보자.

world 공간에 object들을 놓았는데 이제 카메라가 이를 본다고 생각하자. 사람/카메라등 보는 방향에 따라 물체가 스크린에 다르게 표현되기 때문에 카메라(눈)이 보는 공간을 카메라 스페이스라고 하고 world space에서 camera space로의 변환을 view transform이라고 한다.

카메라가 보는 물체의 점을 AT 카메라의 위치를 EYE라고하고 카메라의 위쪽이 가르키는 방향을 UP이라고 한다. 이때 카메라 공간의 basis는 u,v,n으로 표현되는데 위 식과 같다.

 

따라서 world space를 camera space로 옮길때 이전에 진행했던것과 같은 방식으로 x,y,z를 u,v,n으로 맞춰주면 된다.

이제 모든 물체가 카메라공간에 들어왔다고 하자.

카메라 공간은 {u,v,n}을 이제 다시 {x,y,z}라고 표현하자(u,v,n인건 그대로이나 world space는 이제부터 고려 대상이 아니므로 혼란의 여지가 없어 x,y,z로 표현한다)

 

우리의 시야는 모든 물체를 담지 못한다. 따라서 시야가 담을 수 있는 영역을 지정하고 이 범위 내의 물체만 screen에 표현하도록 해야한다. 카메라나 사람 눈에는 시야각이 존재하기 때문에 모든 물체를 표현하고자 한다면 어안렌즈를 사용한것과 같은 왜곡이 생긴다.

시야 안으로 들어와 표현되는 영역을 view volumn이라고 하는데

이때 너무 가까운 물체, 너무 먼 물체는 표현되지 않고 시야각 바깥의 물체도 포함되지 않는다.

만약 물체중 일부만 이 view frustum에 표현된다면 바깥부분은 잘라져 버리게 된다. 이렇게 자르고 버리는것을 클리핑이라고 한다.

 

이제 카메라로 본 세상을 나타내기 위해 view frustum을 정육면체로 표현해보자. 이를 projection transform이라고 한다.

 

projection transform은 view frustum의 사각뿔대를 2x2x2의 정육면체로 변환시키는 행렬이다.

이러한 view transform을 이용해 원근법을 표현하게 된다. 즉 멀리있는 물체는 작아보이고 가까운 물체는 커진다.

projection transform matrix

이제 우리는 object space에서 world space 그리고 camera space에서 clip space까지 물체를 이동시켰다.

이를 통해 모델링을 한 물체가 어떻게 눈(카메라)에서 보이는지 알게 되었다.

반응형