게임제작기법연구

게임제작기법연구 11주차

ckhyeok 2020. 6. 22. 00:49

새롭게 구축할 3D 공간에 대한 설명

Y-up Right Handed Coordinate(오른손 좌표계)

X axis의 용도 : 좌,우 구분(Pitch)

Y axis의 용도 : 위,아래 구분(Yaw)

Z axis의 용도 : 앞,뒤 구분(Roll)

3D Rotation에 대한 고찰

회전이란 공간 변환의 관점에서 어떤 행동인지 기술하시오

- 물체가 아닌 공간이 돌아가는 것.(월드 공간이 아닌 해당 물체가 속한 공간이 회전하는 것)

- 변환 후 각 벡터의 크기가 1이여야 함.

- 각 벡터가 서로 직교해야 함.


3D 회전을 위해 Yaw/Roll/Pitch를 값을 따로 저장하는 이유를 설명하시오.

- 메모리를 아끼기 위해(Matrix보다 Float가 모든 변환에 있어서 값이 더 저렴하기때문)


각 축에 대한 회전 행렬을 생성할 때 왜 Y축은 반대인지 이유를 설명하시오.

$R_{x} = \begin{bmatrix}
1 & 0 & 0 \\\
0 & cos\theta & -sin\theta \\\
0 & sin\theta & cos\theta 
\end{bmatrix} \quad
R_{y} = \begin{bmatrix}
cos\theta & 0 & sin\theta \\\
0 & 1 & 0 \\\
-sin\theta & 0 & cos\theta 
\end{bmatrix} \quad
R_{z} = \begin{bmatrix}
cos\theta & -sin\theta & 0 \\\
sin\theta & cos\theta & 0 \\\
0 & 0 & 1
\end{bmatrix}$

 

- 모든 축들이 같은 방향으로 회전해야 하는데 오른손 좌표계 같은 경우는 반시계 방향으로 회전을 합니다.

  그러나, Y축의 값이 반대이지 않을 경우에는 아래와 같이 회전 할 시 -로 가기 때문에 y축 회전의 sin값의 부호만

  다르게 변화를 준 것이라고 생각합니다.

 

$Ry = \begin{bmatrix} cos\theta & 0 & -sin\theta \\\ 0 & 1 & 0 \\\ sin\theta & 0 & cos\theta \end{bmatrix} \begin{bmatrix} 0 \\\ 1 \\\ 0  \end{bmatrix} = \begin{bmatrix} -sin\theta \\\ 0 \\\ cos\theta \end{bmatrix}= \begin{bmatrix} -1 \\\ 0 \\\ 0 \end{bmatrix}$

3D 회전 행렬

R(yaw) R(pitch) R(roll) 의 순서로 회전 행렬을 곱해서 최종 로컬 Forward, Right, Up의  값을 구하시오.
수기로 직접 계산해서 결과물을 증빙할 것.

$Yaw = (y)y, \quad Pitch = x(p), \quad Roll = z(r)$

 

$\begin{align} 
R_{y} \cdot R_{p} \cdot R_{r} & = \begin{bmatrix} 
cosy & 0 & siny \\\ 
0 & 1 & 0 \\\ 
-siny & 0 & cosy 
\end{bmatrix} 
\begin{bmatrix} 
1 & 0 & 0 \\\ 
0 & cosp & -sinp \\\ 
0 & sinp & cosp   
\end{bmatrix} 
\begin{bmatrix} 
cosr & -sinr & 0 \\\ 
sinr & cosr & 0 \\\ 
0 & 0 & 1 
\end{bmatrix} \\\ 
& = \begin{bmatrix} 
cosy & siny \cdot sinp & sosy \cdot cosp \\\ 
0 & cosp & -sinp \\\ 
-siny & cosy \cdot sinp & cosy \cdot cosp 
\end{bmatrix} 
\begin{bmatrix} 
cosr & -sinr & 0 \\\ 
sinr & cosr & 0 \\\ 
0 & 0 & 1 
\end{bmatrix} \\\ 
& = \begin{bmatrix} 
cosy \cdot cosr + siny \cdot sinp \cdot sinr & cosy \cdot (-sinr) + siny \cdot sinp \cdot cosr & siny \cdot cosp \\\ 
cosp \cdot sinr & cosp \cdot cosr & -sinp \\\ 
(-siny) \cdot cosr + cosy \cdot sinp \cdot sinr & siny \cdot sinr + cosy \cdot sinp \cdot cosr & cosy \cdot cosp 
\end{bmatrix} 
\end{align}$

