Top

게임 엔진 아키텍처 [게임 프로그래머가 꼭 알아야 할 게임 엔진 이론과 실무]

  • 원서명Game Engine Architecture (ISBN 9781568814131)
  • 지은이제이슨 그레고리
  • 옮긴이박상희
  • ISBN : 9788960774155
  • 50,000원
  • 2013년 03월 29일 펴냄
  • 페이퍼백 | 944쪽 | 188*250mm
  • 시리즈 : 게임 개발 프로그래밍

판매처

개정판

책 소개

2014년 대한민국학술원 우수학술도서 자연과학분야 선정도서

오늘날 가장 복잡한 소프트웨어에 속하는 게임 엔진에 대한 전체적인 그림을 그릴 수 있는 책이다. 피상적인 지식이나 추상적인 이론보다 실제로 게임 개발에 참여하게 되면 맞닥뜨릴 현실적인 내용과 경험을 제공한다. 게임 프로그래머가 되고자 하는 학생이나 갓 입사한 새내기 프로그래머가 꼭 읽어야 할 게임 엔진에 관한 조감도이자 바이블이며, 게임 개발 경력이 있는 개발자도 게임 엔진에 대한 이해의 폭을 넓힐 수 있게 도와 준다.


[ 소개 ]

이 책은 게임 엔진 소프트웨어 개발에 관한 이론과 실무 활용을 동시에 다루면서 다양한 주제를 상세히 설명한다. 책에 나오는 개념과 기법은 일렉트로닉 아츠와 너티 독 등의 개임 개발 스튜디오의 현장에서 실제로 사용되는 것들이다. 사용 예제들은 대부분 구체적인 기술에 근거하지만, 그에 대한 논의는 특정 엔진이나 API에 국한되지 않는다. 또한 수많은 참고 자료와 인용을 통해 게임 개발의 특정 분야를 더 공부하고 싶은 독자들의 길잡이가 되도록 했다.

대학 수준의 게임 프로그래밍 교재로 쓰였지만, 아마추어 소프트웨어 엔지니어나 게임에 흥미가 있는 사람, 독학하는 게임 프로그래머, 현업 게임업계 종사자도 도움을 얻을 수 있다. 게임 개발을 시작한 지 얼마 안 되는 엔지니어는 이 책을 통해 게임 개발 기술들과 엔진 아키텍처에 대한 탄탄한 이해를 얻을 수 있고, 게임 개발의 특정 분야에서 잔뼈가 굵은 개발자들도 이 책을 읽음으로써 큰 그림을 이해할 수 있다.


[ 이 책에서 다루는 내용 ]

■ 게임에 사용되는 대규모 C++ 소프트웨어 아키텍처
■ 게임 프로그래밍에 쓰이는 수학
■ 게임 개발에 쓰이는 디버깅, 소스 컨트롤, 프로파일링 도구
■ 기반 시스템 및 렌더링, 충돌, 물리, 캐릭터 애니메이션, 게임 월드 객체 모델 등 여러 엔진 하부 시스템
■ 멀티플랫폼 게임 엔진
■ 멀티프로세서 환경에서의 게임 프로그래밍
■ 툴 파이프라인과 게임 자원 데이터베이스


[ 추천의 글 ]

비디오 게임은 원래 하드웨어로만 만들던 것이 시초지만, 마이크로프로세서 기술이 발전하면서 그 양상이 완전히 뒤바뀌었다. 오늘날 비디오 게임은 PC나 전용 게임 콘솔로 구동하며, 그 위에서 돌아가는 소프트웨어를 통해 엄청나게 다양한 경험을 제공한다. 초창기 원시적 형태의 게임이 나온 지 벌써 50년이나 흘렀지만 많은 사람은 아직 게임 산업이 미성숙 단계에 있다고 생각한다. 아직 만개한 산업은 아닐지라도 그 속을 들여다보면 게임 산업은 급속도로 발전 중이라는 것을 금방 알 수 있다. 오늘날의 비디오 게임은 다양한 계층의 사람들이 즐기는 수십억 달러 규모의 산업이 되었다.

