목록2025/03 (23)
cyphen156

3차원 공간은 원근감이 존재하기 때문에 구현 방법이 복잡해지고, 예상밖의 상황이 많이 생긴다고 한다. 이것을 오일러의 각도법과 벡터의 외적으로 하나씩 해결해 나가면서 여러 수학적 지식과 게임 엔진 개발에 대한 지식들을 배울 수 있을 것 같다.좌표계 기준이 전에 한번 언급한적 있었던 왼손 좌표계와 오른손 좌표계에 대한 내용이다. 이 둘은 관점에 따라 3차원 공간을 설계하는 큰 차이를 만들어내는 기준들이 되는데 그 기준이 물체를 바라보는데 있어서 나를 기준으로 오는지, 또는 앞으로 가는지를 결정한다.대표적인 특징은 다음과 같다. 하지만 상대적인 기준일 뿐 절대적이지는 않다.왼손 좌표계 : 배경을 관찰하는데 적합하다오른손 좌표계 : 물체를 관찰하는데 더 익숙하다.밑의 그림은 대표적인 게임, 모델링 툴, 엔진과..

게임 엔진은 유니티와 엔진과 자체엔진 개발공부로 어느정도 학습해 나가고 있다고 생각한다.이번 9장에서는 이득우 교수님의 CK소프트 렌더러라는 CPU BaseEngine에서 게임이라는 소프트웨어를 구성하기 위해 게임 엔진이 어떤 기능을 해야 하는지 배울 것이다.우선 모든 게임 오브젝트가 기본적으로 가지고 있는 Transform에 대해서 생각해 보면Position(T), Rotation(R), Scale(S)로 정의된다.이 트랜스폼 정보들은 행렬 곱 연산을 통해 아핀 변환을 수행하기 때문에 교환 법칙이 성립하지 않아 순서가 가장 중요하다. 이 변환의 순서 조합은 6가지가 생기는데 다음과 같다.S * R * TS * T * RT * S * RT * R * SR * S * TR * T * S이렇게 순서에 따라 ..

항상 모든 몬스터의 인공지능을 개발자가 코딩할 수는 없다. 그래서 유니티에서는 길찾기 알고리즘을 개발하는 시간을 단축할 AI Navigation이라는 레지스트리 패키지를 제공하고 있다.그리고 AI가 돌아다닐 수 있도록 Plain에 NavMesh Surface 컴포넌트를 달아준다.여러가지 옵션들이 있지만 주의깊게 봐야 할 것은 Agent Type과 Default Area이다.어떠한 형태의 오브젝트가 어느 부분을 활용하여 이동할지를 결정하는 것이기 때문에 항상 이것을 실제 AI오브젝트에 달린 컴포넌트와 맞춰 주어야 한다.AI를 통해 제어할 오브젝트에 Nav Mesh Agent컴포넌트와 제어 스크립트를 부착해준다.Using문using UnityEngine.AI;using Unity.AI.Navigation;..

이전까지는 한 점(점의 좌표) 혹은 두 점(선분, 벡터) 에 대해 공부했다면, 이제부터는 3D 그래픽스 및 게임 그래픽에서 가장 기본적인 단위인 세 개의 점(정점, Vertex)으로 구성된 삼각형에 대해서 배우겠다. 정점(Vertex), 삼각형(Triangle), 폴리곤(Polygon)앞선 장에서 두 벡터가 서로 선형 독립의 관계라면 같은 차원 내의 공간상에서 어떠한 벡터든 만들어 낼 수 있다고 배웠다.그런데 아핀 공간상에서 점들의 결합의 스칼라 결과는 항상 1이 되어야 한다고 했다.또한 선분을 그릴 때 S와 T값을 [0, 1]로고정한다면 유한한 크기의 직선을 구할 수 있다고 했다.이것을 통해 삼각형의 형태 안에 존재하는 점들이 모두 아핀 결합식으로 생성될 수 있는 점들이라 판단할 수 있다.이렇게 탄생한..

게임에서 빛의 표현을 위해 사용하는 여러가지 공식들이 있다. 그 중 하나가 램버트 반사 모델이다.램버트 반사는 물체가 광원으로부터 빛을 받았을 때 반사하는 빛의 세기가 Cos함수에 비례 한다는 것을 착안하여 만들어낸 모델이다. 다만 모든 표면이 동일하게 빛을 확산 반사한다고 가정하기 때문에 정확한 빛의 반사를 표현하기는 어렵지만 단순하기 때문에 빠른 연산속도를 보장하고, 그럴듯한 음영 효과를 플레이어에게 제공하기 때문에 유용한 공식이다.다음은 플레이어 포지션을 따라 광원으로부터 빛을 반사하는 예제이다.공유 변수// 게임 로직과 렌더링 로직이 공유하는 변수/// 7_2 예제/// 조명 모델 구현하기Vector2 lightPosition; // 광원LinearColor lightColor;Vector2 ci..

드디어 몇 번이나 나를 다시 공부하게 만들었던 내적이다. 여태까지가 벡터를 통해 가상공간에서의 물체를 그리고, 움직이고, 변환하는 것에 집중했다면 앞으로 배울 내용들은 더욱 빠르고, 적게 연산하여 물체와 물체간의 상호작용 등을 배워나갈 것이다.벡터의 내적내적은 같은 차원의 두 벡터가 주어졌을 때 각 성분을 곱한 후 더해 스칼라를 만들어내는 연산이다.가령 2차원 벡터와 3차원 벡터의 경우를 확인해보자.이차원 벡터의 내적A-> = (a, b)B-> = (c, d)Dot(A->, B->) => (ac + bd)삼차원 벡터의 내적A-> = (a, b, c)B-> = (d, e, f)Dot(A->, B->) => (ad + be + cf)벡터의 내적은 교환 법칙은 성립하지만 결과가 벡터가 아닌 스칼라로 변환되기 ..

앞서 글에서 말했듯이 벡터의 이동은 같은 차원 내에서는 할 수 없다. 그래서 전단변환을 응용하여 물체의 이동을 구현하려고 사용하게 된 것이 Affine 변환이다. 개념적으로 이동을 표현하려 하는 물체보다 상위 차원을 사용하여 상위차원의 원점을 기준으로 물체의 차원에 해당하는 점들을 전단변환 한 것이다. 이것을 변환 행렬을 통하여 연산하고, 변환 행렬은 다음과 같이 표현된다.아핀공간에서 점과 점을 더하면 차원 상수가 1이라는 것을 보장할 수가 없어진다수식으로 표현하면 P1(x1, y1, 1) + P2(x2, y2, 1) = P3(x1 + x2, y1 + y2, 2)라는 3차원 좌표가 변경되어버린다는 문제가 생긴다. 그렇기 때문에 특정 스칼라 (a, b)를 곱하여 점과 점을 더한다면 차원수를 1로 유지할 수..