컨텐츠 검색
수학 기초 (1) - 공간의 수학

2026. 1. 24. 23:49TA

1. 벡터 공간

구분 비교 항목 순수 수학 게임 개발
1. 관점의 차이 목적 논리적 증명, $n$차원 공간의 일반화된 성질 탐구 2D/3D 공간의 좌표 표현, 물체 이동, 물리 현상 구현
차원 무한 차원 가능 ($n$차원, $\mathbb{R}^n$) 2D $(x,y)$, 3D $(x,y,z)$, 4D $(x,y,z,w)$로 한정
2. 스칼라
(Scalar)
정의 벡터의 크기를 조절하는 체(Field)의 원소 ($\mathbb{R}, \mathbb{C}$) 크기, 양, 비율을 나타내는 단일 숫자 데이터
자료형 실수($\mathbb{R}$),
복소수($\mathbb{C}$) 등
float, double, int
예시 • 다항식의 계수 ($3x^2$에서 $3$)
• 행렬의 고유값($\lambda$)
체력 (HP): 100.0f
이동 속도: 600.0f
남은 시간: 60.0f (초)
데미지 배율: 1.5 (크리티컬)
3. 벡터
(Vector)
정의 벡터 공간의 공리를 만족하는 대상 (함수, 행렬 포함) 방향(Direction)크기(Magnitude)를 가진 데이터 묶음
자료형 튜플 $(x_1, x_2, \dots, x_n)$ struct Vector3 { float x, y, z; }
(Unreal: FVector)
예시 • 힘의 합력 계산
• 선형 변환($Ax = b$)의 해
플레이어 위치: $(100, 50, 0)$
바라보는 방향: $(0, 1, 0)$ (정규화된 벡터)
바람의 방향과 세기: $(5, 0, 0)$
RGB 색상: $(1.0, 0.0, 0.0)$ (빨강)
4. 주요 연산 활용 내적
(Dot)
코시-슈바르츠 부등식 증명, 투영(Projection) 시야 판별: 적이 내 앞에 있는가? 뒤에 있는가?
조명 계산: 빛을 얼마나 받고 있는가? (Lambert)
외적
(Cross)
3차원 공간의 기저 벡터 생성, 면적 계산 법선 벡터(Normal): 벽면의 수직 방향 구하기
회전축: 캐릭터가 회전할 기준축 구하기

 


2. 선형 변환

구분 (Category) 핵심 키워드 상세 설명 게임 개발 실전 예시
1. 개념
공간의 변형
선형 변환 "격자 구조를 유지하며 공간 비틀기"
• 직선은 직선으로 유지됨
• 평행선은 평행을 유지함
• 원점은 고정됨 (단, 4D 동차좌표로 이동까지 포함)
스킬 효과: 캐릭터가 버프를 받아 몸집이 2배로 커짐 (Scaling)
피격: 젤리 몬스터가 맞아서 납작하게 찌그러짐 (Shearing)
2. 이유 A
속도와 효율
60fps 방어 "복잡한 과정을 한 번의 곱셈으로 압축"
• 수백만 개의 점(Vertex)마다 이동→회전→확대를 따로 계산하면 느림.
• 행렬끼리 미리 곱해둔(Composition) '최종 행렬' 하나만 적용하여 연산량을 획기적으로 줄임.
렌더링 파이프라인: WorldMatrix = $M_{확대} \times M_{회전} \times M_{이동}$ 이 미리 계산된 행렬 하나를 모든 버텍스에 곱해서 즉시 화면에 그림.
3. 이유 B
상호작용
가역성 "비틀어진 공간을 되돌리기"
• 선형 변환은 규칙적으므로, 반대로 수행하는 역행렬(Inverse Matrix)이 존재함.
• 3D 월드 좌표 $\leftrightarrow$ 2D 화면 좌표 간의 자유로운 변환 보장.
마우스 피킹 (Picking): 화면(2D)을 클릭했을 때, 역행렬을 곱해 3D 월드의 어떤 물체를 찍었는지 역추적함.
되감기: 시간 역행 스킬 구현 시 이동 경로 복구.
4. 수단
명령어
행렬
(Matrix)
"변환 규칙을 담은 데이터 패킷"
• 컴퓨터에게 '어떻게 변환하라'는 지시를 숫자로 나열한 표.
• 게임에선 주로 4x4 행렬을 사용하여 이동(Translation)까지 선형 변환처럼 취급.
카메라 뷰 행렬: 플레이어의 시점에 맞춰 세상 전체를 반대로 이동/회전시키는 행렬.
뼈대(Bone) 행렬: 캐릭터의 팔을 들 때, 팔에 붙은 피부(Mesh)를 따라 움직이게 하는 행렬.