비디오 게임은 그 형태도 다양하고 규모도 천차만별인데, 솔리테어(solitare)부터 MMO RPG까지 수많은 범주 혹은 ‘장르’가 있으며 마이크로칩이 달린 기계면 어디에서건 게임을 즐길 수 있다고 해도 과언이 아니다. 오늘날에는 PC부터 스마트폰, 전용 게임 콘솔(휴대용과 TV에 연결해 사용하는 기기 모두)까지 다양한 방식으로 게임을 즐길 수 있다. 가정용 전용 게임 콘솔은 최신 게임 기술을 대표하는 역할을 맡아 왔고, 이런 콘솔 기기들이 개발되는 반복된 주기를 콘솔의 ‘세대’라고 부르게 됐다. 가장 최근 콘솔 세대를 대표하는 기기로는 마이크로소프트의 엑스박스 360과 소니의 플레이스테이션 3를 들지만, 유구한 역사를 자랑하는 PC 또한 결코 간과해서는 안 되는 존재이며 선풍적인 인기를 끈 닌텐도 Wii도 새로운 경향이 등장했음을 나타내는 존재다.

그렇지 않아도 복잡한 상용 비디오 게임계에 최근 폭발적으로 증가한 다운로드 게임 및 캐주얼 게임이 더해져 더욱 다양해졌다. 하지만 대규모 게임들은 여전히 주요한 품목이다. 정교한 플랫폼들의 막강한 계산 능력을 활용할 수 있게 되면서 요즘에는 소프트웨어의 정교함도 크게 향상됐다. 이런 첨단 소프트웨어를 개발하는 데는 사람이 필요하고, 따라서 자연스럽게 개발 팀의 크기도 커지게 됐다(당연히 개발비도 증가했다). 산업이 완숙해 가면서 자연스레 제품을 더 잘 만들고 효율적으로 만들 방법을 찾게 되는데, 엄청나게 증가한 복잡도에 대처하기 위해 게임 개발 팀들은 재사용 소프트웨어나 미들웨어 등의 힘을 빌리는 쪽을 택했다.

헤아릴 수 없이 다양한 스타일의 게임이 여러 플랫폼들에서 존재하기 때문에 모든 상황에서 이상적으로 쓸 수 있는 개발 소프트웨어는 없다. 하지만 일부 패턴이 발전해 왔고, 잠재적인 해법들도 무수히 많다. 오늘날에는 원하는 프로젝트의 요구 사항에 맞춰 올바른 해법을 고르는 것이 중요하다. 좀 더 깊이 들어가면 개발 팀은 프로젝트의 서로 다른 모든 측면을 검토하고 어떻게 함께 어우러지는지 따져봐야 한다. 새 게임 디자인에 완벽하게 꼭 맞는 단 한 가지 소프트웨어 패키지를 찾기란 굉장히 어렵다.

지금이야 게임 산업의 베테랑이 됐지만 예전 우리들의 모습은 미지의 영토를 개척하는 탐험가 같았다. 우리 세대에는 컴퓨터 과학 학위를 갖고 있던 사람이 드물었는데(이 추천의 글을 쓰는 맷 화이팅은 항공 엔지니어링을 전공했고, 제이슨 그레고리는 시스템 디자인 공학을 전공했다), 요즘에는 비디오 게임 강좌를 개설하거나 학위를 마련하는 대학이 늘고 있다. 오늘날의 학생들과 개발자들은 게임 개발에 대해 견실한 정보를 얻을 곳이 필요하다. 순수 하이엔드 그래픽스에 관해서는 연구 결과부터 실용적인 지식까지 정보를 얻을 만한 곳이 많다. 하지만 이런 원천 정보들은 게임 개발에 직접 적용하기 힘들거나 실제 쓰일 만한 구현이 없는 경우가 허다하다. 그 외의 게임 개발에 대해서는 소위 입문자용 책들이 있기는 하지만, 이것들은 세부 사항에 대해서는 얼버무리기 일쑤고 마치 모든 것을 처음부터 자기들이 처음 만든 양 설쳐대지만 정작 별 쓸모없거나 아예 틀린 내용도 많다. 그 외에는 하이엔드 전문 분야에 관한 책들이 있는데, 물리, 충돌, AI 등 특정 세부 분야를 파고든다. 하지만 지나치게 지루한 경우가 많고 또 모든 독자들이 이해할 만큼 쉽지 않거나 전체적인 완성을 이루기에는 너무 지엽적인 경우도 많다. 상당수는 한정적인 기술에 너무 직접적으로 기대고 있어 하드웨어와 소프트웨어가 변함에 따라 금방 퇴물이 되곤 한다.

