공부/인프런 - 청강대_이득우

4. 물체의 수학 3 – 벡터의 내적과 외적

셩잇님 2022. 11. 27. 16:28
반응형

 

 

물체의 수학 3 – 벡터의 내적과 외적 🤠

 


안녕하세요. 이번 시간에는 물체에 대한 수학 중 벡터에 대한 수학에 관해 얘기하겠습니다. 수학에 관해 얘기하기 전에 게임 콘텐츠가 어떤 식으로 만들어지는 그 과정을 한번 정리해보겠습니다.

 

1. 로컬 공간 : 개별 물체의 공간

2. 월드 공간

3. 카메라 공간

4. 최종 렌더링 진행

게임을 만들기에서는 먼저 각 물체를 기획하고 개별 물체를 표현하기 위해 로컬 공간을 설정하고, 로컬 공간 안에서 3D 맥스 등 제작 툴을 이용하여 물체를 모델링 합니다.

 

이렇게 물체를 모델링 한 결과물을 메시 데이터로 변환하여 유니티, 언리얼과 같은 게임 엔진에 넣어줍니다. 모델링 된 데이터가 게임 엔진으로 들어오게 되면 메시 데이터는 모든 면은 삼각형 단위로 쪼개지고 각 삼각형은 세 개의 정점으로 구성된 삼각형으로 분해됩니다.

 


 

1. 로컬 공간

2. 월드 공간: 물체들이 모인 게임의 공간

3. 카메라 공간

4. 최종 렌더링 진행

게임 제작자들은 이를 사용해서 게임 세상을 구축하게 됩니다. 우리가 흔히 게임 스테이지라고 부르는 월드 공간이 바로 이러한 물체들을 모아 구성한 공간이라고 합니다.

 


 

1. 로컬 공간

2. 월드 공간

3. 카메라 공간 : 플레이어가 보는 공간

4. 최종 렌더링 진행

스테이지 구성이 완료되면 플레이어를 월드에 배치하고 캐릭터에 배치된 카메라를 사용하여 탐험하는 형태로 게임 콘텐츠가 만들어집니다. 이때 카메라의 보이는 영역의 속한 물체만 걸러내는 작업이 있습니다. [예) 프러스텀 컬링, 호라이즈 제로던, 왜? 프레임 향상을 위해] 이렇게 카메라 영역에 나온 물체를 걸러주고 물체의 메시 데이터를 분석해서 그래픽카드에 넘겨주면 순서대로 최종 화면을 완성하게 됩니다.

 

1. 로컬 공간 – 월드 공간의 변환

2. 월드 공간 – 카메라 공간의 변환

게임이 시작되면 프레임마다 월드 공간에서 사용자 입력과 지정된 로직에 따라 시뮬레이션 되고 이 프레임에 수행할 시뮬레이션이 완성되면 카메라의 보이는 물체만 걸러내서 렌더링을 진행하게 된다. 전자를 게임 로직이라 하며, 이를 물체의 배치 설정이라 합니다. 후자를 렌더링 로직이라 하며, 화면에 그릴 데이터 설정을 나타냅니다.

 

제가 이전에 설명했던 내용들 중 공간의 수학과 점의 수학은 렌더링 로직에 굉장히 중요하게 사용합니다.

게임 로직 : ???

렌더링 로작 : 공간의 수학과 점의 수학이 중요하게 사용됩니다.

 

하지만 전자의 해당하는 게임 로직 단계는 특수한 경우를 제외하곤 점에 대한 수학을 쓸 일이 없습니다. 게임에서 물체가 이동하는 것은 물체를 이동하는 점이 변하는 것이 아니라 물체를 담는 공간이 이동한다고 말씀드렸습니다.

따라서 게임 로직은 벡터의 수학으로 이해하면 됩니다.

 

따라서 이때에는 점을 다루지 않고 평행이동한 공간의 원점과 공간을 구성하는 중심축의 변환을 신경 쓰면 됩니다. 이렇게 공간의 변환을 설정하는 것을 트랜스폼이라고 합니다. 트랜스폼의 최종 정보는 내부적으로는 행렬로 구성되어 있지만, 게임 로직에서는 행렬의 정보를 사용하지 않고 크기, 회전, 위치의 3가지 데이터로 쪼개서 관리합니다.

 

