[이득우 게임수학] 12. 원근 투영: 화면에 현실감을 부여하는 변환

    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 정리

    • 사영 공간으로 변환하는 원근 투영 행렬을 설계하기 위한 과정
    • 원근감이 부여된 상황에서 텍스처를 입힐 때는 원근 투영된 화면에서의 무게중심 좌표를 사용하는 것이 아닌 투영 되기 전의 무게중심좌표를 사용 해야한다.

    출처

    반응형

    댓글

    Designed by JB FACTORY