인터넷도 빼 놓을 수 없는 정보원으로, 지식 수집에 있어 훌륭한 보조 도구가 될 수 있다. 하지만 링크가 깨져 찾을 수 없는 경우도 많고 부정확한 데이터들이나 품질이 뒤죽박죽인(때로는 형편없는) 경우도 많아 찾고 싶은 게 뭔지 정확히 알고 있지 않으면 도움이 되기 힘들다.

이런 상황을 배경으로 제이슨 그레고리(Jason Gregory)가 등장한다. 제이슨은 너티 독(Naughty Dog, 전 세계에서 손꼽히는 게임 스튜디오 중 하나다)에서 근무 중인 베테랑 게임 개발자다. USC에서 게임 프로그래밍 강의를 할 때 비디오 게임 아키텍처의 근간을 다룬 교과서가 없어 어려움을 겪은 제이슨은 직접 총대를 메고 책을 쓸 결심을 했다. 제이슨 본인을 제외한 나머지 모두에게 정말 다행스런 일이라 하지 않을 수 없다.

마침내 여기에 제이슨의 노력이 담긴 책이 나왔는데, 실제 출시된 게임 프로젝트들에서 쓰였고 실무에 바로 적용할 수 있는 지식들을 한데 모아 전체적인 게임 개발의 큰 그림을 그릴 수 있게 했다. 풍부한 경험을 바탕으로 아이디어와 기법뿐 아니라 실제 코드 샘플과 구현 예시를 들어 어떻게 조각들이 합쳐져 진짜 게임을 만드는지 보여준다. 또한 참고 자료와 인용을 통해 특정 과정에 대해 더 심도 있는 공부를 원하는 독자들이 쉽게 정보를 얻을 수 있게 했다. 개념과 기법들은 실제로 게임을 만드는 데 사용되는 것들이며, 예제들은 해당 기법에 기반을 두기는 했지만 특정한 엔진이나 API를 넘어서 활용될 수 있는 것들이다.

우리가 처음 일을 시작했을 때 원했던 것이 바로 이런 책이었으며, 지금 시작하는 초보자뿐 아니라 큰 그림을 그리고 싶은 경험자들에게 똑같이 도움이 될 수 있으리라 생각한다.

- 제프 랜더(Jeff Lander), 매튜 화이팅(Matthew Whiting)

저자/역자 소개

[ 저자 서문 ]

게임 엔진 아키텍처를 향한 여정을 시작한 여러분을 환영한다. 이 책에서 이루고자 하는 목표는 통상적으로 상용 게임 엔진을 이루는 모든 구성 요소를 두루 살펴보는 것이다. 게임 프로그래밍은 굉장히 방대한 주제이므로 살펴봐야 할 것이 한두 가지가 아니다. 그렇지만 이 책을 읽고 나면 책에 나오는 각각의 엔지니어링 분야에 대해 이론뿐 아니라 통례까지 확실하게 이해할 수 있을 거라고 생각한다. 다 읽고 나면 여러분은 앞으로 접하게 될 흥미로우면서 동시에 일평생 공부해야 할 여정의 또 다른 출발점에 서게 될 것이다. 세상에는 게임에 쓰이는 온갖 기술들에 대한 정보가 가득하며, 이 책의 역할은 기반을 다지는 동시에 더 깊은 공부를 위한 발판이 되는 것이다.