게임 로직에서는 크기, 회전, 위치에 대한 정보만 관리하면 이 다음에 진행하는 렌더링 로직에서는 이를 기반으로 행렬을 구성하고 이를 사용해 고속으로 우리가 필요한 변환을 한 번에 처리한다.

트랜스폼 : 크기, 회전, 위치를 순서대로 조합한 변환

 


 

벡터에 대한 수학이란 개별 물체가 가지고 있는 크기 위치 회전에 대한 정보를 계산하는 수학이라고 할 수 있습니다. 대부분의 게임 엔진(유니티, 언리얼 등)을 사용해 게임을 제작하는 작업은 이 3가지 종류의 데이터를 정하는 작업이 대부분입니다. 실질적으로 게임개발에서는 자주 사용 하는 것은 벡터의 수학을 주로 사용한다고 볼 수 있습니다.

 

보통 게임에서 벡터를 사용한다고 하면 기본 물리공식을 사용해서 점프, 물체의 포물선 이동 등과 같은 작업을 생각하지만, 사실 그 전에 벡터를 잘 다루기 위해서는 벡터가 가지고 있는 연산이 어떤 것인지 알아보고, 그 연산들이 가지고 있는 기본 원리를 파악하고, 벡터와 스칼라가 상호 순환하는 시스템을 만들어야 합니다.

 

이번 영상에서는 이 연산에 대해 알아보겠습니다. 제가 소개드릴 벡터의 연산은 총 4가지이며, 여기서 2개는 기본이고 나머지 2개는 응용 연산입니다. 먼저 2가지 연산은 벡터와 벡터의 덧셈, 벡터와 스칼라의 곱셈이 있습니다.

 

1. 벡터와 벡터의 덧셈 (기본)

2. 벡터와 스칼라의 곱셈 (기본)

3. 벡터의 내적 (응용)

4. 벡터의 외적 (응용)

 

여기서 스칼라란? 사칙 연산이 가능한 수 집합의 원소입니다. 말이 어렵습니다. 우리가 일상생활에서 사용하는 실수가 바로 스칼라입니다. 이 두 가지 기본연산이 어떤 작업을 하는지 알아보겠습니다.

 


 

지금 보시는 것처럼 벡터와 벡터의 덧셈은 굉장히 간단합니다. 그림에서 보는 것처럼 각 축의 크기만큼 평행이동한 것을 볼 수 있습니다.

 

두 번째로는 벡터와 스칼라의 곱셈에 대해 알아보겠습니다. 그림에서 보는 것처럼 벡터와 스칼라의 곱셈은 벡터가 가지고 있는 고유한 성질, 평면의 기울기라고 볼 수 있는데요. 그 기울기를 그대로 유지한 상태에서 원점으로부터의 크기를 조절해주는 동작이라고 볼 수 있습니다.

 

이 두 연산을 벡터의 기본연산이라고 합니다. 다음과 같이 두 개의 연산을 조합해서 사용하면 새로운 벡터를 생성할 수 있습니다. 이것을 선형 조합이라고 합니다. 평행하지 않은 두 벡터를 조합하면 평면에 있는 모든 벡터를 생성할 수 있습니다. 어떤 새로운 벡터를 생성할 수 있는 시스템이 만들어지는 것이기 때문에 이 연산을 기본연산이라고 합니다.

 

조합에 사용에서 가장 기본적인 벡터 두 가지를 꼽는다면 X축에 해당하는 (1, 0), Y축에 해당하는 (0, 1) 들 수 있습니다. 이 둘을 조합하면 공간에 속한 모든 벡터를 손쉽게 생성해 낼 수 있습니다. 그래서 이 두 가지를 표준 기저 벡터라고 합니다.

아앗.. 이쁘게 캡처하고 싶었지만, 교수님 께서 눈을 감고 계신다..

두 가지 연산을 설명해드렸습니다. 사실 이를 응용해서 무언가를 표현하기에는 부족합니다. 그래서 벡터를 다양하게 응용할 수 있는 별도의 연산이 있습니다. 그것이 바로 벡터의 내적과 외적입니다. 이들은 게임 로직에서부터 쉐이더에 이르기까지 게임 제작에 전반적인 과정에서 유용하게 사용되는 연산입니다. 즉, 벡터의 내적과 외적은 게임 제작 과정에서 벡터를 응용하는데 사용하는 유용한 연산들입니다.

 


 

