득이공간

[게임 수학] 1장. 게임 수학의 소개 본문

GP/게임 수학

[게임 수학] 1장. 게임 수학의 소개

쟁득 2024. 2. 3. 22:23
해당 게시물은 이득우 교수님의 '게임 수학의 이해' 강의를 수강하며
학습한 내용을 개인적으로 정리한 글입니다.

📌 목차 - 1장. 게임 수학의 소개

1-1. 게임 수학의 개요
1-2. 물체의 수학 1: 이동 변환의 구현 원리
1-3. 물체의 수학 2: 삼각형과 정점
1-4. 물체의 수학 3: 벡터의 내적과 외적
1-5. 회전의 수학 1: 삼각함수와 회전변환
1-6. 회전의 수학 2: 사원수


📌 1-1. 게임 수학의 개요

* 게임 수학의 분류
1. 공간에 대한 수학
2. 물체에 대한 수학
3. 회전에 대한 수학

* 공간에 대한 수학
- 현실 세계 vs 가상 세계
- 벡터 공간(Vector Space): 게임이 사용하는 가상 공간의 본질
- 벡터: 벡터 공간의 원소
- 스칼라: 체 집합의 원소
- 행렬 => 스스로 행렬을 설계할 수 있도록 기본 원리를 이해하는 것이 중요하다.
- 선형변환
- 평면의 방정식 => 절두체 생성

* 렌더링 파이프라인
- 로컬 공간 -> 모델링 변환
- 월드 공간 -> 뷰 변환
- 뷰 공간 -> 원근 투영 변환
- 사영 공간

* 공간에 대한 수학 중요 부분
1. 수의 체계와 벡터 공간
2. 선형 변환과 행렬


📌 1-2. 물체의 수학 1: 이동 변환의 구현 원리

* 물체에 대한 수학
- 게임에서 사용하는 가상 공간의 체계와 물체를 구성하는데 사용하는 수학

* 게임의 벡터 공간 분리
1. 물체를 표현하는 공간 = 아핀 공간 // 아핀 공간의 점을 사용해서 물체를 만든다.
2. 이동을 위한 공간 // 이동 벡터를 이용해서 물체를 이동한다.

* 게임 공간 = 월드 공간
- 3차원 + 1차원

* 물체의 공간 = 로컬 공간
- 3차원 + 1차원

* 정리
1. 4차원 공간을 생성
2. 3차원 공간으로 대상을 표현
3. 확장한 1차원 공간으로 이동을 구현


📌 1-3. 물체의 수학 2: 삼각형과 정점

* 점과 벡터
- 점: 1, 벡터: 0
- 점 + 벡터 = 점
- 점 - 점 = 벡터
- 벡터 + 벡터 = 벡터

* 아핀 조합
- P = aP1 + (1 - a)P2

* 직선

* 반직선
- 레이
- 레이캐스팅: 시선 방향에 장애물이나 목표물이 있는지 감지하는 기능
- 레이트레이싱: 모니터 화면에서 거꾸로 빛의 방향을 추적해 렌더링 하는 기법

* 선분

* 면(삼각형)
- P = aP1 + bP2 + (1 - a - b)P3

* 메시
- 삼각형의 정보를 모아둔 것
- 삼각형을 이용하면 물체를 확대했을 때도 정밀하게 표현이 가능하다.

* 픽셀화(Rasterization)
- 삼각형이 가지고 있는 영역을 픽셀로 나타내는 과정

* 무게중심좌표
- 삼각형 내부의 픽셀의 색상(또는 UV)을 결정할 때 사용되는 데이터

* 정점 셰이더
- 삼각형을 구성하는 각 정점의 최종 데이터를 결정하는 함수

* 픽셀 셰이더
- 삼각형 내부를 구성하는 각 픽셀의 최종 색상을 결정하는 함수


📌 1-4. 물체의 수학 3: 벡터의 내적과 외적

* 게임 콘텐츠 진행
1. 로컬 공간: 개별 물체의 공간 // 월드 공간의 변환
-> 게임 엔진으로 들어온 메시 데이터는 세 개의 정점으로 구성된 삼각형으로 분해된다.
2. 월드 공간: 물체들이 모인 게임의 공간 // 카메라 공간의 변환
3. 카메라 공간: 플레이어가 보는 공간 - 절두체 컬링
4. 최종 렌더링 진행