이 책에서 주로 다룰 내용은 게임 엔진 기술과 구조(아키텍처)다. 즉, 상용 게임 엔진을 이루는 여러 하부 시스템의 바탕이 되는 이론뿐 아니라 그것들을 구현하는 데 필요한 자료 구조, 알고리즘, 소프트웨어 인터페이스를 모두 다룬다. 게임 엔진과 게임의 경계는 다소 불분명하다. 이 책에서는 주로 게임 엔진 자체에 집중할 텐데, 여기에는 여러 가지 로우레벨 기반 시스템 및 렌더링 엔진, 충돌 시스템, 물리 시뮬레이션, 캐릭터 애니메이션 등이 포함되며, 마지막으로 내가 개인적으로 게임플레이 기반 계층이라 부르는 부분에 대한 심층적 논의도 포함된다. 이 계층은 게임의 객체 모델과 월드 에디터, 이벤트 시스템, 스크립트 시스템을 아우른다. 뿐만 아니라 게임플레이 프로그래밍의 여러 측면에 대해서도 간단히 다룰 텐데, 여기에는 플레이어 메카닉, 카메라, AI 등이 포함된다. 하지만 어쩔 수 없이 이런 분야에 대해서는 게임플레이 시스템과 게임 엔진 사이의 인터페이스에 관련된 부분만으로 한정한다.

이 책을 쓴 것은 중급 게임 프로그래밍에 관한 두세 학기 분량의 대학 교재가 필요했기 때문이다. 그렇긴 해도 아마추어 소프트웨어 엔지니어를 비롯해 취미로 게임을 공부하거나 혼자서 게임 프로그래밍을 배우는 사람, 그리고 이미 게임 업계에서 일하는 사람이 읽어도 유용한 내용이 많다. 아직 배울 것이 많은 엔지니어는 이 책을 통해 게임에 쓰이는 수학, 엔진 구조, 게임 기법 등을 분명히 이해할 수 있게 될 것이다. 또한 특정 분야에 깊은 경력을 쌓은 엔지니어도 이 책을 통해 큰 그림을 더 잘 이해하게 될 수도 있다.

이 책을 가장 잘 이해하기 위해서는 기본 객체지향 프로그래밍 개념에 대해 실용적인 지식을 갖추고 적어도 약간의 C++ 프로그래밍 경험이 있어야 한다. 근래 게임에도 새롭고 신기한 여러 언어들이 쓰이기 시작했지만, 상용 레벨의 3D 게임 엔진을 만드는 데는 거의 대부분 C나 C++를 쓴다. 따라서 게임 프로그래밍을 진지하게 할 요량이면 반드시 C++를 알아야 한다. 3장에서 기본적인 객체지향 프로그래밍에 대해 되짚어 볼 기회가 있을 것이고, 책을 읽어 가면서 몇 가지 C++ 트릭을 알게 되겠지만 C++를 제대로 공부하기 위해서는 참고 문헌의 [39], [31], [32]를 읽어 보는 것이 최선이다. C++에 대한 기억이 가물거린다면 책을 읽어 가면서 위의 책들이나 그와 비슷한 책을 읽어 기억을 되살리기를 권장한다. C++를 전혀 써보지 않은 독자라면 이 책을 본격적으로 시작하기 전에 [39]의 앞부분을 조금 읽어 보거나 온라인 C++ 튜토리얼이라도 몇 번 살펴보기 바란다.

