[게임수학의 이해 이득우 교수님 강의 정리] 4. 물체의 수학 Ⅲ : 내적과 외적
게임 컨텐츠가 만들어지는 과정
- 게임에서 사용하는 각 물체를 기획
- 로컬 공간 : 개별 물체의 공간
2-1. 그 개별 물체를 표현하기 위해서 로컬 공간을 설정
2-2. 그 로컬 공간 안에서 물체의 모델링을 진행(맥스, 마야, 블렌더와 같은 소프트웨어를 사용)
2-3. 로컬 공간에서 모델링한 결과물을 메시(Mesh) 데이터로 변환
- 월드 공간 : 물체들이 모인 게임의 공간
3-1. 언리얼이나 유니티와 같은 게임 엔진으로 불러옴
3-2. 게임 엔진에서 메시 데이터는 세 개의 정점으로 구성된 삼각형으로 분해됨
3-3. 게임 제작자는 메시 데이터를 사용해서 게임 세상을 구축
- 카메라 공간 : 플레이어가 보는 공간
4-1. 월드 공간 구성이 완료되면 플레이어를 월드에 배치하고 캐릭터에 카메라를 배치
4-2. 이때 카메라에 보여지는 영역에 속한 물체만 걸러내는 작업을 함(프러스텀 컬링(Frustum Culling)).
- 프러스텀 컬링 : 게임에서 60프레임을 달성하기 위해 반드시 구현해야 할 기본적인 최적화 기법
- 최종 렌더링 진행
5-1. 물체의 메시 데이터를 분석해서 그래픽 카드에 넘겨줌.
5-2. 순서대로 그려서 최종화면을 완성.
게임 로직과 렌더링 로직
- 게임 로직 : 게임이 시작되면 프레임마다 월드 공간이 사용자 입력과 지정된 로직에 따라서 시뮬레이션 됨.
- 렌더링 로직 : 해당 프레임에 수행할 시뮬레이션이 완성되면 카메라에 보여지는 물체만 걸러내서 렌더링을 진행.
- 앞에서 설명한 공간의 수학과 점의 수학은 렌더링 로직에서 중요하게 사용. 하지만 게임 로직 단계에서는 점에 대한 수학을 사용할 일이 별로 없음.
- 게임에서 물체가 이동하는 것은 물체를 구성하는 점이 이동하는 것이 아니고 물체를 담는 공간이 이동하는 것임. 따라서 이 때는 점을 다루지 않고 평행이동한 원점과 그 공간을 구성하는 중심축의 변환에 대해서만 생각한다.
- 공간의 변환을 설정하는 것을 트랜스폼이라 함.
- 트랜스폼의 최종 정보는 내부적으로 행렬로 구성
- 하지만 게임 로직에서는 행렬의 정보를 사용하지 않고 크기, 위치, 회전의 3가지 데이터로 쪼개서 관리함.
- 즉 게임 로직에서는 크기, 위치, 회전에 대한 정보만 관리하면 이 다음에 진행하는 렌더링 로직에서 이를 기반으로 행렬을 구성하여 고속으로 필요한 변환을 한번에 처리함
벡터에 대한 수학
- 벡터에 대한 수학이란 개별 물체가 가지는 크기, 위치, 회전에 대한 정보를 계산하는 사용하는 수학.
- 대부분의 게임 엔진을 사용해 게임을 제작하는 작업은 이 세 가지 종류의 데이터를 정하는 작업이 대부분이기 때문에 실질적인 게임 개발에 있어서는 벡터에 대한 수학을 주로 사용.
벡터의 네 가지 연산
- 스칼라(Scalar)의 짧은 정의
- 사칙 연산이 가능한 수 집합의 원소
- 예) 실수
- 벡터와 벡터의 덧셈은 위 그림과 같이 각 벡터의 크기만큼 평행이동함.
- 벡터와 스칼라의 곱셈은 벡터의 기울기를 유지한 상태에서 원점으로부터 크기를 변화시킴.
- 다음과 같이 두 개의 기본연산을 조합하면 새로운 벡터를 생성할 수 있음.
- 이것을 선형 조합이라고 함.
- 평행하지 않은 두 벡터를 조합하면 평면상의 모든 벡터를 생성할 수 있음.
- 벡터의 두 기본 연산은 벡터의 생성 시스템에 사용하는 선형 조합을 구성하는 필수 연산임.
표준 기저 벡터(Standard Basis Vector)
벡터의 내적과 외적
- 위의 두 가지 기본 연산으로 물체를 표현하기는 굉장히 부족함.
- 그래서 벡터를 다양하게 응용할 수 있는 별도의 연산들을 사용함.
- 그것이 바로 벡터의 내적과 외적임.
- 벡터의 내적과 외적은 게임 로직에서부터 셰이더에 이르는 게임 제작의 전반적이 과정에 유용하게 사용되는 연산임.
- 3차원 벡터의 내적 연산은 각 축의 요소를 곱한 다음에 이들을 더함.
- 내적 공식은 컴퓨터가 굉장히 빠르게 처리할 수 있음.
- 내적을 사용하면 두 벡터가 직교하고 있는지
- 물체가 나의 위치에서 앞쪽에 있는지 뒤쪽에 있는지 판별이 가능함.
- 해당 시야각 영역 안에 물체가 존재하는지 판별이 가능함.
- 또 다른 중요한 용도로 어떤 벡터를 다른 벡터에 투영시킬 때 주로 사용함.
- 투영공식에서부터 평면의 방정식이 유도되고 이 평면들이 모여서 절두체 영역을 만듬.
- 벡터의 내적 연산은 어떤 차원에서든지 계산이 가능하지만 벡터의 외적 연산은 3차원 벡터에서만 가능.
- 벡터의 외적 연산은 두 벡터의 서로 다른 요소만 조합에서 사용하는 특징을 가짐.
- 내적이 직교성을 판별하는데 사용했다면 외적은 평행성을 판별하는데 사용함.
- 내적은 앞뒤를 판별하는데 사용하는 반면 외적은 좌우를 판별하는데 사용함.
- 평행하지 않는 두 개의 벡터의 평면에 수직인 벡터를 만들어 내는데 벡터의 외적이 주로 사용됨.
- 즉 외적을 사용하여 평면의 방향을 파악할 수 있음.
- 이러한 외적 연산 과정을 계속 거치면 3차원 공간을 구성하는 세 가지 축을 계산할 수 있음.
정리
출처
게임 수학의 이해 강의 - 이득우 교수님
유튜브 링크