제품 정보로 건너뛰기
이득우의 게임 수학
이득우의 게임 수학
Description
책소개
39가지 실시간 렌더링 게임 프로그래밍 실습 예제를 하나씩 따라 해보며
독자가 직접 체득하는 흥미로운 게임 수학의 세계!
게임 개발자와 그래픽 아티스트들이 궁금해 했던
3D 가상 세계와 메타버스 구현을 위한 수학적 원리와 응용 기법!
취업과 이직을 원하는 개발자와 아티스트가 꼭 알아야 할 게임 수학의 모든 것!


초급자들에게는 선형대수학의 기초를 친절히 설명하고 중급자들에게는 3차원 공간과 캐릭터를 제작하는 데 필요한 게임 수학의 원리와 그 응용 방법을 제시하는 책이다.
이 책에서는 이론을 설명하는 것에 그치지 않고, 단계별로 제공되는 39가지의 예제를 실습해 직접 게임 엔진을 만들어보면서 게임 엔진의 기본 원리와 구성을 배울 수 있다.


  •  책의 일부 내용을 미리 읽어보실 수 있습니다.
    미리보기

목차
1장 메타버스를 지탱하는 게임 수학

1.1 메타버스가 가져올 새로운 변화
1.2 게임 엔진의 구성
1.3 게임 수학의 구성
1.4 이 책의 실습 환경 구축
__1.4.1 실습 예제 구성
__1.4.2 개발 환경의 구성
__1.4.3 소스 코드의 빌드
__1.4.4 소스 코드의 구성
1.5 정리

1부 | 가상 세계의 구축

2장 수: 가상 세계를 구성하는 가장 작은 단위

2.1 수와 집합
__2.1.1 연산과 수의 구조
__2.1.2 수의 구조
__2.1.3 수의 표현
2.2 함수
__2.2.1 함수의 개념과 종류
__2.2.2 합성함수
__2.2.3 항등함수와 역함수
__2.2.4 곱집합을 활용한 좌표 평면으로의 확장
2.3 정리

3장 벡터: 가상 공간의 탄생

3.1 데카르트 좌표계
3.2 벡터 공간과 벡터
__3.2.1 스칼라와 벡터
__3.2.2 벡터 공간의 연산
__3.2.3 벡터의 크기와 이동
3.3 벡터의 결합과 생성
3.4 정리

4장 삼각함수: 회전을 위한 수학

4.1 삼각함수
__4.1.1 삼각함수의 성질
__4.1.2 각의 측정법
4.2 삼각함수를 활용한 물체의 회전
4.3 삼각함수의 역함수
4.4 극좌표계
4.5 정리

5장 행렬: 가상 세계의 변환 도구

5.1 선형성: 예측 가능한 비례 관계
__5.1.1 선형 함수
__5.1.2 벡터 공간의 선형 변환
5.2 행렬
__5.2.1 행렬의 기본 연산
__5.2.2 행렬의 곱셈
__5.2.3 정방행렬의 곱셈
5.3 행렬의 설계
__5.3.1 크기 변환행렬
__5.3.2 회전 변환행렬
__5.3.3 전단 변환행렬
__5.3.4 삼각함수의 덧셈 정리
5.4 역행렬
__5.4.1 역행렬의 존재를 판별하는 행렬식
__5.4.2 크기 변환행렬의 역행렬
__5.4.3 전단 변환행렬의 역행렬
__5.4.4 회전 변환행렬의 역행렬
__5.4.5 행렬 곱의 역행렬
5.5 정리

2부 | 콘텐츠 제작 기초

6장 아핀 공간: 움직이는 가상 세계의 구축

6.1 이동 변환을 위한 아핀 공간
6.2 아핀 공간의 구성 요소
__6.2.1 점
__6.2.2 이동 벡터
__6.2.3 아핀 공간의 성질
6.3 아핀 결합
__6.3.1 두 점의 결합
6.4 선 그리기 알고리즘
__6.4.1 벡터를 모니터의 점으로 표현
__6.4.2 선 그리기 알고리즘
__6.4.3 라인 클리핑 알고리즘
6.5 정리