컴퓨터 프로그래밍을 배우는 가장 좋은 방법은 직접 코드를 짜 보는 것이다. 이 책을 읽어 가면서 흥미가 동하는 주제를 골라 그에 대한 프로젝트를 직접 진행해보기 바란다. 캐릭터 애니메이션에 흥미가 있는 독자라면 당장 오거(Ogre)3D를 설치해 스킨 애니메이션 데모를 살펴보자. 그런 후 오거를 사용해 이 책에서 설명한 애니메이션 블렌딩 기법을 몇 가지 구현해 보는 것도 좋다. 다음 단계로 조이패드를 조작해 애니메이션하는 캐릭터를 이리저리 돌아다니게 만드는 기능을 구현할 수도 있다. 일단 간단하더라도 제대로 돌아가는 것을 구현하고 나면 그 위에 다른 것을 얹어 확장하면 된다. 이것저것 해본 후에 다른 게임 기법으로 옮겨 앞의 과정을 또 반복하면 된다. 프로젝트의 주제는 딱히 중요하지 않다. 핵심은 그냥 읽고 넘어가지 말고 직접 게임 프로그래밍을 해보는 것이다.

게임 기술은 활발히 살아 움직이는 분야이므로 책 한 권으로 모든 것을 담기에는 턱없이 부족하다. 따라서 이 책 원서의 웹사이트 http://gameenginebook.com에 별도의 정보나 오탈자 등의 정오표, 업데이트, 샘플 코드, 프로젝트 아이디어를 간간히 올려놓을 예정이다.


[ 저자 소개 ]

제이슨 그레고리(Jason Gregory)
1999년 3월부터 게임 개발 소프트웨어 엔지니어로 일했고, 전문적인 소프트웨어 엔지니어로서는 1994년부터 일해 왔다. 샌디에이고에 있는 미드웨이 홈 엔터테인먼트(Midway Home Entertainment)에서 처음 게임 프로그래밍을 시작했다. 프리키 플라이어(Freaky Flyer)와 크랭크 더 위즐(Crank the Weasel)의 플레이스테이션 2/엑스박스 용 애니메이션 시스템을 만들기도 했다. 2003년에는 일렉트로닉 아츠 로스앤젤레스(Electronic Arts Los Angeles)로 옮겨 ‘메달 오브 아너: 퍼시픽 어썰트’ 프로젝트에서 엔진과 게임플레이 기술을 담당했고, ‘메달 오브 아너: 에어본’ 프로젝트에서는 리드 엔지니어로 근무했다. 너티 독(Naughty Dog)에서 제너럴리스트 게임 프로그래머로 일하며, ‘언차티드: 엘도라도의 보물’, ‘언차티드 2: 황금도와 사라진 함대’, ‘언차티드 3: 황금사막의 아틀란티스’ 시리즈의 엔진과 게임플레이 소프트웨어를 개발했고, 지금은 너티 독의 리드프로그래머로서 ‘The Last of Us’를 개발 중이다. 남가주대(University of Southern California)에서 게임 기술에 관한 강의도 맡고 있다.


[ 옮긴이의 말 ]

게임 엔진은 기반 기술이나 역할이 상이한 코드가 모여 이뤄집니다. 예를 들면 운영체제나 하드웨어를 제어하는 코드와 플레이어의 경험을 구현하는 코드는 근본적으로 생각의 개념이 다릅니다. 또한 툴까지 포함한다면 그 범위가 더욱 넓습니다. 따라서 어떤 한 부분에서 오래 일을 함으로써 많은 경험을 쌓았더라도 그것이 곧 전체적인 게임 엔진에 대한 이해를 뜻하지는 않습니다. 그렇게 되려면 다양한 분야에서 일을 하거나 따로 부지런히 공부하는 수밖에 없습니다.

지금껏 저를 포함한 대다수 게임 프로그래머들이 공부를 할 때는 코드를 직접 보거나 특정한 주제에 대해 인터넷을 뒤지고 책을 읽는 수밖에 없었습니다. C++ 프로그래밍, 운영체제, 렌더링 등 여러 가지 분야의 책들이 있었지만, 기이하게도 게임 엔진이라는 틀 안에서 한데 모아 놓은 책은 없었습니다. 그런 의미에서 이 책은 최초이자 고유한 게임 엔진 서적이라고 하겠습니다.

