본문 바로가기
Computer Science/게임 수학

게임 수학 | 3부 3차원 콘텐츠 제작 | 12장 원근 투영

by continue96 2023. 3. 14.

12장 원근 투영: 화면에 현실감을 부여하는 변환

 

12장 원근 투영: 화면에 현실감을 부여하는 변환

12.1 원근 투영 변환의 원리

  • 원근 투영 변환(perspective projection transformation)
    • 정육면체 형태의 뷰 공간을 카메라의 한점으로 모이는 사각뿔 형태의 공간으로 변환하는 작업이다.
    • 화각(field of view)은 카메라에 설정한 눈에 보이는 사각뿔 영역의 범위를 말한다.
    • 투영 평면(projection plane)은 모든 물체의 상이 맺히는 가상의 평면으로 상하좌우가 모두 [-1, 1]이다.
    • 초점 거리(focal length)는 카메라로부터 투영 평면까지의 거리를 말한다.
    • NDC(normalized device coordinate)는 투영 평면에 대응하는 정사각형 영역인 2차원 평면의 좌표계를 말한다.

 

그림 12-1 투영 공간에서의 화각, 초점 거리(d), 그리고 투영 평면(NDC)

 

  • 원근 투영 행렬(P)
    • 정육면체 형태의 유클리드 공간을 사각뿔 형태의 사영 공간(projective space)으로 변환한다.
    • 뷰 공간의 점 Pview로부터 원근 투영 행렬로 변환된 클립 좌표(clip coordinate)의 점 Pclip을 구한다.
    • 종횡비(aspect ratio)를 고려해 NDC 좌표를 변경한다.
    • 클립 좌표의 점 Pclip에서 Pclip의 세 번째 값인 -vz로 나누어 NDC 좌표에 투영된 점 Pndc를 구한다.

 

그림 12-2 원근 투영 행렬

 

수식 12-1 원근 투영 행렬 증명

 

12.2 동차 좌표계

  • 동차 좌표계(homogenous coordinate system)는 좌표계를 한 차원 높여 표현한 좌표계를 말한다.
  • 사영 공간과 동차 좌표계의 관계
    • NDC 좌푯값은 사영 공간의 z'에 반비례하다.
    • 사영 공간의 점이 투영된 직선의 방정식 y = ax + b을 사영 공간의 좌표로 표현하면 y' = ax' + bz'이다.
    • 미지수에 대한 차수가 모두 같은 동차 방정식이다.

 

12.3 깊이

 12.3.1 깊이 값

  • 깊이 값(depth)은 카메라로부터 물체가 얼마나 떨어져 있는지 파악할 데이터를 말한다.
    • 2차원 NDC 평면이 3차원 NDC 공간으로 확장된다.
    • 사영 공간이 근평면(near plane)원평면(far plane)으로 잘린 공간을 절두체(frustum)라고 한다.

그림 12-3 3차원으로 확장된 NDC 공간

 

  • 깊이를 고려한 원근 투영 행렬(P)는 다음과 같다.
    • 카메라부터 근평면까지의 거리를 n, 원평면까지의 거리를 f라고 가정한다.

수식 12-2 깊이 값을 산출하는 원근 투영 행렬

 

 12.3.2 깊이 버퍼

  • 깊이 버퍼(depth buffer)는 스크린(screen)의 픽셀마다 깊이 값을 저장하는 버퍼를 말한다.
    • 깊이 테스팅(depth testing, z testing)으로 삼각형의 픽셀마다 이전 깊이를 비교하고 가까운 곳에 있는 픽셀만 그린다.
    • 픽셀의 깊이 값은 무게중심 좌표계를 활용하여 구한다.

 

12.4 원근 보정 매핑

  • 원근 보정 보간(perspective correction interpolation)
    • NDC 공간에서 구한 무게중심 좌표로 사영 공간의 무게중심 좌표를 계산해 텍스처를 매핑하는 것을 말한다.
    • NDC 공간으로 변환하는 과정에서 -vz로 나누었기 때문에 사영 공간의 무게중심 좌표와 NDC 공간의 무게중심 좌표는 서로 다르다.

그림 12-4 원근 투영 변환에서 발생하는 왜곡

 

  • 원근 보정 매핑(perspective correction mapping)
    • y축에서의 무게중심 좌표를 q1과 q2로 지정하고 두 점 y1과 y2 사이의 점 y'을 구하는 수식은 다음과 같다.
    • y' = q1 · y1 + q2 · y2
    • x축에서의 무게중심 좌표를 t1과 t2로 지정하고 두 점 x1과 x2 사이의 점 x'을 구하는 수식은 다음과 같다.
    • x' = t1 · x1 + t2 · x2
    • y = -1/x 함수에서 반비례 관계를 활용하여 다음과 같은 투영 보정 보간의 식을 구할 수 있다.

그림 12-5 y = -1/x 그래프

 

수식 12-3 투영 보정 보간의 식

 

수식 12-4 투영 보정 보간의 식을 활용한 원근 보정 매핑

댓글