* 각 변환에 이뤄지는 로직
1. 월드 공간의 변환: 게임 로직 = 물체의 배치 설정
2. 카메라 공간의 변환: 렌더링 로직 = 화면에 그릴 데이터 설정

* 각 로직에 사용되는 수학
1. 게임 로직: 벡터의 수학
2. 렌더링 로직: 공간의 수학과 점의 수학

* 트랜스폼(Transform)
- 크기, 회전, 위치를 순서대로 조합한 변환

* 벡터 연산
1. 벡터와 벡터의 덧셈 (기본)
- v1 + v2 = (x1 + x2, y1 + y2)
2. 벡터와 스칼라의 곱셈 (기본)
- av = (ax, ay)
3. 벡터의 내적 (응용)
- v1 · v2 = x1x2 + y1y2
- 두 벡터의 직교여부 판별
- 물체의 상대적 앞 or 뒤 위치 판별
- 시야각 내에 물체가 존재하는지 판별
- 한 벡터를 다른 벡터에 투영할 때 사용
4. 벡터의 외적 (응용)
- v1 x v2 = (y1z2 - y2z1, z1x2 - z2x1, x1y2 - x2y1)
- 두 벡터의 평행여부 판별
- 물체의 상대적 좌 or 우 위치 판별

* 선형 조합(Linear Combination)
- 1, 2번 연산의 조합으로 이뤄진다.
- a1v1 + a2v2 + ... + anvn = v
- 평행하지 않은 두 기저벡터를 선형조합하면 평면상의 모든 벡터를 생성할 수 있다.

* 표준기저벡터(Standard Basis Vector)
- 평면의 모든 벡터를 생성할 수 있는 기저(Basis)에서 가장 기본적인 기저 벡터


📌 1-5. 회전의 수학 1: 삼각함수와 회전변환

* 회전 변환의 원리
- 회전 변환을 적용해 변환된 물체는 외형이 변하지 않는다.
- 표준기저벡터가 가지고 있던 성질을 그대로 유지시켜 변환시켜준다.

* 삼각함수
- 각도에 따른 삼각비의 변화를 함수로 표현한 것
- 삼각함수를 사용해 직교하는 두 기저벡터를 얻는다.

* 2차원 평면의 회전 행렬

* 3차원 공간에서의 회전
- 오일러 각 회전(Euler Angles Rotation)
- 로드리게스 회전
- 사원수

* 로드리게스 회전공식 (축-각 방식)
- cosθ · r + (1 - cosθ) · (r · n) · n + sinθ · (n x r)
- 행렬로 변환하기 어렵기 때문에 렌더링 파이프라인의 중간에 위치한 파이프라인 흐름이 끊기게 된다.

* 오일러 각 방식
- Roll, Pitch, Yaw
- x, y, z 표준기저벡터를 중심축으로 지정순서에 따라 각각 한 번씩 회전시키는 것
- 직관적이기 때문에 대부분의 3차원 그래픽 툴에서 사용하며 적은 양의 데이터로 3차원 회전을 표현할 수 있다.
- 임의의 축에 대해 부드럽게 움직이는 회전을 계산하기 어렵다.


📌 1-6. 회전의 수학 2: 사원수

* 수
- 수에는 연산이 존재하기 때문에 단순 집합과 차별점을 가진다.
- 수는 구조(시스템)를 가진 집합이다.

* 연산에 대한 공리(Axiom)
1. 교환 법칙
2. 결합 법칙
3. 분배 법칙
4. 항등원
5. 역원

* 복소수
- 두개의 원소로 구성된 수

* 회전
- 크기가 1인 수와의 곱이다.

* 사원수(Quaternion)
- 네 개의 원소로 구성된 수
- a + bi + cj + dk: 한 개의 실수 + 세 개의 허수
- 0 + xi + yj + zk

* 안정적인 3차원 공간의 회전
- v` = q v q*
- v + w(r x v) + n x (r x v)

* 사원수의 활용
- 사원수를 사용해 빠르게 벡터를 회전시킬 수 있다.
- 축-각 방식이고 절반의 각으로 파생되기 때문에 일반인들이 직관적으로 사용하기는 어렵다.
- 게임 제작에서 오일러 각은 여전히 유용하다.
- 사원수는 행렬로의 변환이 용이하다.

* 회전 시스템
- 게임 로직: Rotator <-> 트랜스폼: Quaternion -> Local Axes -> 렌더링 로직: Matrix