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

◈ 이 책에서 다루는 내용 ◈

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


◈ 이 책의 대상 독자 ◈

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

저자

제이슨그레고리

저자:제이슨그레고리(JasonGregory)
1999년3월부터게임개발소프트웨어엔지니어로일했고,전문적인소프트웨어엔지니어로서는1994년부터일해왔다.샌디에이고에있는미드웨이홈엔터테인먼트(MidwayHomeEntertainment)에서처음게임프로그래밍을시작했다.프리키플라이어(FreakyFlyer)와크랭크더위즐(CranktheWeasel)의플레이스테이션2/엑스박스용애니메이션시스템을만들기도했다.2003년에는일렉트로닉아츠로스앤젤레스(ElectronicArtsLosAngeles)로옮겨'메달오브아너:퍼시픽어썰트'프로젝트에서엔진과게임플레이기술을담당했고,'메달오브아너:에어본'프로젝트에서는리드엔지니어로근무했다.너티독(NaughtyDog)에서제너럴리스트게임프로그래머로일하며,'언차티드:엘도라도의보물','언차티드2:황금도와사라진함대','언차티드3:황금사막의아틀란티스'시리즈의엔진과게임플레이소프트웨어를개발했고,지금은너티독의리드프로그래머로서'TheLastofUs'를개발중이다.남가주대(UniversityofSouthernCalifornia)에서게임기술에관한강의도맡고있다.

역자:박상희
서울대학교컴퓨터공학과를졸업한후게임클라이언트프로그래머(2003년~현재)로일하고있다.아스가르드(넥슨),리니지2(엔씨소프트),오버히트(넷게임즈,현넥슨게임즈)등알려진프로젝트에참여했으며,그외몇몇알려지지못한프로젝트에서도일했다.현재출시준비중인PC/콘솔게임을만드는중이다.

목차

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.1C++개념과올바른사용법
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.10SIMD/벡터프로세싱
4.11GPGPU프로그래밍에대한소개

5장.게임에사용되는3D수학
5.13D문제를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.2HID와의인터페이스
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.43D오디오렌더링
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판은훨씬더두꺼워졌습니다.훌륭한선생님의강의를더많이배울수있어서다행입니다.이책을통해훌륭한게임이더많이나올수있길바랍니다.