7장 내적: 벡터 공간의 분석과 응용

7.1 벡터의 내적
__7.1.1 내적의 성질
__7.1.2 내적과 삼각함수와의 관계
__7.1.3 행렬의 곱셈을 내적으로 표현하기
7.2 시야 판별
__7.2.1 앞뒤 판별
__7.2.2 시야 판별
7.3 조명 효과의 구현
7.4 투영 벡터
7.5 정리

8장 삼각형: 물체를 구성하는 가장 작은 단위

8.1 세 점의 결합
8.2 메시
8.3 무게중심좌표
__8.3.1 무게중심좌표의 계산
__8.3.2 정점에 설정된 부가 정보의 활용
8.4 텍스처 매핑
8.5 정리

9장 게임 엔진: 콘텐츠를 만드는 기술

9.1 게임 엔진의 구성 요소
__9.1.1 씬의 구조
__9.1.2 모델링 행렬의 설계
__9.1.3 로컬 공간과 로컬 축
__9.1.4 리소스 관리
9.2 게임 엔진의 워크플로우
__9.2.1 CK소프트렌더러의 워크플로우
__9.2.2 렌더링 파이프라인
9.3 카메라 시스템
__9.3.1 가상 공간의 카메라
9.4 정리

3부 | 3차원 콘텐츠 제작

10장 3차원 공간: 입체 공간의 생성

10.1 3차원 공간의 설계
10.2 3차원 공간의 트랜스폼
__10.2.1 오일러 각
__10.2.2 회전행렬의 유도
__10.2.3 3차원 모델링 행렬
10.3 카메라 공간
10.4 오일러 각의 특징
__10.4.1 짐벌락 현상
__10.4.2 회전 보간의 계산
10.5 정리

11장 외적: 3차원 공간의 분석과 응용

11.1 벡터의 외적
__11.1.1 평행성 판별
__11.1.2 법선 벡터
__11.1.3 좌우 방향 판별
11.2 벡터로부터 회전행렬 생성
11.3 렌더링 계산량을 줄여주는 백페이스 컬링
11.4 오일러 각의 문제를 해결하는 로드리게스 회전 공식
11.5 삼중곱
__11.5.1 스칼라 삼중곱
__11.5.2 벡터 삼중곱
11.6 정리

12장 원근 투영: 화면에 현실감을 부여하는 변환

12.1 원근 투영 변환의 원리
12.2 동차 좌표계
12.3 깊이 값
12.4 원근 보정 매핑
12.5 깊이 버퍼
12.6 정리

13장 절두체: 최적화된 3차원 공간

13.1 절두체 컬링
__13.1.1 평면의 방정식
__13.1.2 평면의 방정식의 정규화
__13.1.3 평면의 방정식을 활용한 절두체 표현
__13.1.4 원근 투영 행렬로부터 평면의 방정식 만들기
13.2 바운딩 볼륨
__13.2.1 구 바운딩 볼륨의 판정
__13.2.2 AABB와의 판정
13.3 삼각형 클리핑
13.4 정리

4부 | 4차원 수학과 캐릭터

14장 복소수: 2차원 평면의 수

14.1 복소수
__14.1.1 허수
__14.1.2 복소수의 구조
14.2 복소평면
__14.2.1 단위 복소수와의 곱
__14.2.1 켤레 복소수의 회전 변환
14.3 복소수와 행렬의 관계
14.4 정리

15장 오일러 공식: 허수로 표현하는 회전 변환

15.1 자연지수함수
__15.1.1 무리수 e
__15.1.2 자연지수함수
15.2 미분
__15.2.1 도함수
__15.2.2 자연지수함수의 도함수
__15.2.3 sin 함수와 cos 함수의 도함수
15.3 급수
__15.3.1 등비수열
__15.3.2 급수
__15.3.3 매클로린 급수
15.4 오일러 공식
15.5 정리