사실 게임 프로그래밍에 관해서도 이런 책이 나올 때가 됐습니다. 아니, 오히려 늦었다고 할 수도 있습니다. 이 책에 있는 내용 중 새로운 것은 없습니다. 다른 책을 통해 더 심도 있게 배울 수 있는 부분도 있고, 인터넷을 통해 최신 정보를 얻을 수 있는 부분도 있습니다. 그렇지만 전체적으로 정보를 정제하고 선별해 풀어내는 일은 그리 쉽지 않습니다. 지금껏 비슷한 책이 없었다는 사실로 미루어 이 일이 얼마나 힘든지를 간접적으로 증명하고 있습니다. 저자의 이력을 보면 게임 개발로 잔뼈가 굵은 베테랑인 것을 알 수 있는데, 책의 많은 부분에서 실제로 해본 사람만이 알 수 있는 세부적이고 실질적인 지식을 확인할 수 있습니다. 또한 직접 교단에서 가르치며 수집한 자료가 바탕이 되어 그런지 굉장히 다양하고 충실한 참고 자료를 함께 수록했습니다. 사실 개발 경력이 오래 되더라도 특정 분야 한두 개를 제외하고는 깊은 지식을 얻기는 쉽지 않은데, 이토록 다양한 분야를 아우를 수 있는 점은 존경스럽기까지 합니다.

처음에 멋모르고 이토록 방대한 책을 번역한다고 했을 때는 시간이 이렇게 오래 걸릴 줄 몰랐습니다. 나름 생업에 종사하는지라 밤 시간을 할애해 번역을 했는데, 그 과정에서 여러 복잡다단한 감정을 느꼈습니다. 이 일을 안 했으면 여름 밤에 자전거를 타러 나가거나 BBC 자연 다큐 블루레이를 감상하고 게임도 할 수 있었을 텐데 하는 후회도 들었고, 이렇게 힘들게 번역해도 욕만 먹는 건 아닐까 하는 두려움도 있었습니다. 왜 문장은 고치고 또 고쳐도 다음에 보면 어색한지…… 그래도 끝나고 나니 많은 것을 배운 것 같습니다. 특히 실질적인 지식 외에도 스스로의 부족한 점을 깨달을 수 있었던 기회였습니다. 제가 힘들다고 투덜대는 건 저자인 제이슨 그레고리의 노력에 비하면 아무것도 아닙니다. 이 사람도 가정이 있고 일하면서 책을 썼거든요. 원래는 힘들었다는 하소연을 더 길게 쓸까 했었는데 부끄러워 이만 줄입니다.

번역을 하면서 늘 생각해 왔던 점은 새로 입사한 신입들에게 읽히면 좋겠다는 것이었습니다. 실제로도 원서를 두 권 사다가 팀에 배치해 놓기도 했습니다(당연히 회사 돈으로). 또 좀 일찍 읽었으면 더 큰 도움이 됐을 텐데 하는 아쉬움도 있습니다. 이런 두꺼운 책을 읽으면서 한두 가지 새로 배우지 않았다고 말하면 거짓말이겠죠. 솔직히 말하면 제 자신이 개발자로서 이 책에서 너무나 많은 것을 배웠기에 이 책을 단지 학생용 교재로 소개하자니 부끄러운 마음이 들기도 합니다.