카메라 뷰 좌표계

뷰 좌표계는 카메라 뒤쪽으로 향하는 방향이 +z인 좌표계이다. 


목표 지점 정보가 주어진다면 이를 토대로 카메라의 회전 행렬을 제작하는 전체 과정을 유도 하시오.  

- 타겟의 위치와 카메라의 위치를 알면 카메라 뷰 기준 표준기저벡터를 구할 수 있다.

- 각 벡터의 크기는 1입니다.

- Forward는 카메라위치 - 타겟위치 로 구할 수 있습니다.

- 그 다음 Right는 World의 Y축으로부터 Forward 방향으로 회전시켜줍니다.

- 그 후 마지막으로 Up은 Forward로부터 Right 방향으로 회전시켜줍니다.


이 때 예외적으로 주의해야 할 사항에 대해 추가하시오.

- ViewMatrix에서 $(TR)^-1 = R^{-1} T^{-1}$ 인 점을 유의해야 함.
이동과 회전이 고려된 카메라 행렬을 유도하시오.
- 직교행렬이기 때문에 회전 할 경우 전치하면 항등 행렬이 나옴.

- 회전행렬의 역행렬은 회전행렬을 전치한 것 입니다.

$\begin{align}(TR)^-1 & = R^{T}\cdot T^{-1} \\\ 
& = \begin{bmatrix}   
cosr & -sinr & 0 \\\   
sinr & cosr & 0 \\\   
0 & 0 & 1   
\end{bmatrix} \\\   
& = \begin{bmatrix}   
cosy \cdot cosr + siny \cdot sinp \cdot sinr & cosy \cdot (-sinr) + siny \cdot sinp \cdot cosr & siny \cdot cosp \\\   
cosp \cdot sinr & cosp \cdot cosr & -sinp \\\   
(-siny) \cdot cosr + cosy \cdot sinp \cdot sinr & siny \cdot sinr + cosy \cdot sinp \cdot cosr & cosy \cdot cosp   
\end{bmatrix}^T 
\begin{bmatrix} 
1 & 0 & 0 & -x \\\ 
0 & 1 & 0 & -y \\\ 
0 & 0 & 1 & -z \\\ 
0 & 0 & 0 & 1 
\end{bmatrix} \\\ 
& = \begin{bmatrix} 
cosy \cdot cosr + siny \cdot sinp \cdot sinr & cosp \cdot sinr & (-siny) \cdot cosr + cosy \cdot sinp \cdot sinr & 0 \\\ 
cosy \cdot (-sinr) + siny \cdot sinp \cdot cosr & cosp \cdot cosr & siny \cdot sinr + cosy \cdot sinp \cdot cosr & 0 \\\ 
siny \cdot cosp & -sinp & cosy \cdot cosp & 0 \\\ 
0 & 0 & 0 & 1 
\end{bmatrix} 
\begin{bmatrix} 
1 & 0 & 0 & -x \\\ 
0 & 1 & 0 & -y \\\ 
0 & 0 & 1 & -z \\\ 
0 & 0 & 0 & 1 
\end{bmatrix} 
\end{align}$

카메라를 (0, 0, -500)에 두고 원점에 위치한 큐브를 와이어프레임으로 렌더링한 이미지 ( 1 단계 ) 

회전 행렬을 적용해 입력에 따라 Yaw, Roll, Pitch 회전을 진행한 움짤 이미지 ( 2단계 ) 

Yaw

Pitch

Roll

카메라를 (500, 500, -500)으로 이동하고 원점을 향해 보는 구도를 생성하시오. ( 3단계 ) 

'게임제작기법연구' 카테고리의 다른 글

게임제작기법연구 13주차  (0) 2020.07.07
게임제작기법연구 12주차  (0) 2020.06.29
게임제작기법연구 10주차  (0) 2020.06.16
게임제작기법연구 8주차  (0) 2020.06.02
게임제작기법연구 7주차  (0) 2020.05.26