12.1 원근 투영 변환의 원리
- 투시 원근법(Perspective projection) : 눈에 보이는 상을 그대로 화폭에 담기 위해 시선을 한 점에 고정시키고, 고정된 점으로부터 화폭까지 곧게 뻗은 실을 활용한 화법이며 르네상스 시대에 창안된 기법
- 원근 투영 변환(Perspective projection transformation) : 우리 눈이 바라보는 방식으로 가상 공간을 변환하는 것
- 화각(Field of view) : 카메라가 바라보는 범위
- 투영 평면(Projection plane) : 모든 물체의 상이 맺히는 가상의 평면
- 초점 거리(Focal length) : 투영 평면의 위치를 지정하기 위해 설정한 카메라로 부터 투영 평면까지의 거리
- NDC(Normalized device coordinate) : 투영 평면에 대응하는 정사각형 영역의 2차원 평면 좌표시스템
- 유클리드 공간(Euclidean space) : 세 축이 모두 직교하는 공간
- 사영 공간(Prjective space) : 유클리드 공간을 원근 투영 변환에 의해 사각뿔 형태로 바뀐 것
- 종횡비(Aspect ratio) : 화면의 가로 세로 비
12.2 동차 좌표계
동차는 모든 항의 차수가 같음을 의미하는 수학 용어다. 사영 공간의 점이 카메라로부터 멀어질수록 투영된 NDC 좌표값은 원점(0,0)에 가까워진다. 이는 회화의 투시 원근 기법에서 이야기하는 소실점(Vanishing point)에 해당한다.
12-1 실습
화면에 원근감 부여하기
12.3 깊이 값
깊이(Depth)는 카메라로부터 물체가 얼마나 떨어졌는지 파악할 수 있는 데이터이다. 카메라에 부여한 시야각은 깊이와 무관하기 때문에 카메라에 근평면(Near plane)과 원평면(Far plane)이라는 속성이 추가된다. 카메라 시야를 구성하는 사영 공간을 근평면과 원평면으로 잘라주면 사각뿔에서 뿔부분이 잘린 형태가 나오는데 이를 절두체(Frustum)라고 한다.
12-2 실습
깊이에 대한 정보 얻기
12.4 원근 보정 매핑
- 투영 보정 보간(Perspective correction interpolation) : 투영 전의 무게중심좌표 값을 계산해 텍스쳐를 매핑하는 것
- 원근 보정 매핑(Perspective correction mapping) : 투영 보정 보간의 수식을 활용해 카메라로부터 빗겨나간 평면의 텍스쳐가 찌그러진 현상을 잡아주는 것
12-3 실습
찌그러진 캐릭터 얼굴을 올바로 잡기
12.5 깊이 버퍼
- 깊이 버퍼(Depth buffer) : 삼각형의 픽셀 단위로 깊이를 비교하고 가까운곳에 있는 픽셀만 그리기 위해 픽셀 마다의 현재 깊이값을 보관해주는 저장 공간
- 깊이 테스팅(Depth testing) : 최종 픽셀을 찍을 때 현재 깊이 값을 깊이 버퍼에 저장된 값과 비교해 픽셀을 찍도록 하는 과정
12-4 실습
깊이 버퍼를 활용해 원근감을 올바르게 표현하기
12-5 실습
깊이 버퍼를 시각화 하기
12.6 정리
- 사영 공간으로 변환하는 원근 투영 행렬을 설계하기 위한 과정
- 원근감이 부여된 상황에서 텍스처를 입힐 때는 원근 투영된 화면에서의 무게중심 좌표를 사용하는 것이 아닌 투영 되기 전의 무게중심좌표를 사용 해야한다.
출처
- 이득우의 게임수학 (https://www.onlybook.co.kr/entry/gamemath)
반응형