16장 사원수: 4차원 수로 설계한 3차원 회전

16.1 사원수 대수
__16.1.1 사원수를 구성하는 세 허수
__16.1.2 사원수의 구조
__16.1.3 사원수와 벡터
16.2 사원수의 회전
__16.2.1 사원수와 오일러 공식
__16.2.2 회전 사원수를 이용한 3차원 공간에서의 회전
16.3 사원수의 변환
__16.3.1 오일러 각에서 사원수로의 변환
__16.3.2 사원수에서 오일러 각으로의 변환
__16.3.3 사원수에서 회전 변환행렬로의 변환
__16.3.4 회전 변환행렬에서 사원수로의 변환
16.4 사원수의 보간
16.5 사원수의 활용
16.6 정리

17장 캐릭터: 게임에 생기를 불어넣는 기술

17.1 스켈레탈 애니메이션
17.2 트랜스폼 계층 구조
__17.2.1 트랜스폼 계층 구조의 변환
__17.2.2 로컬 트랜스폼으로부터 월드 트랜스폼의 계산
__17.2.3 월드 트랜스폼으로부터 로컬 트랜스폼의 계산
17.3 캐릭터 메시와 애니메이션
17.4 정리

상세 이미지
상세 이미지 1

출판사 리뷰
| 이 책의 대상 독자 |

- 유저가 자유롭게 조종할 수 있는 3차원 가상 세계를 직접 만들고 싶은 개발자
- 게임 엔진을 직접 만들어보고 싶은 게임 개발자
- 벡터를 화면에 시각화하는 원리가 궁금한 테크니컬 아티스트
- 벡터, 행렬로 구성된 선형대수학의 기초를 배우고 싶은 학생이나 개발자, 아티스트
- 3차원 그래픽과 관련된 기초 이론을 배우고 싶은 학생이나 개발자, 아티스트
- 게임 엔진이 사용하는 사원수 체계와 그 구현 방법이 궁금한 게임 개발자

| 이 책의 구성 |

이 책은 수학의 기초 지식을 배우거나 다시 정리하고 싶은 이들, 혹은 수학을 중도포기한 경험이 있는 게임 개발자와 그래픽 디자이너들을 위해 집필했다.
주된 내용은 선형대수학으로 분류할 수 있겠으나, 그중에서도 컴퓨터 그래픽스에 특화된 선형대수학이라고 할 수 있겠다.
이 책은 총 4개 부로 구성되어 있고, 1부에서 시작해 점점 완성도를 높여나가 4부에서 마무리하도록 순차적으로 구성됐다.

이 책의 서막을 여는 1장 ‘메타버스를 지탱하는 게임 수학’에서는 메타버스로 더욱 발전하게 될 인터넷 세상에서 게임 수학이 왜 필요한지에 대한 이야기를 풀어봤다.
1부 ‘가상 세계의 구축’에서는 수의 질서로부터 만들어지는 가상 공간의 구조와, 가상 공간에서의 변환의 개념을 이해해 원하는 대로 공간의 질서를 바꾸는 방법을 다룬다.2장 ‘수: 가상 세계를 구성하는 가장 작은 단위’에서는 증명할 필요가 없는 자명한 명제인 공리로부터 수의 구조를 정의하고 함수의 기초 개념과 연산에 대해 배워본다.
이어 3장 ‘벡터: 가상 공간의 탄생’에서는 벡터 공간을 정의하고 2차원 벡터 공간을 배경으로 연산과 여러 개념을 학습해 가상 세계를 구성하는 기초 이론을 다진다.
4장 ‘삼각함수: 회전을 위한 수학’에서는 벡터 공간의 회전 변환을 위해 필수적으로 알아야 하는 삼각함수를 알아본다.
1부의 마지막 5장 ‘행렬: 가상 세계의 변환 도구’에서는 선형 변환의 개념을 정립하고 행렬을 활용해 벡터 공간의 변환을 학습하는 것으로 마무리한다.