3. 렌더링 파이프라인과 행렬

3.1. 로컬 공간 $\rightarrow$ 월드 공간 (모델링 변환)

"배우를 무대 위 정해진 위치에 세우는 과정"

3D 모델(캐릭터, 의자 등)은 처음에 자신만의 중심점(0,0,0)을 기준으로 만들어집니다.

이를 게임 세상(월드)의 특정 위치로 옮기는 과정입니다.

  • 행렬 분석 (Modeling Matrix):
    • 회전 & 크기 ($3 \times 3$ 영역): 왼쪽 상단 9개 요소는 객체의 회전(Rotation)크기(Scale, $s$)를 담당합니다.
      ($x_x, y_x$ 등은 기저 벡터)
    • 이동 (마지막 열): $t_x, t_y, t_z$는 월드 좌표상의 위치(Translation)를 의미합니다.
    • 의미: "이 모델을 월드 좌표 $(t_x, t_y, t_z)$로 이동시키고, $s$만큼 키운 뒤 회전시켜라."

$$ \begin{bmatrix} x_x s_x & y_x s_y & z_x s_z & t_x \\ x_y s_x & y_y s_y & z_y s_z & t_y \\ x_z s_x & y_z s_y & z_z s_z & t_z \\ 0 & 0 & 0 & 1 \end{bmatrix}$$

3.2. 월드 공간 $\rightarrow$ 뷰 공간 (뷰 변환)

"세상을 카메라 시점으로 재정렬하는 과정"

게임 속에는 '카메라'가 존재합니다. 하지만 수학적으로 카메라는 움직이지 않습니다.

대신 카메라가 원점(0,0,0)이 되도록 세상 모든 물체를 반대로 움직여야 합니다.

  • 행렬 분석 (View Matrix):
    • 특징: 카메라 행렬의 역행렬(Inverse Matrix) 형태입니다.
    • 회전부 (전치 행렬): 카메라가 오른쪽으로 고개를 돌리면, 세상은 왼쪽으로 회전해야 합니다. 그래서 회전 행렬이 전치(Transpose, 대각선 뒤집기)되어 있습니다.
    • 이동부 (내적 $-\vec{axis} \cdot t$): 여기가 핵심입니다. 단순히 좌표만 빼는 게 아니라, 회전된 축을 기준으로 위치를 재조정해야 하기 때문에 벡터의 내적(Dot Product)이 사용되었습니다.

$$ \begin{bmatrix} x_x & x_y & x_z & -\vec{x} \cdot t \\ y_x & y_y & y_z & -\vec{y} \cdot t \\ z_x & z_y & z_z & -\vec{z} \cdot t \\ 0 & 0 & 0 & 1 \end{bmatrix}$$

3.3. 뷰 공간 $\rightarrow$ 사영 공간 (원근 투영 변환)

"3차원 공간을 2차원 모니터에 구겨 넣는 과정"

카메라 앞의 3차원 공간(절두체, Frustum)을 직육면체 모양의 공간(NDC)으로 압축하여,

멀리 있는 것은 작게, 가까이 있는 것은 크게 만듭니다.

  • 행렬 분석 (Projection Matrix):
    • $d$와 $a$ (FOV & Aspect Ratio): 시야각(FOV)에 따라 화면을 얼마나 줌인/줌아웃 할지 결정합니다. $a$는 화면 비율(종횡비)을 맞춰 찌그러짐을 방지합니다.
    • $n$과 $f$ (Near & Far): 카메라가 볼 수 있는 가장 가까운 거리($n$)와 가장 먼 거리($f$)입니다. 이 범위를 벗어난 물체는 잘려 나갑니다.
    • $-1$ (Perspective Divide): 이 숫자가 마법을 부립니다. $w$ 성분을 $z$값에 비례하게 만들어, 나중에 좌표를 $w$로 나눌 때 '멀리 있는 물체의 좌표가 중심(0)으로 모이게(작아지게)' 만듭니다.

