게임 엔진 아키텍처 (3 판)
Description
게임 엔진은 매우 복잡하고 어려운 소프트웨어다. 바로 그런 이유 때문에 개별 주제를 다루는 책은 넘쳐나지만 전체적인 맥락을 한 번에 파악할 수 있는 책은 드물다. 이 책은 특정 기술이나 엔진을 초월해 게임 프로그래머가 알아야 할 내용을 전체적으로 다루면서도 실용적인 측면을 함께 소개한다. 저자는 현업에 종사하는 업계 최고 수준의 프로그래머로 자신의 경험과 주변 동료들의 지식을 합쳐 이 책을 썼다. 엔지니어로서 게임 만드는 일을 할 계획이 있거나, 현재 업계에 종사하고 있지만 지엽적인 쳇바퀴에서 벗어나 더 넓은 통찰을 얻고 싶은 사람을 위한 책이다.

◈ 이 책에서 다루는 내용 ◈

이 책에서 주로 다룰 내용은 게임 엔진 기술과 구조(아키텍처)다. 즉, 상용 게임 엔진을 이루는 여러 하부 시스템의 바탕이 되는 이론뿐만 아니라 이를 구현하는 데 필요한 자료 구조, 알고리듬, 소프트웨어 인터페이스를 이야기하면서 이것들이 게임 엔진 안에서 하나로 동작하는지 볼 것이다. 게임 엔진과 게임의 경계는 다소 불분명하다. 이 책에서는 주로 게임 엔진 자체에 집중할 텐데, 여기에는 여러 가지 로우레벨 기반 시스템 및 렌더링 엔진, 충돌 시스템, 물리 시뮬레이션, 캐릭터 애니메이션 등이 포함되며, 개인적으로 게임플레이 기반 계층이라고 부르는 부분에 대한 심층적 논의도 포함된다.


◈ 이 책의 대상 독자 ◈

이 책은 입문서이지만 숙련된 프로그래머라도 많이 다뤄보지 않았을 부분에 대해 유용한 화두를 제시한다. 이전과 마찬가지로 풍부한 참고 문서와 인용문을 제공하기 때문에 특정 게임 개발 과정에 대해 깊게 공부하고 싶은 독자를 위한 단초가 될 수도 있다.
저자

제이슨 그레고리