2부 ‘콘텐츠 제작 기초’에서는 1부에서 정리한 수학 이론을 바탕으로 콘텐츠를 담는 공간인 아핀 공간을 정의하고 아핀 공간에서 2차원 게임을 만드는 데 필요한 구현 방법을 살펴본다.
6장 ‘아핀 공간: 움직이는 가상 세계의 구축’에서는 선형 변환의 형태로 이동, 회전, 크기 변환을 지원하는 아핀 공간과 그 구성 요소를 살펴본다.
아핀 공간에서 정의한 점들이 모여 선을 이루는데, 컴퓨터에서 선을 효과적으로 그리는 알고리즘도 함께 소개한다.
7장 ‘내적: 벡터 공간의 분석과 응용’에서는 벡터 공간을 분석하고 다양한 상황에 적용할 수 있는 연산인 내적과 그 응용 방법을 배워본다.
이와 같이 6장과 7장에서 콘텐츠 제작에 필요한 수학적 기반을 확립한 후, 8장 ‘삼각형: 물체를 구성하는 가장 작은 단위’부터는 수학으로 정의한 삼각형을 토대로 가상 공간의 사물을 형성하는 방법을 다룬다.
이어지는 9장 ‘게임 엔진: 콘텐츠를 만드는 기술’에서는 다양한 사물을 한 공간에 모으고 카메라를 관리하는 게임 엔진의 구조와 실시간으로 콘텐츠를 그려내기 위한 워크플로우를 소개한다.


3부 ‘3차원 콘텐츠 제작’에서는 2부에서 다룬 2차원 게임 엔진 구조를 3차원으로 확장시키는 내용을 담았다.
10장 ‘3차원 공간: 입체 공간의 생성’에서는 3차원 공간을 설계하는 방법과 3차원 공간에서 회전 변환과 카메라 변환을 구현하기 위한 방법과 고려할 사항을 알아본다.
3차원 공간을 분석하고 응용하는 연산인 외적을 학습하는 11장 ‘외적: 3차원 공간의 분석과 응용’에서는, 7장에서 배운 내적과 함께 응용해 3차원 공간에서 활용할 수 있는 다양한 응용 방법을 살펴본다.
12장 ‘원근 투영: 화면에 현실감을 부여하는 변환’에서는 3차원 콘텐츠를 표현할 때 필수적으로 적용해야 할 원근감을 구현하는 방법과 이로 인해 발생하는 새로운 문제와 대처 방법을 배운다.
그리고 3부의 마지막 13장 ‘절두체: 최적화된 3차원 공간’에서는 평면의 방정식을 소개하고 다수의 평면을 조합해 절두체라는 닫힌 공간을 수학적으로 정의한 후 이를 활용해 시야에 보이는 물체만 그려내는 기법을 다루면서 3차원 게임 엔진을 마무리한다.


4부 ‘4차원 수학과 캐릭터’에서는 3부에서 제작한 3차원 게임 엔진에서 회전 변환을 안정적으로 구현하기 위한 수학과 캐릭터를 제작하는 방법을 다룬다.
3차원 공간에서의 변환이 깔끔하게 동작하기 위해서는 4차원 공간의 수인 사원수를 활용해 회전 변환을 설계해야 한다.
사원수는 대학교 선형 대수나 공업 수학에서도 다루지 않는 생소한 주제다 보니, 이를 제대로 학습하기 위한 교재나 자료가 충분하지 않다.
이 책에서는 밑바닥에서 사원수를 올바르게 이해할 수 있는 선행 내용으로서 14장 ‘복소수: 2차원 평면의 수’에서는 복소수, 15장 ‘오일러 공식: 허수로 표현하는 회전 변환’에서는 오일러 공식을 다룬다.
이를 기반으로 16장 ‘사원수: 4차원 수로 설계한 3차원 회전’에서는 사원수의 구조를 설명한 후, 실제 게임 엔진에 적용할 때 필요한 응용 방법을 총정리해서 3차원 게임 엔진의 기본 기능을 완성하도록 구성했다.
마지막으로, 이 책의 대단원인 17장 ‘캐릭터: 게임에 생기를 불어넣는 기술’에서는 게임 엔진에 계층 구조를 구현하는 방법을 다루는데, 이러한 계층 구조를 활용해 가상 공간에서 움직이는 캐릭터를 제작할 수 있도록 그 응용 방법을 알아본다.


