독서 리뷰

이득우의 게임 수학

지노윈 2023. 1. 22. 15:30
반응형

 

책의 내용이 무척 알차고 짜임세가 있어서 좋았습니다.

초반에는 게임의 가상세계 구현을 위한 수의 개념, 벡터, 삼각 함수, 행렬등을 매우 구체적이고 알기 쉽게 설명합니다.

이러한 설명들은 결국 아핀 공간의 탄생을 설명하기 위해서라는 생각이 됩니다.

1차원 개념을 2차원 공간으로 이를 다시 3차원 공간으로 심지어는 4차원 공간으로 확장하여 체계적으로 설명합니다.


책의 몇 가지 내용 발췌

이동이 가능한 부분 공간을 "아핀 공간"이라고 부르며 이를 통해 이동 변환을 설명한다.

아핀 공간에 대해 책의 내용을 요약하자면, 벡터 공간에서 이동을 위해 마지막 차원 값을 1로 한정한 부분 공간을 아핀 공간이라고 부른다. 그리고, 한 차원을 높여 설계한 선형 변환을 아핀 변환이라고 한다. 즉, 2차원 이동을 위해 마지막 차원 값이 1인 3차원 공간을 다루며, 3차원 이동을 위해서는 같은 원리고 4차원 공간을 다룹니다.

 

데카르트 좌표계가 픽셀화를 통해 모니터에 표시되는 과정을 설명합니다.

정수만 사용해 효율적으로 화며에 선분을 그리는 "브젠험 알고리즘"을 소개하고 선을 클리핑하기 위해 "코헨서덜랜드 라인 클리핑 알고리즘"을 소개합니다. 이책의 특징으로는 책에서 설명하는 것들은 CK렌더러라는 이름으로 모두 코드로 구현하였으며 코드를 통해 자세히 설명하고 있습니다. 단순히 이론만을 설명하는 것이 아니라 예제를 통해 실제로 테스트 할 수 있어서 학습 효과를 더욱 높일 수 있습니다.

 

벡터의 내적은 같은 차원의 두 벡터가 주어졌을 대, 벡터를 구성하는 각 성분을 곱한 후 이들을 더해 스칼라를 만들어내는연산입니다. 즉, 두 벡터가 결국 스칼라로 됩니다. 내적을 통해 얻은 이 스칼라 값이 갖는 의미와 게임에서 어떻게 응용되는 지를 설명합니다. 내적이 0이면 직교하고 시야 판별시 앞뒤 판별을 간편하게 할 수 있습니다. 시선 벡터와 목표물로 향하는 벡터의 내적을 구한 후 그 결과가 양수이면 캐릭터 앞에 목표물이 있으며 음수이면 캐릭터 뒤에 목표물이 있음을 알 수 있습니다. 이를 조금 응용하면 캐릭터의 시야각을 정하고 시야각 내에 목표물이 있는지 아닌지를 판별 할 수 있습니다. 

 

게임엔진에서 오브젝트를 구성하기 위해 삼각형을 주임으로 물체에 관련된 정보를 기록하는 메시 데이터를 설명합니다. 메시는 정점(vertex)들이 모인 데이터이며 이것들을 관리하기 위해 정점 버퍼와 인덱스 버퍼를 만들어서 관리를 합니다. 

이후 렌더링 파이프 라인을 전반적으로 설명을 하며 CK렌더러의 소프트웨어 렌더링 구현을 설명합니다. 이러한 설명들을 통해 유니티와 언리얼 엔진과 같은 상용엔진들을 구현을 간단하게 나마 경험해 볼 수 있습니다.

 

3DMax는 오른손 z업, Unity는 y업 왼손, Unreal Engine은 z업 왼손 좌표계를 사용합니다. 

3차원 공간의 트랜스폼의 구성에서 T(이동), R(회전), S(크기) 연산 순으로 계산하는 것을 설명합니다. 

 

두 벡터를 외적하면 항상 영벡터가 되며, 이러한 외적의 성질은 평행성을 판별하는데 사용됩니다. 이는 두 벡터의 직교성을 판별하는 내적의 성질과 대립됩니다. 외저으로 생성된 벡터의 크기는 두 벡터가 만드는 평행사변형의 넓이입니다. 

외적의 대표적인 활용은 왼쪽과 오른쪽을 판별하는 것입니다.

만일 물체가 시선 방향의 왼쪽에 있다면 시선 벡터에서 물체로 향하는 벡터로 외적한 결과는 오른손 법칙에 따라 평명의 위쪽을 향할 것입니다. 반대로 물체가 시선 방향의 오른쪽에 있다면 외적의 결과는 평면의 아래쪽방향을 향할 것입니다.


후반부에는 원근 투영을 통해 화면에 현실감을 부여하고 절두체 컬링과 바운딩 볼륨, 삼각형 클리핑을 통해 3차원 공간을 최적화하는 것을 성명합니다. 이후 4차원 수학에 대한 설명이 이어집니다. 

 

지은이가 이 책을 집필을 위해 들였던 노력과 인고의 시간들이 잘 느껴졌습니다.

이렇게 훌륭한 책을 집필해주셔서 감사하고 이후 게임 개발자에게 많은 기여를 하였다고 생각합니다.