특히 먼저 설명한 벡터의 내적은 벡터의 응용에 관련된 대부분에 이 공식이 사용됩니다. 벡터의 내적 연산은 다음과 같이 계산합니다.

예를 들어 3차원 벡터 내적 연산을 사용한다면 지금 보이는 그림과 같이 각 축의 요소를 곱한 다음, 이들을 각각 더해주면 됩니다. 이러한 내적 공식은 컴퓨터가 매우 빨리 계산할 수 있으며 상당히 많은 곳에서 활용할 수 있습니다.

 

이 내적을 사용하면 두 벡터가 서로 직교하는지, 물체가 나의 앞에 있는지, 뒤에 있는지 판별할 수 있으며, 어떠한 시야각이 주어졌을 때, 이 시야각 영역에 물체가 있는지 밖에 있는지 등을 파악할 수 있습니다. 내적의 또 다른 중요한 용도는 어떤 벡터를 다른 벡터로 투영시킬 때 사용합니다. 이 내적의 투영공식으로부터 평면의 방정식이 유도되며, 이 평면들이 모여 절두체 영역을 생성합니다.

왼쪽 상단부터 1. 직교 여부, 2. 앞 뒤 여부, 3. 물체의 시야각 영역 여부, 4. 투영, 5. 평면의 방정식

절두체라는 것은 앞서 설명해 드린 카메라가 보이는 영역을 의미하는 것입니다. 여기서부터 카메라 보는 영역 안에 물체만 골라낼 수 있는 수학 공식과 알고리즘이 만들어집니다.

 


 

내적에 이에 설명해 드릴 것은 벡터의 외적입니다. 벡터의 내적 연산은 어떤 차원에서든 계산할 수 있지만, 외적 연산은 오로지 3차원에서만 가능합니다. 두 벡터의 외적은 그림에서 보는 것처럼 서로 다른 요소만 조합하여 사용하는 특징이 있습니다.

 

내적이 직교성을 판별하는 데 사용한다면 외적은 평행성을 판별하는 데 사용합니다. 그리고 내적은 앞뒤를 판별하는 데 사용한다면 외적은 좌우를 판별하는 데 사용합니다. 이렇듯 벡터의 외적은 내적의 부족한 부분을 보충해주는 성질이 있어서 이 둘을 조합하여 다양한 문제를 해결할 수 있습니다.

 

이러한 외적 연산이 많이 사용하는 응용 방법으로는 두 개의 벡터를 만들어내는 평면에 수직인 벡터를 만들어내는 것입니다.

 

평행하지 않은 두 벡터의 조합은 평면을 만든다고 설명해드렸습니다. 여기에 수직인 벡터, 즉 평면의 방향을 외적을 통해 파악할 수 있습니다. 이러한 과정을 계속 거치면 3차원 공간을 구성하는 3가지 축을 모두 외적을 통해 계산할 수 있습니다.

이 문제는 사실 게임 회사 입사시험에 단골로 나오는 문제이기 때문에 혹시 게임 회사 면접이나 입사시험을 준비하고 있으시면 꼭 알아두고 가는 것을 권장합니다.

 

 


 

정리 👻

 

지금까지 배운 내용을 정리해보겠습니다. 벡터에는 2가지 기본연산이 있고 2가지 응용 연산이 있습니다. 2가지 응용 연산인 내적과 외적은 상호 보완적인 성질을 가지고 있습니다. 그래서 어떤 물리 엔진을 사용해서 문제를 해결하기보다는 내적과 외적이 가지고 있는 수학적인 성질을 이용해 일차적으로 문제를 해결하는 것을 권장하고 싶습니다. 지금까지 내적과 외적에 대해 알아보았습니다.

 

1. 벡터와 벡터의 덧셈 (기본)

2. 벡터와 스칼라의 곱셈 (기본)

3. 벡터의 내적 (응용)

4. 벡터의 외적 (응용)

 

다음 시간에는 회전에 대한 수학에 대해 알아보겠습니다.

 

 

 

반응형