| 이 책을 활용하기 위한 개발 환경 |

수학을 기반으로 렌더링의 모든 과정을 직접 체험하고 배울 수 있도록 그래픽카드 GPU를 활용하지 않고 CPU 프로그래밍에서 모든 것을 다 제작하도록 교안을 설계했다.
이렇게 GPU를 사용하지 않고 컴퓨터 그래픽을 구현하는 프로그램을 보통 소프트렌더러(Soft renderer)라 부르는데, 예제의 이름은 내가 재직 중인 학교 이름을 따서 CK소프트렌더러로 지었다. CK소프트렌더러는 CPU만으로 동작하다 보니 현업 실무에서 사용하기에는 적합하지 않지만, 렌더링의 모든 과정을 직접 구현해볼 수 있기 때문에 유용한 학습 교재라고 할 수 있다.
렌더링 속도를 향상시키기 위해 다소 진입 장벽이 높은 C++ 언어를 사용했고, 윈도우 10 운영체제상의 비주얼 스튜디오 2022와 2019를 기준으로 예제를 제작했다.
예제를 실습하기 위해서는 기본적으로 C++ 프로그래밍 능력이 필요하지만, 혹여 독자가 C++ 프로그래밍을 몰라도 결과를 확인할 수 있도록 완성된 예제도 함께 제공한다.
또한 다음 페이지에서는 이 책의 실습 예제를 실행한 전체 예제의 결과 화면을 한눈에 볼 수 있다.
혹시 프로그래밍을 잘 몰라도 게임 제작에 수학이 어떻게 활용되는지 쉽게 이해할 수 있을 것이다.

〈실습 예제 결과 화면 미리보기〉
- https://bit.ly/math4game

[지은이의 말]

최근 인터넷 산업 분야에서 메타버스라는 키워드가 새로운 화두로 떠오르게 되면서 3차원 가상 공간과 가상 캐릭터 제작에 사용된 기술이 더 큰 주목을 받고 있다.
이러한 기술은 그동안 주로 게임 산업에서 발전되어 왔는데, 메타버스의 급부상과 함께 게임 제작뿐만 아니라 영화, 드라마, 방송 미디어는 물론, 콘서트, 쇼핑몰 같은 다양한 분야에 널리 활용되는 등 오늘날 팬데믹 시대에 걸맞는 미디어 제작 도구로 활용되면서 이제는 정치, 경제, 사회, 문화의 모든 방면으로 확산되고 있다.
게임 엔진은 가상 세계와 가상 캐릭터에 관련된 기술을 가장 효과적으로 집약한 최첨단 소프트웨어다.
최근 추이에 따라 게임 엔진의 활용범위가 넓어지면서 더욱 정밀하고 고도화된 가상 공간에 대한 요구도 한층 높아지고 있다.
또한 이러한 환경에서 많은 실무 개발자들이 실감하는 것이 바로 수학의 필요성이다.
그런데 막상 수학에 대해 즐겁게 이야기하는 사람은 그리 많지 않다.
학창 시절 주입식, 암기식 수학 교육으로 인해 학습을 중도 포기했거나, 학창 시절에는 수학 실력이 그럭저럭 평균 이상이었지만, 현업에서 패턴화된 개발을 반복하다 보니 어릴 적 쌓아둔 수학 지식마저 점점 쇠퇴해가는 현실을 느끼는 사람이 많을 것이다.
나 또한 그랬다.

