이전 글에서는 월드 행렬(World Matrix)이 왜 중요한지를 살펴보았습니다.
월드 행렬은 이동 행렬과 회전 행렬, 스케일 행렬을 하나로 결합한 결과이며, 모델 공간(Model Space)의 정점을 월드 공간(World Space)으로 변환하는 역할을 한다는 점도 함께 알아보았습니다.
하지만 아직 화면에는 아무것도 그려지지 않습니다.
객체를 월드 공간에 배치했다고 해서 곧바로 화면에 보이는 것은 아니기 때문입니다.
이번에는 월드 공간에 있는 객체를 카메라 기준 공간으로 변환하는 View Matrix가 왜 필요한지를 살펴보려고 합니다.
카메라는 무엇을 보고 있을까
게임 안에는 수많은 객체가 존재합니다.
플레이어와 적, 건물, 나무, 자동차 등 모든 객체는 월드 공간(World Space)에 배치됩니다.
하지만 플레이어는 게임 세계 전체를 동시에 볼 수는 없습니다.
현재 카메라가 바라보고 있는 일부 영역만 화면에 표시됩니다.
즉, 렌더링 시스템은 단순히 “객체가 어디에 있는가”만 알면 되는 것이 아니라,
“카메라를 기준으로 어디에 있는가”도 함께 계산해야 합니다.
이 과정이 바로 View Matrix의 역할입니다.
카메라는 실제로 움직일까
처음 3D 그래픽스를 공부하면 대부분 이렇게 생각합니다.
“카메라가 앞으로 이동했으니 카메라를 앞으로 움직이면 되겠네.”
직관적으로는 맞는 것처럼 보입니다.
하지만 실제 렌더링에서는 조금 다른 방식으로 생각합니다.
렌더링 파이프라인에서는 카메라를 움직이는 대신 세상을 반대로 이동시킵니다.
예를 들어 카메라가 앞으로 10m 이동했다면,
렌더링에서는 카메라를 움직이는 것이 아니라
월드 공간 전체를 뒤로 10m 이동시킵니다.
카메라가 오른쪽으로 이동하면
세상 전체를 왼쪽으로 이동시키는 것입니다.
이렇게 하면 항상 카메라는 원점(0, 0, 0)에 위치한다고 생각할 수 있습니다.
즉, View Matrix는 “세상을 카메라 기준으로 다시 표현하는 행렬”이라고 볼 수 있습니다.

왜 세상을 움직이는 걸까
처음에는 다소 이상하게 느껴질 수 있습니다.
하지만 카메라를 항상 원점에 둔다고 생각하면 이후 계산이 훨씬 단순해집니다.
예를 들어 카메라 위치가 계속 달라진다면
조명 계산이나 투영 계산 역시 계속 복잡해집니다.
반대로 카메라를 항상 원점에 두면
이후 단계에서는 “카메라가 원점에 있다”는 가정 아래 모든 계산을 수행할 수 있습니다.
그래서 대부분의 그래픽 API와 게임 엔진은 View Matrix를 사용해 월드 공간을 카메라 기준 공간(View Space)으로 변환합니다.
View Matrix는 어떻게 만들어질까
View Matrix는 카메라의 정보를 이용해 만들어집니다.
대표적으로 아래 세 가지 정보가 필요합니다.
- 카메라 위치(Position)
- 카메라가 바라보는 방향(Forward)
- 카메라의 위쪽 방향(Up)
이 정보를 이용하면 카메라만의 좌표계를 만들 수 있습니다.
그리고 그 좌표계를 기준으로 월드 공간을 다시 표현한 것이 View Matrix입니다.
즉, View Matrix는 카메라의 Transform을 그대로 사용하는 것이 아니라,
카메라 Transform의 역변환(Inverse Transform)이라고 이해하는 것이 더 정확합니다.
게임 엔진에서는 어떻게 사용할까
Unity와 Unreal Engine에서는 개발자가 직접 View Matrix를 계산하는 경우는 거의 없습니다.
카메라를 움직이면 엔진이 내부적으로 새로운 View Matrix를 생성합니다.
그리고 GPU에 전달하여 모든 정점을 카메라 기준 공간으로 변환합니다.
예를 들어 플레이어가 마우스를 움직이면 카메라가 회전합니다.
그러면 엔진은 새로운 View Matrix를 계산하고,
렌더링되는 모든 객체는 새로운 카메라 기준 좌표로 다시 계산됩니다.
즉, 카메라가 움직일 때마다 View Matrix 역시 계속 변경됩니다.
월드 공간 다음에는 어떤 일이 일어날까
View Matrix를 적용하면 모든 정점은 카메라 기준 공간(View Space)에 위치하게 됩니다.
하지만 아직도 화면에 그릴 수는 없습니다.
모니터는 2차원 화면이기 때문입니다.
따라서 3차원 공간의 좌표를 화면 좌표로 변환하는 과정이 한 번 더 필요합니다.
이 역할을 담당하는 것이 Projection Matrix입니다.
즉, 렌더링 파이프라인은 아래와 같은 순서로 진행됩니다.
Model Space
↓
World Matrix
↓
World Space
↓
View Matrix
↓
View Space
↓
Projection Matrix
↓
Screen Space
이 과정을 이해하면 게임 엔진이 객체를 화면에 그리는 전체 흐름을 이해할 수 있습니다.
마무리
View Matrix는 월드 공간을 카메라 기준 공간으로 변환하는 행렬입니다.
겉으로 보기에는 카메라가 움직이는 것처럼 보이지만,
렌더링 파이프라인에서는 세상을 반대로 이동시키는 방식으로 계산이 이루어집니다.
그래서 View Matrix는 단순한 카메라 행렬이 아니라,
카메라를 원점으로 만드는 좌표계 변환이라고 이해하는 것이 중요합니다.
다음 글에서는 Projection Matrix가 왜 필요한지,
그리고 View Space의 3차원 좌표가 어떻게 2차원 화면(Screen Space)으로 변환되는지를 이어서 살펴보겠습니다.
이 글까지 이해했다면 게임 엔진의 렌더링 파이프라인인 Model → World → View → Projection 과정도 자연스럽게 이해할 수 있습니다.