TECH 으로 돌아가기
TECH HACKER NEWS 오늘 6분 읽기 28 READS

카메라의 정체는 나눗셈 한 번: 원근 투영을 다시 이해하기

카메라의 정체는 나눗셈 한 번: 원근 투영을 다시 이해하기
SOURCE IMAGE · HACKER NEWS

게임이나 그래픽스 작업을 처음 시작할 때 대부분의 개발자는 잘 만들어진 프레임워크가 제공하는 '카메라'를 그냥 가져다 쓴다. 대상을 향하게 하고 위치만 잡아 주면 화면에 3D 장면이 그럴듯하게 그려진다. 그런데 조금 더 창의적인 연출을 시도하려는 순간, 무엇을 검색해야 할지조차 막막해지는 경험을 하게 된다. 원문 저자 역시 저수준 그래픽스 코드를 직접 짜 보고 나서야 카메라가 사실은 아주 단순한 수학 위에 서 있다는 것을 깨달았다고 말한다. 이 글은 그 '단순한 수학'의 핵심을 짚으면서, 실무자가 어디까지 직접 구현하고 어디부터 기존 도구에 맡길지 판단할 수 있는 감각을 정리한다.

깊이로 나누면 3D가 된다

출발점은 놀라울 만큼 간단하다. y축을 위, z축을 앞이라고 두면, 3D 좌표 (x, y, z)는 x와 y를 z로 나누는 것만으로 2D 좌표 (x', y')로 투영된다. 즉 깊이(z)가 커질수록 투영된 위치는 소실점 (0,0)에 가까워진다. 멀리 있는 물체가 화면 중앙 쪽으로 작게 모이는 원근감이, 사실은 '깊이로 나누기'라는 한 줄짜리 연산에서 나오는 것이다. 저자는 이 원리로 카메라의 위쪽 축을 도는 공이 깊이에 따라 위치와 크기가 변하는 모습을 보여 주고, 같은 방식으로 조금 더 복잡한 도형까지 그려낼 수 있음을 시연한다.

다만 이런 예시는 의도적으로 제약을 건 순진한 형태다. 실제 3D 작업에서는 카메라가 바라보는 방향, 카메라의 위치, 시야각(FOV) 같은 요소를 함께 다뤄야 한다. 이론적으로는 셰이더를 손봐 이런 기능을 억지로 끼워 넣을 수도 있지만, 훨씬 적은 수고로 더 실용적으로 처리하는 표준적인 도구가 이미 존재한다. 바로 원근 투영 행렬(perspective projection matrix)이며, 이것이 우리가 '카메라'라고 부르는 물건의 실체다.

하나의 정답이 없는 이유

원근 투영 행렬을 위키백과 한 페이지로 딱 짚어 설명하기 어려운 데는 이유가 있다. 컴퓨터 비전과 그래픽스는 행렬 구성 관례가 조금씩 다르고, 위·오른쪽·앞을 어느 축에 대응시킬지에 대해서도 통일된 합의가 없다. 삼각형 기반 그래픽스에서 흔히 쓰이는 관례는 시야각, 종횡비(aspect ratio), 그리고 근·원 클리핑 평면(near/far)을 매개변수로 삼는다. 이 값들이 중요한 이유는 단지 투영을 정의하기 때문만이 아니다. 무엇이 화면 안에 들어오고 무엇이 밖으로 벗어나는지를 자연스럽게 알려 주기 때문에, 화면 밖 지오메트리를 컬링(culling)하고 보이는 것만 그리는 식의 성능 최적화가 가능해진다.

행렬의 구조 자체는 좌표 관례가 달라도 대체로 일관적이다. 수직 시야각 θ에서 유도되는 초점 스케일 f와 종횡비 a가 화면 비율을 잡고, 근·원 평면 n과 F에서 유도되는 A·B 항이 깊이를 매핑한다. 그렇다면 앞서 본 '깊이로 나누기'는 이 행렬과 어떻게 연결될까. 흥미롭게도 그 트릭은 원근 투영 행렬의 한 특수한 형태다. 초점 스케일 f와 종횡비 a를 모두 1로 대입하면, 정확히 원래의 깊이 나눗셈이 다시 나타난다.

전체 파이프라인 속의 한 단계

전체 흐름을 이름 붙여 정리하면 이렇다. 공간 어딘가에 있는 점은 먼저 카메라를 기준으로 다시 기술된다. 장면 전체가 좌표를 공유하는 월드 공간에서, 카메라가 원점에 놓인 뷰 공간으로 옮겨 오는 단계다. 여기에 원근 투영 행렬을 곱하면 클립 공간 좌표가 나오고, 이 좌표의 앞 세 성분을 w로 나누는 원근 나눗셈을 거친다. 나눗셈 이후의 좌표는 더 이상 장면 속 거리를 뜻하지 않고, 그 점이 카메라의 가시 범위 안 어디에 떨어지는지를 나타낸다. 이것이 흔히 NDC로 줄여 부르는 정규화 장치 좌표이며, 마지막으로 화면 출력 해상도에 대응된다.

실무적 교훈은 분명하다. 카메라는 결국 몇 개의 단순한 변환을 순서대로 수행할 뿐이며, 각 변환이 무엇을 위한 것인지 이해하면 필요와 제약에 따라 어느 부분을 직접 구현할지 골라 쓸 수 있다. 어떤 작업에는 월드-뷰-클립-NDC로 이어지는 전체 파이프라인이 필요하지만, 카메라 기준 좌표만 다루는 단순한 상황이라면 그 깊이 나눗셈 한 번으로 충분할 때도 있다. 물론 방향·위치·시야각·클리핑을 모두 정확히 다뤄야 하는 실제 렌더러에서는 검증된 투영 행렬을 쓰는 편이 낫다. 여기서 소개된 나눗셈 트릭은 원리를 몸으로 이해하는 학습 도구이자, 제약이 뚜렷한 특수 상황을 위한 최소 구현으로 받아들이는 것이 맞다. 프레임워크가 감춰 둔 상자를 한 번 열어 본 개발자는, 그것을 다시 닫아 두더라도 예전처럼 무력하게 검색어를 헤매지는 않게 된다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://gabrieloc.com/2026/09/15/perspective.html
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기
처리 중...