희미해진 수학에 대한 기억을 되살리기 위해 중고등학교 때 배웠던 수학 교과서를 다시 펼쳐봐야 한다는 사실은 막막하기도 하다.
학창 시절 수학을 좀 더 열심히 공부하지 않았던 과거의 나 자신을 탓하게 된다.
하지만 이는 과거의 내가 잘못한 것이 아니라, 입시만을 위한 주입식 교육으로 점철된 수학 교육 시스템 탓이다.
나의 경험을 이야기해보자면, 게임 엔진에서 콘텐츠 만드는 일을 반복하는 것에 지루함을 느껴, 나만의 게임 엔진을 만들어보자는 결심을 하면서 수학의 필요성을 자각하게 됐다.
이때부터 수학에 관련된 다양한 책과 위키피디어 사이트, 인터넷 정보를 통해 굳어버린 뇌를 하나씩 풀어나갔다.
나름의 방법으로 수학에 대한 감각을 회복하자, 깨닫게 되었다.
과거의 나는 딱히 잘못한 것이 없었다.
굳이 나의 잘못을 꼽자면, 수학을 어떻게 활용해야 할지 몰랐으며, 남이 시키는 대로 문제의 답만 구하려 했다는 점이다.
지금 생각해보면 순서가 잘못된 것이었다.
수학을 배우기 전에 내가 무엇을 해야 할지 정하는 것이 가장 중요했다.


그렇기에 이 책은 전반적인 수학 이론을 다루는 교양서도, 특정 분야를 심도 있게 다루는 전문 수학 서적도 아니다.
수학 서적에서 흔히 볼 법한 복잡한 방정식의 해를 구하는 문제는 이 책에서 등장하지 않는다.
게임 제작, 컴퓨터 그래픽스에 관심 있는 사람이 모니터 화면에 무언가를 표현할 때 필요한 수학 개념을 실용적인 방법으로 소개하는 것이 이 책의 가장 큰 목표다.
이는 다시 수학을 공부하려 했을 때 막막했던 과거의 내 심정을 반영한 것이다.
이 책을 쓰기 위해 가상 공간의 가상 캐릭터를 가장 단순한 형태로 보여주는 CK소프트렌더러라는 예제를 먼저 제작했다.
그 후에는 역순으로, 예제를 만드는 데 필수적인 수학 요소를 정리해 기록하면서 가장 밑바닥에 있는 수학적 공리까지 도달한 후에야 비로소 책의 목차를 만들 수 있었다.
게임 제작에 관련된 재미있는 움직임과 화려한 예시를 얼마든지 담을 수도 있었지만, 수학적 원리와 응용 방법을 설명하는 데 이미 많은 지면을 할애했을 뿐더러 이 책의 주제가 게임 수학이다 보니 무엇보다도 근본적인 원리에 집중하기 위해 실습 예제는 최대한 간단하게 고안했다(사실적이고 역동적인 움직임을 구현하고 화려한 비주얼을 만드는 컴퓨터 그래픽스의 원리가 궁금한 독자들은 다른 서적을 참고하기 바란다).

이 책의 초고를 작성하면서 책 내용을 바탕으로 틈틈이 두 학기 동안 강의하면서 나의 노력이 헛되지 않았음을 확인할 수 있었다.
내심 수학을 두려워 했던 학생들이 더 이상 수학을 어려워하지 않게 됐으며, 학습한 수학 이론을 활용해 가상 공간의 캐릭터를 제손으로 마음껏 창조해낼 수 있게 됐으니 말이다.
이 책의 내용이 매우 쉽다고 과장하지는 않겠다.
책 내용을 모두 이해하고 자기 것으로 만드는 과정은 험난할지도 모른다.
쉽지 않은 여정이겠지만 독자 여러분이 이 책을 통해 수학에 대한 해방감을 만끽해볼 수 있다면 저자로서 큰 보람이겠다.
여러분의 건승을 기원한다.
GOODS SPECIFICS
- 발행일 : 2022년 02월 22일
- 쪽수, 무게, 크기 : 652쪽 | 1,198g | 185*240*27mm
- ISBN13 : 9791189909376
- ISBN10 : 1189909375

You may also like

카테고리