$$ \begin{bmatrix} d/a & 0 & 0 & 0 \\ 0 & d & 0 & 0 \\ 0 & 0 & \frac{n+f}{n-f} & \frac{2nf}{n-f} \\ 0 & 0 & -1 & 0 \end{bmatrix}$$


4. 절두체와 평면의 방정식

구분 핵심 개념 및 수식 상세 설명 게임 개발 적용
1. 절두체 카메라 시야 영역
• 구성: 6개의 평면
(Near, Far, Left, Right, Top, Bottom)
• 모양: 윗부분이 잘린 피라미드
카메라는 세상의 모든 것을 볼 수 없습니다. 렌즈 화각(FOV)과 가시거리(Near~Far)에 의해 정의된 육면체 공간 내부만 렌더링합니다. 최적화 핵심: 이 공간 밖의 물체는 GPU로 보내기 전에 CPU 단계에서 걸러내야(Culling) 성능을 확보할 수 있습니다.
2. 수학적 도구 평면의 방정식
$$ax + by + cz + d = 0$$ 또는
$$\vec{n} \cdot \vec{p} + d = 0$$
공간을 '안쪽'과 '바깥쪽' 이분법으로 나누는 수학적 칼날입니다.
• $(a, b, c)$: 법선 벡터($\vec{n}$). 평면이 바라보는 방향(주로 절두체 안쪽).
• $d$: 원점과 평면 사이의 거리 상수.
• $(x, y, z)$: 검사할 물체의 위치($\vec{p}$).
평면 데이터 추출: 뷰-투영 행렬(View-Projection Matrix)을 곱한 결과에서 6개 평면의 $a, b, c, d$ 계수를 추출해낼 수 있습니다.
3. 판별
메커니즘
점과 평면의 거리 공식
$$Distance = ax + by + cz + d$$
물체의 좌표 $(x,y,z)$를 방정식에 대입했을 때 나오는 결과값의 부호가 중요합니다. 이 값은 평면으로부터의 '부호 있는 거리(Signed Distance)'를 의미합니다. 함수 구현: Plane.Dot(Point) 형태로 구현하며, 단순히 0보다 큰지 작은지만 비교하면 되므로 연산이 매우 빠릅니다.
4. 판정
결과
양수 (+) Inside (안쪽/앞쪽): 물체가 절두체 안쪽(법선 방향)에 있습니다. $\rightarrow$ Render (그리기)
음수 (-) Outside (바깥쪽/뒤쪽): 물체가 절두체 바깥쪽(법선 반대 방향)에 있습니다. $\rightarrow$ Cull (버리기/삭제)
0 (Zero) On Plane (평면 위): 물체의 중심이 정확히 평면에 걸쳐 있습니다. $\rightarrow$ Intersect (교차) (보통 그리는 쪽으로 판정)
5. 고급
응용
구(Sphere) 컬링
$$Distance > -Radius$$
점 하나만 검사하면 큰 물체의 반쪽이 잘려 보일 수 있습니다. 물체를 감싸는 반지름($r$)을 가진 구로 가정하여, 중심점이 평면 뒤로 $r$만큼 넘어가기 전까지는 '보임'으로 처리합니다. 안전장치: 물체의 중심이 화면 밖에 있어도, 덩치(Radius) 때문에 화면에 걸쳐 있다면 그려야 합니다. 이를 위해 단순 점 검사가 아닌 경계 구(Bounding Sphere) 검사를 수행합니다.

 


5. 정리

1. 재료 (Basic)

  • 스칼라: 그냥 숫자 (크기, 양).
  • 벡터: 화살표 (위치, 방향).

2. 도구 (Matrix)

  • 행렬: 이동·회전·크기 변환을 한 번에 계산하는 도구.
  • 목적: 복잡한 계산을 압축해서 60fps 속도를 맞추기 위함.

3. 과정 (Pipeline)

  • 월드 변환: 모델을 게임 세상에 배치하기.
  • 뷰 변환: 카메라는 고정하고, 세상을 반대로 움직이기.
  • 투영 변환: 멀리 있는 건 작게 만들어서(나눗셈) 모니터(2D)에 찍기.

4. 최적화 (Culling)

  • 절두체: 카메라가 볼 수 있는 시야 영역.
  • 평면 방정식: 시야 밖인지 안인지 검사하는 판독기. (밖이면 안 그림!)

→ "점(벡터)들을 행렬로 비틀어서(변환), 원근감을 주어 화면에 찍고(투영), 안 보이는 건 과감히 버린다(컬링)."