Duplicate

Coordinate Spaces and Transformations

수강 일자
2023/04/07

Coordinates

World Coordinate: 물체의 본래 좌표계
View Coordinate: 카메라 기준 좌표계 (View Transform)
Clip Coordinate: 3차원 unit cube 로 한정 지은 좌표계 (Projection Transform)
Window Coordinate: 화면 좌표계 (Screen Transform)

Basic Transformations

Linear Transformations
f(x+y)=f(x)+f(y)f(ax)=af(x)f(x+y)=f(x)+f(y) \\ f(ax)=af(x)
Linearity 를 만족하면 연산이 간편함.
Linear Transformation 의 composition 은 Linear Transformation 임.
Line → Line 으로 대응되면 Linear Transformation 임.
Scale, Rotation, Reflection, Shear 은 Linear Transformation 임.
Translation 은 Affine 임 (Linear + Translation = Affine)
Transformations 들을 Composite 하여 많이 사용할 수 있고, 한 Transformation 은 다양한 순서의 Transformation 의 조합으로 표현할 수 있음.
보통 object 를 translation 을 통해 원점으로 가져온 뒤에 rotate 하고 다시 반대로 translation 을 하는 방법을 사용함.
Euclidean Transformation (Isometries) 는 원래 length 를 보존하는 Transformation.
Translation, Rotation, Reflection 이 포함됨.
Rigid Body Transformation 은 length 와 orientation 까지 보존하는 Transfromation.
Translation, Rotation 이 포함됨.

Representing Transformations in Coordinates

좌표계가 달라지면 같은 점이더라도 점의 위치가 달라짐.
Linear Transformation 은 matrix multiplication 으로 표현할 수 있어서 좋음.
[abcd][xy]=[ax+bycx+dy]\begin{bmatrix} a & b \\ c & d \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} ax +by \\ cx + dy \end{bmatrix}
한 좌표계에서 한 점은 basis vector 에 대한 left multiplication 될 matrix 하나로 정의할 수 있음.
[a1,xa2,xa1,ya2,ya1,za2,z][u1u2]=[a1,xu1+a2,xu2a1,yu1+a2,yu2a1,zu1+a2,zu2]=u1a1+u2a2\begin{bmatrix} a_{1,x} & a_{2,x} \\ a_{1,y} & a_{2,y} \\ a_{1,z} & a_{2,z} \\ \end{bmatrix} \begin{bmatrix} u_1 \\ u_2 \end{bmatrix}= \begin{bmatrix} a_{1,x}u_1 + a_{2,x}u_2 \\ a_{1,y}u_1 + a_{2,y}u_2 \\ a_{1,z}u_1 + a_{2,z}u_2 \\ \end{bmatrix}=u_1a_1 + u_2a_2
Scaling
Ss=[sx00sy]S_s = \begin{bmatrix} s_x & 0 \\ 0 & s_y \end{bmatrix}
Rotation
Rθ=[cosθsinθsinθcosθ]R_\theta = \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix}
Shear
Hxs=[1s01]Hys=[10s1]Hst=[1st1]H_{xs} = \begin{bmatrix} 1 & s \\ 0 & 1 \end{bmatrix} \quad H_{ys} = \begin{bmatrix} 1 & 0 \\ s & 1 \end{bmatrix} \\ H_{st} = \begin{bmatrix} 1 & s \\ t & 1 \end{bmatrix}
Translation 을 Linear 하게 표현하기 위해 (GPU 최적화, 다른 연산과의 composite 편의성) 2D-Homogenous Coordinate 를 사용할 수 있음.
원래 Transformations 들에는 마지막 행에 (0,0,1)(0,0,1) 을 추가하고 남은 부분을 0 으로 채워 3×33\times3 matrix 로 변환하면 됨.
Translation 은 Identity matrix 에서 마지막 열을 (bx,by,1)(b_x,b_y,1) 을 바꾸면 됨.
1D-Homogeneous 에서 Translation 은 2D 에서 Shear 와 같음.
Homogenous Coordinate 은 Translation 에 영향을 받지 않는 특별한 점을 가짐.
Moving to 3D: 2D 에서 차원만 높여주면 됨.
3차원에서 Rotation 은 자유도가 3개이기 때문에 순서가 중요함.
x,y,zx,y,z 축으로 돌리는 것을 euler angle 이라고 함.
한 번 돌리면 축이 달라지기 때문에… 순서가 중요함.
Axis-Angle Rotation 과 Quaternion 방법이 있음!

Chains of Transformations

Chain of Transformations 을 쓰면 cube person 과 같은 것을 만들고 움직이게 할 수 있음.
실제론 Rigging 이라고 하는, tree 형태의 뼈대를 사용하여 움직임을 구현함.
Hierarchical Representation
손의 움직임은 어깨의 transformation 에 윗팔의 transformation 에 아랫팔의 transformation 에 본인의 transformation 이 곱해진 형태로 정의할 수 있음.

Perspective Transformation

멀리 있는 것은 작게 보이고, 가까이 있는 것은 크게 보이는 이미지의 특징을 반영하는 Transformation
평행한 선은 Horizon 에서 만남.
3차원을 2차원에 표현할 때 깊이감을 나타낼 수 있음.
하지만, Perspective Transformation 을 무시하는 Orthographic Projection 를 일부러 쓰는 경우도 있음.
멀리 있는 것이 작아보이지 않게 하여 전체적으로 보고 싶을 경우
물체의 길이감 같은 걸 정확히 보고 싶은 경우
Perspective Matrix
[1000010000100010][xyzw]=[xyzz][x/zy/z11]\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 1 & 0 \\ \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ w \\ \end{bmatrix}= \begin{bmatrix} x \\ y \\ z \\ z \\ \end{bmatrix} \to \begin{bmatrix} x/z \\ y/z \\ 1 \\ 1 \\ \end{bmatrix}
Orthographic Matrix
[1000010000100001][xyz1]=[xyz1][xyz1]\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \\ \end{bmatrix}= \begin{bmatrix} x \\ y \\ z \\ 1 \\ \end{bmatrix} \to \begin{bmatrix} x \\ y \\ z \\ 1 \\ \end{bmatrix}
View Frustum
Screen 의 크기에 맞게 top / bottom / left / right plane 이 결정됨.
너무 먼 지점과 너무 가까운 지점들은 잘라냄. (Clipping)
Near / Far Plane Clipping 은 너무 숫자가 작거나 크게 될 경우 오류가 쌓이는 것들을 방지할 수 있음.
이렇게 잘려진 공간은 (1,1)(-1,1) 사이의 cube 인 normalized coordinate system 이 됨.
Normalized Coordinate System (Normalized Device Coordinate, NDC) 을 Orthographic Projection 에서는 identity matrix 로, Perspective Projection 에서는 z 로 나눌 수 있도록 matrix 를 구현함.
NDC Coordinate 로 바뀐 후, z 를 날려버린 뒤에 (1,1)(-1,1) 을 pixel coordinate 로 (screen size 에 맞게) 변환이 됨.