이득우의 게임수학_입문_4. 물체의 수학 III : 내적과 외적
4. 물체의 수학 III : 내적과 외적
링크 : https://youtu.be/89dtdxvhWvg?feature=shared
이번 강의에선 물체에 대한 수학 중
벡터의 수학에 대해 이야기 해볼 예정입니다.
▶️ 수학에 대한 이야기를 하기 전에
게임 컨텐츠가 어떻게 만들어지는 과정을 정리해보겠습니다.
1️⃣ 로컬 공간
게임을 만들기 위해서는 먼저 게임에서 사용하는 각 물체를 먼저 기획을 합니다.
그 개별 물체를 표현하기 위한 로컬 공간을 설정하고
그 로컬 공간 안에서 물체에 모델링을 진행합니다.
보통 맥스, 마야, 블렌더 같은 3D 소프트웨어 제작 도구를 사용합니다.
로컬 공간에서 모델링한 결과물은
메쉬(Mesh) 데이터로 변환되어 게임엔진에 들어갑니다.
게임 엔진에서 메쉬 데이터는
세개의 정점으로 구성된 삼각형으로 분해됩니다.
2️⃣월드공간
게임 제작자들은 이를 사용하여 게임 세상을 구축하게 됩니다.
우리가 흔히 게임 스테이지라고 부르는 ‘월드 공간’이
이러한 물체들을 모아서 구성한 공간이라고 할 수 있습니다.
3️⃣ 카메라 공간
스테이지 구성이 완료되면 보통은 플레이어를 월드에 배치하고
캐릭터에 배치된 카메라를 사용해서 탐험하는 형태로 게임 컨텐츠가 만들어집니다.
이때 카메라에 보여지는 영역에 속한 물체만 걸러내는 작업이 있습니다.
위 이미지는 호라이즌 제로 던 개발에 나온 영상으로
카메라에 보여지는 영역에 속한 물체만 보여주는 예시입니다.
이 작업이 특별한 기술이라기 보단 게임에서 60프레임을 달성하기 위해
반드시 구현해야 하는 기본적인 기법이라고 할 수 있습니다.
4️⃣최종 렌더링 진행
이렇게 카메라 영역에 나온 물체를 걸러주고
그 물체에 메쉬 데이터를 분석해서
그래픽 카드에 넘겨주면 순서대로 그려서 최종화면을 완성하게 됩니다.
▶️복습겸 다시 확인해보는 렌더링 파이프라인
게임이 시작되면 프레임마다 월드 공간이 사용자 입력과
지정된 로직에 따라서 시뮬레이션 됩니다.
이 프레임이 수행할 시뮬레이션이 완성되면
카메라에 보여지는 물체만 걸러 렌더링을 진행하게 됩니다.
▶️게임 로직과 렌더링 로직에 사용하는 수학
전자를 게임 로직
후자를 렌더링 모직이라고 이야기 합니다.
앞 강의에서 설명한 공간에 대한 수학과 점에 대한 수학은
렌더링 로직에서 중요하게 사용됩니다.
전자에 해당하는 게임 로직 단계에서는
특수한 경우를 제외하고는 점에 대한 수학을 쓸 일이 별로 없습니다.
게임에서 물체의 이동은 물체가 이동하는 것은
물체를 구성하는 점이 이동하는 것이 아니고
물체를 담는 공간이 이동한다고 이야기 하였습니다.
따라서 이때는 점을 다루지 않고 평행 이동한 공간의 원점과
그 공간을 구성하는 중심축의 변환에 대해서만 신경쓰면 됩니다.
✔️ 이렇게 공간에 변환을 설정하는 것을 트랜스폼이라고 합니다.
트랜스폼의 최종정보는 내부적으로는 행렬로 구성되어 있지만
게임 로직에서는 행렬의 정보를 사용하지 않고
크기, 위치, 회전의 3가지 데이터로 쪼개서 사용합니다.
즉, 게임 로직에서는 크기, 위치, 회전에 대한 정보만 관리하면
이 다음에 진행하는 렌더링 로직에서는 이를 기반으로 행렬을 구성하고
이것을 사용해서 고속으로 우리가 필요한 변환을 한번에 처리합니다.
✔️ 벡터에 대한 수학이란 개별 물체가 가지고 있는
크기, 위치, 회전에 대한 정보를 계산하는데 사용하는 수학이라고 할 수 있습니다.
대부분 게임 엔진을 사용하여 게임을 제작하는 작업들은
이 세가지 종류의 데이터를 정하는 작업이 대부분이기 때문에
실질적인 게임 개발에 있어서는 벡터에 대한 수학을 주로 사용한다고 볼 수 있습니다.
보통 게임에서 벡터를 쓴다고 하면,
기본 물리 공식을 사용하여
점프라던지, 물체가 포물선을 그리며 날라가는 작업을 생각할 수가 있습니다.
사실 그전에 벡터를 잘 다루기 위해서는
벡터가 가지고 있는 연산이 어떤 것인지 알아보고,
그 연산들이 가지고 있는 기본 원리에 대해서 잘 파악해야 합니다.
이번 강의에서는 이 벡터의 연산에 대해서 알아보겠습니다.
▶️ 벡터의 연산
벡터의 연산은 총 4가지가 있습니다.
여기서 2개는 기본이고, 나머지 2개는 응용 연산입니다.
✔️ 스칼라란 사칙 연산이 가능한 수집합의 원소를 의미합니다.
우리가 일상 생활에서 사용하는 실수가 바로 스칼라입니다.
벡터와 벡터의 덧셈은 간단합니다.
각 축의 크기만큼 평행이동한 것을 볼 수가 있습니다.
✔️ 그림에서 보는 것처럼 벡터와 스칼라의 곱셈은
벡터가 가지고 있는 고유한 성질인 평면의 기울기로 볼 수 있습니다.
그 기울기를 그대로 유지한 상태에서 원점으로 부터 크기를 조절해주는 동작이라고 볼 수 있습니다.
✔️ 벡터와 벡터의 덧셈과, 벡터와 스칼라의 곱셈을 조합해서 사용하면
새로운 벡터를 생성해낼 수 있습니다.
이것을 선형 조합이라고 합니다.
평행하지 않은 두 벡터를 조합하면
평면에 있는 모든 벡터를 생성할 수 있습니다.
* 기저벡터(basic Vector) : 벡터 공간에서 각각의 축 방향을 가리키는 단위 벡터.
n차원 공간에서 임의의 벡터를 표현할 수 있는 기준이 되는 벡터. n차원 (R의 n승)에서는 n개의 벡터가 있어야 기저 벡터가 이루어지며 또한 벡터가 서로 선형 독립적이거나 행렬식이 0이 되지 않아야 기저벡터 입니다.
어떤 새로운 벡터를 생성해낼 수 있는 시스템이 만들어지는 것이기 때문에
이 연산들의 기본 연산이라고 부르는 겁니다.
✔️ 이 조합하는데 사용하는데 사용하는 가장 기본적인 벡터 두가지를 꼽는다면
x축에 해당하는 (1,0)과 y축에 해당하는 (0, 1)을 들 수 있습니다.
이 둘을 조합하면 공간에 속한 모든 벡터를 손쉽게 생성해 낼 수 있습니다.
그래서 이 두가지를 표준 기저 벡터 (Standard Basic Vector) 라고 합니다.
두가지 연산을 설명지었지만 이것만 응용해서 뭔가를 표현하기엔 부족합니다.
그래서 이 벡터를 다양하게 응용할 수 있는 별도의 연산이 있습니다.
그것들이 벡터의 내적과 외적입니다.
▶️ 벡터의 내적과 외적
벡터의 내적과 외적은 게임 로직에서부터 쉐이더에 이르기까지
게임 제작의 전반적인 과정에서 유용하게 사용되는 연산들입니다.
특히 벡터의 내적은 벡터 응용에 관련된 거의 대부분이
이 공식에 들어간다고 보시면 되겠습니다.
▶️ 벡터의 내적 (응용)
벡터의 내적 연산은 위와같이 계산 됩니다.
예를 들어서 3차원 벡터 내적 연산을 사용한다면
위 그림과 같이 각 축의 요소를 곱한 다음 이들을 각각 더해주면 됩니다.
이러한 내적 공식은 컴퓨터가 굉장히 빨리 계산할 수 있습니다.
많은 곳에서 활용할 수가 있습니다.
▶️ 벡터의 내적의 활용
이 내적을 활용하면
위 두개의 벡터가 서로 직교하고 있는지
아니면 물체가 나의 앞쪽에 있는지, 뒤쪽에 있는지 판별하는데 사용할 수가 있습니다.
또한 어떤 시야각이 주어졌을 때
이 해당 시야 각 영역의 물체가 안에 들어와 있는지
밖에 있는지를 우리가 판단할 수가 있습니다.
내적의 또다른 용도는 어떤 벡터를 다른 벡터에 투영시킬 때 주로 사용됩니다.
내적의 투영 공식에서부터 평면의 방정식이 유도 되고,
이 평면들이 모여서 절두체 영역을 만듭니다.
(절두체 : 카메라가 보여지는 영역을 의미)
이 단계에서 카메라가 보는 영역안에 있는 물체만 골라낼 수 있는
수학 공식과 알고리즘이 만들어지게 되는 것입니다.
▶️ 벡터의 외적
벡터의 내적 연산은 어떤 차원에서도 계산이 가능하지만
벡터의 외적 연산은 3차원에서만 가능합니다.
두 벡터의 외적은 위 그림에서 보는 것처럼
서로 다른 요소만 조합해서 사용하는 특징이 있습니다.
내적이 직교성을 판별하는데 사용했다면,
외적은 평행성을 판별하는데 사용합니다.
내적은 앞, 뒤를 판별하기 위해 사용하고
외적은 좌, 우를 판별하기 위해 사용합니다.
벡터의 외적은 내적의 부족한 부분을 보충해 주는 성질이 있습니다.
이 둘을 조합해서 다양한 문제를 해결할 수가 있습니다.
▶️ 벡터의 외적 응용방법
이러한 외적 연산이 많이 사용하는 응용 방법에는
두개의 벡터가 만들어내는 평면에 수직인 벡터를 만들어내는 것입니다.
평행하지 않은 두 벡터의 조합은 평면을 만듭니다
여기에 수직인 벡터 즉 평면의 방향을 외적을 통해서 파악할 수가 있습니다.
이러한 과정을 계속 거치면 3차원 공간을 구성하는 세가지 축을
모두 다 외적을 사용하여 계산할 수 있습니다.
▶️ | n |의 표현 :
- | v | : v의 절대값(음수여도 양수로 표현)
- | x-y | : x에서 y까지의 거리
- | A | : A가 행렬일 때, 행렬 A의 행렬식
출처 : https://www.rapidtables.org/ko/math/symbols/Basic_Math_Symbols.html
⭐ 이 문제는 게임 회사 입사시험에 단골로 나오는 문제이기 때문에
혹시라도 게임회사 면접이나 입사시험을 준비하신다면 꼭 알아가시는 것을 권장합니다.
지금까지 배운것을 정리해 보겠습니다.
벡터에는 두가지 기본 연산과 두가지 응용 연산이 있습니다.
두가지 응용연산인 내적과 외적은 상호 보완적인 성질을 가지고 있습니다.
그래서 어떤 물리엔진을 사용해서 가지고 있는 문제를 해결하기 보다는
내적과 외적이 가지고 있는 수학적 성질을 사용해서
일차원적으로 문제를 해결하는것을 권장드리고 싶습니다.
지금까지 내적과 외적에 대해 간략하게 알아봤습니다.
다음시간에는 회전에 대한 수학에 대해 알아보겠습니다.