원근 투영

ㅋㅋ·2022년 7월 12일
0

게임수학강의

목록 보기
19/20
  • 원근 투영

세상은 3차원이지만 눈은 사각뿔 형태로 세상을 바라본다고 생각할 수 있다.

해당 공간에서 평면의 크기는 카메라로부터의 거리에 따라 달라진다.

이 때 눈과 평면의 거리를 초점거리라고 하고, 평면은 투영 평면이라 한다.

  • NDC (Normalized Device Coordinate)

모니터 해상도를 고려하여 화면 크기를 정규화하여 관리
사각 평면 중심점을 (0,0)으로 두고 0을 중심으로 상하좌우로 일정한 크기 1씩 떨어짐

평면의 길이가 정해져 있기 때문에 카메라의 각도가 작아질 수록 초점거리가 멀어짐

d=1tan(θ2)d=\frac{1}{tan(\frac{\theta}{2})}

  • 원근 투영 변환 (Perspective projection transformation)

뷰 공간에서의 점을 투영 평면에 투영시키는 행렬 P를 찾아 적용

카메라와 점을 z축이 아닌 하나의 축(위나 옆에서)에서 바라봤을 때,
뷰 공간에서 점과 카메라가 이루는 삼각형과
투영 평면에서 점과 카메라가 이루는 삼각형이 닮음
=>
비례식 이용
ny:d=vy:vzn_y:d=v_y:-v_z
=>
ny=dvyvzn_y=\frac{d\cdot v_y}{{-v}_z}
nx=dvxvzn_x=\frac{d\cdot v_x}{{-v}_z}

이렇게 얻어진 비율들을 가지고 실제 모니터 해상도와 곱하여 사용

=>

NDC는 가로 세로 비율이 1:1인데 보통 모니터는 비율이 다름

이를 방지 하기위해 x축 NCD 비율에 종횡비로 나눠 적용시킨 후 사용

종횡비 a=widthheighta = \frac{width}{height}

Pndc=dvz(vxa,vy)P_{ndc}=-\frac{d}{v_z}(\frac{v_x}{a},v_y)

=>

P v=[1advz000dvz0001][vxvyvz]P\cdot\ v=\left[\begin{matrix}\frac{1}{a}\cdot\frac{d}{{-v}_z}&0&0\\0&\frac{d}{{-v}_z}&0\\0&0&1\\\end{matrix}\right]\left[\begin{matrix}v_x\\v_y\\v_z\\\end{matrix}\right]

하지만 이럴 시 투영 행렬 P에 z축 값이 인자로 들어가야하고,

이러면 모든 점마다 행렬 P를 계산하여야 함.

  • 클립 공간 (Clip space)

뷰 공간에서 투영 평면으로 바로 변환하지 않고 중간에서 클립 공간이란 것을 만들어

클립 공간에서 변환 후, P 행렬을 적용하도록 함

클립 공간을 투영된 점은 아래 와 같고,

Pclip=(dvxa,d vy,vz)P_{clip}=(\frac{d\cdot v_x}{a},d\cdot\ v_y,-v_z)

이 투영된 점에서 z축 값으로 x, y를 나누어 계산

Pndc=(dvxvza,dvyvz,1)P_{ndc}=(-\frac{d\cdot v_x}{v_z\cdot a},-\frac{d\cdot v_y}{v_z},1)

=>

P v=[da000d0001][vxvyvz]=[davxdvyvz]P\cdot\ v=\left[\begin{matrix}\frac{d}{a}&0&0\\0&d&0\\0&0&-1\\\end{matrix}\right]\left[\begin{matrix}v_x\\v_y\\v_z\\\end{matrix}\right]=\left[\begin{matrix}\frac{d}{a}\cdot v_x\\d\cdot v_y\\-v_z\\\end{matrix}\right]

  • 동차 좌표계 (Homogenous coordinate system)

현실 세상: 유클리드 공간
눈(카메라)으로 관찰하는 세상: 사영 공간

y = ax + b라는 2차 직선 방정식이 있을 때,

클립 공간과 같이 3차원 부분이 1이었다고 가정해보자.

(x,y,z)(x,y,1)x=xzy=yzyz=axz+by=ax+bz(x',y',z')\mapsto(x,y,1) \\ x = \frac{x'}{z'} \\ y = \frac{y'}{z'} \\ \frac{y\prime}{z\prime}=a\frac{x\prime}{z\prime}+b \\ y\prime=ax\prime+bz\prime

위 결과로 모든 항이 동일한 차수를 가지게 되는데,

이를 동차 방정식(Homogenous Equation)이라고 한다.

  • 소실점 (Vanishing point)

y = ax + b와 y = ax + c라는 함수가 있을 때,

유클리드 공간에서는 만나지 않는다.

하지만 사영 공간이라고 생각하여 1차원씩 높이면 모두 z값에 영향을 받고,

z가 0이면 (0, 0, 0)에서 두 직선이 만나게 된다.

이렇게 사영 공간의 선에 속한 점들은 같은 카테고리를 가진다고 표현하고,

클립 공간 또한 같은 카테고리를 가지는 점들이 모인 선을 의미한다.

Pndc=(dvxvza,dvyvz,1)P_{ndc}=(-\frac{d\cdot v_x}{v_z\cdot a},-\frac{d\cdot v_y}{v_z},1)

위 식에서vzv_z값이 무한대로 발산하면 점은 (0, 0, 1)로 수렴하게 된다.

이는 회화에서의 소실점과 동일한 원리를 가진다.

0개의 댓글