1994년부터 소프트웨어 엔지니어로 일했고, 1999년부터는 게임 개발 소프트웨어 엔지니어로 근무했다. 샌디에이고에 있는 미드웨이 홈 엔터테인먼트(Midway Home Entertainment)에서 처음 게임 프로그래밍을 시작했으며, 하이드로 썬더 2(아케이드)의 툴, 엔진 기술, 게임 플레이 코드를 작업했다. 프리키 플라이어(Freaky Flyer)와 크랭크 더 위즐(Crank the Weasel)의 플레이스테이션 2/엑스박스용 애니메이션 시스템을 만들기도 했다. 2003년에는 일렉트로닉 아츠 로스앤젤레스(Electronic Arts Los Angeles)로 옮겨 ‘메달 오브 아너: 퍼시픽 어설트’ 프로젝트에서 엔진과 게임플레이 기술을 담당했고, ‘메달 오브 아너: 에어본’ 프로젝트에서는 리드 엔지니어로 근무했다. 현재 너티 독(Naughty Dog)에서 리드 프로그래머로 근무하며, 자신의 팀과 함께 여러 가지 흥미로운 플레이스테이션 5 게임을 만들고 있다. 또한 라스트 오브 어스 파트 2(The Last of US Part II)(플레이스테이션 4), 언차티드: 엘도라도의 보물(Uncharted: Drake's Fortune), 언차티드 2: 황금도와 사라진 함대(Uncharted 2: Among Thieves), 언차티드 3: 황금사막의 아틀란티스(Uncharted 3: Drake's Deception), 라스트 오브 어스(The Last of Us), 언차티드 4: 해적왕과 최후의 보물(Uncharted4: A Thief's End), 언차티드 잃어버린 유산(Uncharted: The Lost Legacy)의 엔진과 게임 플레이 소프트웨어도 만들었다. 남가주대학교(University of Southern California)에서 게임 기술에 관한 강의를 개발하고 가르치기도 했었다.

목차

1부. 기초

1장. 소개
1.1 게임 팀 구성
1.2 게임이란?
1.3 게임 엔진이란?
1.4 장르별 게임 엔진
1.5 현존하는 게임 엔진
1.6 런타임 게임 아키텍처
1.7 도구와 자원 파이프라인

2장. 도구
2.1 버전 컨트롤
2.2 컴파일러, 링커, IDE
2.3 프로파일링 툴
2.4 메모리 누수와 오염 감지
2.5 기타 툴

3장. 게임을 위한 소프트웨어 엔지니어링 기초
3.1 C++ 개념과 올바른 사용법
3.2 에러 감지와 처리
3.3 데이터, 코드, 메모리 레이아웃
3.4 컴퓨터 하드웨어 기초
3.5 메모리 구조

4장. 병렬성과 병행 프로그래밍
4.1 병행성과 병렬성에 대한 정의
4.2 묵시적 병렬성
4.3 명시적 병렬성
4.4 운영체제 기초
4.5 병행 프로그래밍 입문
4.6 스레드 동기화 기본 도구
4.7 락 기반 병행성의 문제점
4.8 병행성의 경험적 규칙
4.9 락-프리 병행성
4.10 SIMD/벡터 프로세싱
4.11 GPGPU 프로그래밍에 대한 소개

5장. 게임에 사용되는 3D 수학
5.1 3D 문제를 2D로 풀기
5.2 점과 벡터
5.3 행렬
5.4 사원수
5.5 각 회전 변환 표현 간 비교
5.6 기타 유용한 수학적 개념
5.7 난수 생성

2부. 로우레벨 엔진 시스템

6장. 엔진 지원 시스템
6.1 하부 시스템 시작과 종료
6.2 메모리 관리
6.3 컨테이너
6.4 문자열
6.5 게임 설정

7장. 리소스 시스템과 파일 시스템
7.1 파일 시스템
7.2 리소스 매니저

8장. 게임 루프와 실시간 시뮬레이션
8.1 렌더링 루프
8.2 게임 루프
8.3 게임 루프 구조의 형태
8.4 가상 타임라인
8.5 시간을 측정하는 방법과 처리하는 방법
8.6 멀티프로세서 게임 루프

9장. 휴먼 인터페이스 장치
9.1 휴먼 인터페이스 장치의 종류
9.2 HID와의 인터페이스
9.3 입력의 종류
9.4 출력의 종류
9.5 게임 엔진의 HID 시스템
9.6 휴먼 인터페이스 장치들의 실제

10장. 디버깅과 개발 도구
10.1 로그 기록과 추적
10.2 디버그 정보 그리기 기능
10.3 인게임 메뉴
10.4 인게임 콘솔
10.5 디버그 카메라와 게임 일시 정지
10.6 치트
10.7 스크린샷과 무비 캡처
10.8 인게임 프로파일링
10.9 인게임 메모리 상태와 누수 감지

3부. 그래픽, 모션, 사운드

11장. 렌더링 엔진
11.1 깊이 버퍼를 이용한 삼각형 래스터화의 기초
11.2 렌더링 파이프라인
11.3 고급 조명 기법과 전역 조명
11.4 시각 효과와 오버레이
11.5 더 읽을거리

12장. 애니메이션 시스템
12.1 캐릭터 애니메이션의 종류
12.2 뼈대
12.3 포즈
12.4 클립
12.5 스키닝과 행렬 팔레트 생성
12.6 애니메이션 블렌딩
12.7 후처리
12.8 압축 기법
12.9 애니메이션 파이프라인
12.10 액션 상태 기계
12.11 제약 조건

13장. 충돌과 강체 역학
13.1 정말 게임에 물리가 필요해?
13.2 충돌/물리 미들웨어
13.3 충돌 검출 시스템
13.4 강체 역학
13.5 물리 엔진과 게임 통합
13.6 고급 물리 기능

14장. 오디오
14.1 소리의 물리적 개념
14.2 소리의 수학
14.3 오디오 기술들
14.4 3D 오디오 렌더링
14.5 오디오 엔진 아키텍처
14.6 게임을 위한 오디오 기능들

4부. 게임플레이

15장. 게임플레이 시스템 기초
15.1 게임 월드의 구성
15.2 동적 구성 요소 구현: 게임 객체
15.3 데이터 주도 게임 엔진
15.4 게임 월드 에디터

16장. 런타임 게임플레이 기반 시스템
16.1 게임플레이 기반 시스템의 컴포넌트
16.2 런타임 객체 모델 구조
16.3 월드 덩어리 데이터 형식
16.4 게임 월드의 로딩과 스트리밍
16.5 객체 참조와 월드 질의
16.6 실시간 게임 객체 업데이트
16.7 병행성을 활용한 게임 객체 업데이트
16.8 이벤트와 메시지 전달
16.9 스크립트
16.10 하이레벨 게임 흐름

5부. 결론

17장. 추가 사항
17.1 다루지 않았던 엔진 시스템
17.2 게임플레이 시스템

출판사 서평

이책에서다루는내용

이책에서주로다룰내용은게임엔진기술과구조(아키텍처)다.즉,상용게임엔진을이루는여러하부시스템의바탕이되는이론뿐만아니라이를구현하는데필요한자료구조,알고리듬,소프트웨어인터페이스를이야기하면서이것들이게임엔진안에서하나로동작하는지볼것이다.게임엔진과게임의경계는다소불분명하다.이책에서는주로게임엔진자체에집중할텐데,여기에는여러가지로우레벨기반시스템및렌더링엔진,충돌시스템,물리시뮬레이션,캐릭터애니메이션등이포함되며,개인적으로게임플레이기반계층이라고부르는부분에대한심층적논의도포함된다.

이책의대상독자

이책은입문서이지만숙련된프로그래머라도많이다뤄보지않았을부분에대해유용한화두를제시한다.이전과마찬가지로풍부한참고문서와인용문을제공하기때문에특정게임개발과정에대해깊게공부하고싶은독자를위한단초가될수도있다.

지은이의말

오늘날의게임콘솔,모바일기기,개인용컴퓨터의핵심인컴퓨터하드웨어는병렬성(parallelism)을중요하게활용한다.이기기들의CPU와GPU의깊은안쪽에서는여러개의기능단위(funtionalunit)가동시에작동하며,분할정복(divide-and-conquer)기법을통해고성능연산을수행한다.병렬하드웨어가기존의단일스레드프로그램을빨리돌릴수있게해주지만,오늘날의연산플랫폼에서이미널리쓰이는하드웨어병렬성의이점을활용하려면프로그래머가병행소프트웨어를제대로짜야한다.

게임엔진아키텍처의초판에서는게임디자인의관점에서만병렬성과병행성을살짝언급했었다.주제에걸맞은심도깊은취급을하지못한것이다.3판에서는병행성과병렬성에관한완전히새로운장을추가함으로써비로소제대로다루게됐다.또한8장과16장은보강을통해병행프로그래밍기법들이게임엔진하부시스템과게임객체모델업데이트에어떻게적용되는지,그리고어떻게범용목적잡(job)시스템이게임엔진내병행성의잠재력을이끌어낼수있는지를알아볼것이다.

이미말했지만좋은게임프로그래머라면C++(그리고기타업계에서자주쓰이는여러언어들)에대한단단한실무지식을지녀야한다.프로그래머의고차원언어에대한지식은기반이되는소프트웨어와하드웨어에대한이해에바탕을둬야한다고생각한다.따라서3장을확장해컴퓨터하드웨어의기본지식,어셈블리언어,그리고운영체제커널에대해다뤘다.

게임엔진아키텍처3판에서는이전판에서다뤘던여러주제를보강했다.로컬및전역컴파일러최적화에대한내용이추가됐다.좀더폭넓은C++언어표준들이추가됐다.메모리캐싱과캐시일관성에관한내용은확장했다.애니메이션에관한장은말끔히다듬었다.그리고2판에서와마찬가지로저자와여러열성적인독자들에의해발견된오탈자를수정했다.게임엔진프로그래밍은상상하기힘들정도로넓고깊다.책한권에서전부다룰수없다.따라서이책의목적은여러분의주의를환기시키고더깊은지식을찾아떠날수있는발판이되는것이다.이책이흥미롭고다채로운게임엔진아키텍처의세계를탐험할때도움이되기를희망한다.

옮긴이의말

게임엔진아키텍처가최초로번역돼나온지벌써10년입니다.그동안여러가지일이있었고세상이크게변했습니다.콘솔세대가두번바뀌었고사람말을할줄아는AI가등장했습니다.3판을번역하며초판의내용을돌아봤는데세월을타촌스럽게느껴지는부분도다소있었지만(예를들면플레이스테이션3을최신이라고하는등)대부분은지금그대로적용할수있는것들이라놀랐습니다.분명많은것이변했는데왜그럴까요?핵심개념은크게변하지않은채응용법이더발전하고복잡해졌기때문이아닌가합니다.10년전의저는10년차게임프로그래머였는데20년차인지금과비교해볼때하는일에있어괄목할만한변화는없는것과비슷한맥락입니다.게임개발을위해배울지식과익혀야할기술은많고꾸준히나옵니다.그러나상당수는책에담으면너무빨리구닥다리가돼버리는것들입니다.게임엔진아키텍처는이해해야할핵심개념과바로쓸수있는지식의경계를잘타고있기에세월의영향을크게받지않은것같습니다.

3판은많은내용이추가됐습니다.병행프로그래밍과오디오두장이완전히새로들어갔습니다.병행프로그래밍은어렵고까다로운주제이지만따로공부하기쉽지않기때문에이책의내용정도면훌륭한입문자료가될것같습니다.오디오는평소에접하기힘든내용이라호기심을자극하는경험이될수있을것입니다.경우에따라서는지루한시간이될수도있겠지만사람에따라다르겠죠.번역하는입장에서는매우힘들었습니다만다이해하지않아도한번쯤보시면재미있습니다.그외기존부분에서시대에맞게갱신한내용들도많습니다.

초판번역후너무힘들었던기억덕에다시는번역을하지않으려했는데10년은많은것을잊게해주는시간인듯합니다.번역을제의받았을때거절하지못했습니다.그러나다음판이나오게된다면아마AI가번역하지않을까요?초판도두꺼웠는데3판은훨씬더두꺼워졌습니다.훌륭한선생님의강의를더많이배울수있어서다행입니다.이책을통해훌륭한게임이더많이나올수있길바랍니다.