컴퓨터 관련 번역을 할 때 제일 걸리는 건 용어일 겁니다. 딱히 체계적으로 정립된 우리말 용어가 없습니다. 수학 용어를 번역할 때는 국가지정 수리과학연구정보센터(http://mathnet.kaist.ac.kr/mathnet/math_list.php)를 많이 참조했고 물리 용어는 많이 참조하지는 않았지만 한국물리학회가 발간한 ‘물리학 용어집’이 있는데, 이 분야는 그런 것이 없습니다. 현업의 엔지니어들은 우리말 용어를 쓰거나 번역을 시도하는 데 별로 흥미가 없는 것 같고, 학계에서도 딱히 시도를 하고 있는 것 같지는 않습니다. “버퍼 오버런이 나서 디버거로 덤프를 떴는데 콜 스택이 보이지 않아” 같은 대화는 억지로 지어낸 말이 아니라 일상적으로 들을 수 있는 말입니다. 하지만 제가 방금 나온 외래어들을 소신껏 우리말로 고쳐 쓴다면 이 책은 팔리지 않겠죠. 한 가지 위안을 삼자면 영어를 모국어로 사용하는 사람이라도 기반 지식이 없는 사람이 저 문장을 봤을 때 느끼는 심리적 거리감은 한국 사람과 별반 차이가 없을 것 같다는 점입니다. 따라서 일상적으로 정착된 외래어는 통상적으로 쓰이는 대로 그대로 썼고, 문맥상 우리말로 바꿔도 지장이 없는 부분은 최대한 자연스럽게 고쳐 썼음을 밝힙니다. 또한 물리 용어의 경우 앞서 말한 ‘물리학 용어집’의 용어들이 90년대에 중고등학교를 나온 저희 세대에게는 매우 어색하기 때문에 어쩔 수 없이 예전에 통용되던 한자식 용어를 그대로 썼음을 양해 바랍니다. 즉, coefficient of static friction는 멈춤 쓸림 곁수가 아니라 정지마찰계수라고 옮겼습니다.


[ 옮긴이 소개 ]

박상희
서울대학교 컴퓨터공학과를 졸업한 후 직업 프로그래머로 일하고 있다. 줄곧 게임 클라이언트를 만져 왔으며, 별다른 이변이 없는 한 앞으로도 게임을 만들 예정이다. 게임을 좋아하고 그 외에 영화 보기, 역사책 읽기, 자전거 타기도 좋아한다.

목차

목차
  • 1부 기초
  • 1장 소개
    • 1.1 게임 팀 구성
    • 1.2 게임이란?
    • 1.3 게임 엔진이란?
    • 1.4 장르별 게임 엔진
    • 1.5 현존하는 게임 엔진
    • 1.6 런타임 게임 아키텍처
    • 1.7 툴(도구)과 자원 파이프라인
  • 2장 도구
    • 2.1 버전 컨트롤
    • 2.2 마이크로소프트 비주얼 스튜디오
    • 2.3 프로파일링 툴
    • 2.4 메모리 누수와 오염 감지
    • 2.5 기타 툴
  • 3장 게임을 위한 소프트웨어 엔지니어링 기초
    • 3.1 C++ 개념과 올바른 사용법
    • 3.2 C/C++에서 데이터와 코드, 메모리
    • 3.3 에러 감지와 처리
  • 4장 게임에 사용되는 3D 수학
    • 4.1 3D 문제를 2D로 풀기
    • 4.2 점과 벡터
    • 4.3 행렬
    • 4.4 사원수
    • 4.5 각 회전 변환 표현 간 비교
    • 4.6 기타 유용한 수학적 개념
    • 4.7 하드웨어 가속 SIMD 연산
    • 4.8 난수 생성
  • 2부 로우레벨 엔진 시스템
  • 5장 엔진 지원 시스템
    • 5.1 하부 시스템 시작과 종료
    • 5.2 메모리 관리
    • 5.3 컨테이너
    • 5.4 문자열
    • 5.5 게임 설정
  • 6장 리소스 시스템과 파일 시스템
    • 6.1 파일 시스템
    • 6.2 리소스 매니저
  • 7장 게임 루프와 리얼타임 시스템
    • 7.1 렌더링 루프
    • 7.2 게임 루프
    • 7.3 게임 루프 구조의 형태
    • 7.4 가상 타임라인
    • 7.5 시간 측정하는 방법과 처리하는 방법
    • 7.6 멀티프로세서 게임 루프
    • 7.7 네트워크 멀티플레이어 게임 루프
  • 8장 휴먼 인터페이스 장치
    • 8.1 휴먼 인터페이스 장치의 종류
    • 8.2 HID와의 인터페이스
    • 8.3 입력의 종류
    • 8.4 출력의 종류
    • 8.5 게임 엔진의 HID 시스템
    • 8.6 휴먼 인터페이스 장치들의 실제
  • 9장 디버깅과 개발 도구
    • 9.1 로그 기록과 추적
    • 9.2 디버그 정보 그리기 기능
    • 9.3 인게임 메뉴
    • 9.4 인게임 콘솔
    • 9.5 디버그 카메라와 게임 일시 정지
    • 9.6 치트
    • 9.7 스크린샷과 무비 캡처
    • 9.8 인게임 프로파일링
    • 9.9 인게임 메모리 상태와 누수 감지
  • 3부 그래픽과 모션
  • 10장 렌더링 엔진
    • 10.1 깊이 버퍼를 이용한 삼각형 래스터화의 기초
    • 10.2 렌더링 파이프라인
    • 10.3 고급 조명 기법과 전역 조명
    • 10.4 시각 효과와 오버레이
    • 10.5 더 읽을거리
  • 11장 애니메이션 시스템
    • 11.1 캐릭터 애니메이션의 종류
    • 11.2 뼈대
    • 11.3 포즈
    • 11.4 클립
    • 11.5 스키닝과 행렬 팔레트 생성
    • 11.6 애니메이션 블렌딩
    • 11.7 후처리
    • 11.8 압축 기법
    • 11.9 애니메이션 시스템 아키텍처
    • 11.10 애니메이션 파이프라인
    • 11.11 액션 상태 기계
    • 11.12 애니메이션 컨트롤러
  • 12장 충돌과 강체 역학
    • 12.1 정말 게임에 물리가 필요해?
    • 12.2 충돌/물리 미들웨어
    • 12.3 충돌 검출 시스템
    • 12.4 강체 역학
    • 12.5 물리 엔진과 게임 통합
    • 12.6 앞으로의 기술: 고급 물리 기능
  • 4부 게임플레이
  • 13장 게임플레이 시스템 기초
    • 13.1 게임 월드의 구성
    • 13.2 동적 구성 요소 구현: 게임 객체
    • 13.3 데이터 주도 게임 엔진
    • 13.4 게임 월드 에디터
  • 14장 런타임 게임플레이 기반 시스템
    • 14.1 게임플레이 기반 시스템의 컴포넌트
    • 14.2 런타임 객체 모델 구조
    • 14.3 월드 덩어리 데이터 형식
    • 14.4 게임 월드의 로딩과 스트리밍
    • 14.5 객체 참조와 월드 질의
    • 14.6 실시간 게임 객체 업데이트
    • 14.7 이벤트와 메시지 전달
    • 14.8 스크립트
    • 14.9 하이레벨 게임 흐름
  • 5부 결론
  • 15장 추가 사항
    • 15.1 다루지 않았던 엔진 시스템
    • 15.2 게임플레이 시스템

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

[ p52 그림 1.11 캡션 ]
런타임 게 엔진 → 런타임 게 엔진

[ p53 2행 ]
선형 의존 → 순환 의존

[ p61 11행 ]
보일 가능성이 있는 집합 PSV → 보일 가능성이 있는 집합 PVS

[ p63 1.6.9절 1~2번째 문장 ]
실시간 시스템인 특성 때문에 ~ 분석 툴도 함께 사용해야 한다.
→ 실시간 시스템인 특성 때문에 게임은 최적화를 위해 프로파일링을 해야 하는 경우가 종종 있다. 또 대부분의 경우 메모리가 부족하기 때문에 메모리 분석 툴도 함께 사용해야 한다.

[ p139 8행 ]
요약해 말하자면 선언은 어떤 개념에 대한 "설명"이고, "선언"은 그 개념 자체라고 할 수 있다.
→ 요약해 말하자면 선언은 어떤 개념에 대한 "언급(reference)"이고, "정의"는 그 개념 자체라고 할 수 있다.

[ p163 7행 ]
SHE는 윈도우의 기능 → SEH는 윈도우의 기능

[ p181 2행 ]
벡터 두 개를 사용면 평면을 → 벡터 두 개를 사용하면 평면을