Top

게임 엔진 아키텍처 3/e

  • 원서명Game Engine Architecture, Third Edition (ISBN 9781138035454)
  • 지은이제이슨 그레고리(Jason Gregory)
  • 옮긴이박상희
  • ISBN : 9791161757445
  • 75,000원
  • 2023년 05월 31일 펴냄
  • 페이퍼백 | 1,252쪽 | 188*235mm
  • 시리즈 : 게임 개발 프로그래밍

책 소개

요약

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

이 책에서 다루는 내용

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

이 책의 대상 독자

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

상세 이미지

저자/역자 소개

지은이의 말

오늘날의 게임 콘솔, 모바일 기기, 개인용 컴퓨터의 핵심인 컴퓨터 하드웨어는 병렬성(parallelism)을 중요하게 활용한다. 이 기기들의 CPU와 GPU의 깊은 안쪽에서는 여러 개의 기능 단위(funtional unit)가 동시에 작동하며, 분할 정복(divide-and-conquer) 기법을 통해 고성능 연산을 수행한다. 병렬 하드웨어가 기존의 단일 스레드 프로그램을 빨리 돌릴 수 있게 해주지만, 오늘날의 연산 플랫폼에서 이미 널리 쓰이는 하드웨어 병렬성의 이점을 활용하려면 프로그래머가 병행 소프트웨어를 제대로 짜야 한다.
게임 엔진 아키텍처의 초판에서는 게임 디자인의 관점에서만 병렬성과 병행성을 살짝 언급했었다. 주제에 걸맞은 심도 깊은 취급을 하지 못한 것이다. 3판에서는 병행성과 병렬성에 관한 완전히 새로운 장을 추가함으로써 비로소 제대로 다루게 됐다. 또한 8장과 16장은 보강을 통해 병행 프로그래밍 기법들이 게임 엔진 하부 시스템과 게임 객체 모델 업데이트에 어떻게 적용되는지, 그리고 어떻게 범용 목적 잡(job) 시스템이 게임 엔진 내 병행성의 잠재력을 이끌어 낼 수 있는지를 알아볼 것이다.
이미 말했지만 좋은 게임 프로그래머라면 C++(그리고 기타 업계에서 자주 쓰이는 여러 언어들)에 대한 단단한 실무 지식을 지녀야 한다. 프로그래머의 고차원 언어에 대한 지식은 기반이 되는 소프트웨어와 하드웨어에 대한 이해에 바탕을 둬야 한다고 생각한다. 따라서 3장을 확장해 컴퓨터 하드웨어의 기본 지식, 어셈블리 언어, 그리고 운영체제 커널에 대해 다뤘다.
게임 엔진 아키텍처 3판에서는 이전 판에서 다뤘던 여러 주제를 보강했다. 로컬 및 전역 컴파일러 최적화에 대한 내용이 추가됐다. 좀 더 폭넓은 C++ 언어 표준들이 추가됐다. 메모리 캐싱과 캐시 일관성에 관한 내용은 확장했다. 애니메이션에 관한 장은 말끔히 다듬었다. 그리고 2판에서와 마찬가지로 저자와 여러 열성적인 독자들에 의해 발견된 오탈자를 수정했다. 게임 엔진 프로그래밍은 상상하기 힘들 정도로 넓고 깊다. 책 한 권에서 전부 다룰 수 없다. 따라서 이 책의 목적은 여러분의 주의를 환기시키고 더 깊은 지식을 찾아 떠날 수 있는 발판이 되는 것이다. 이 책이 흥미롭고 다채로운 게임 엔진 아키텍처의 세계를 탐험할 때 도움이 되기를 희망한다.

지은이 소개

제이슨 그레고리(Jason Gregory)

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)에서 게임 기술에 관한 강의를 개발하고 가르치기도 했었다.

옮긴이의 말

게임 엔진 아키텍처가 최초로 번역돼 나온 지 벌써 10년입니다. 그동안 여러 가지 일이 있었고 세상이 크게 변했습니다. 콘솔 세대가 두 번 바뀌었고 사람 말을 할 줄 아는 AI가 등장했습니다. 3판을 번역하며 초판의 내용을 돌아봤는데 세월을 타 촌스럽게 느껴지는 부분도 다소 있었지만(예를 들면 플레이스테이션 3을 최신이라고 하는 등) 대부분은 지금 그대로 적용할 수 있는 것들이라 놀랐습니다. 분명 많은 것이 변했는데 왜 그럴까요? 핵심 개념은 크게 변하지 않은 채 응용법이 더 발전하고 복잡해졌기 때문이 아닌가 합니다. 10년 전의 저는 10년차 게임 프로그래머였는데 20년차인 지금과 비교해 볼 때 하는 일에 있어 괄목할 만한 변화는 없는 것과 비슷한 맥락입니다. 게임 개발을 위해 배울 지식과 익혀야 할 기술은 많고 꾸준히 나옵니다. 그러나 상당수는 책에 담으면 너무 빨리 구닥다리가 돼 버리는 것들입니다. 게임 엔진 아키텍처는 이해해야 할 핵심 개념과 바로 쓸 수 있는 지식의 경계를 잘 타고 있기에 세월의 영향을 크게 받지 않은 것 같습니다.
3판은 많은 내용이 추가됐습니다. 병행 프로그래밍과 오디오 두 장이 완전히 새로 들어갔습니다. 병행 프로그래밍은 어렵고 까다로운 주제이지만 따로 공부하기 쉽지 않기 때문에 이 책의 내용 정도면 훌륭한 입문 자료가 될 것 같습니다. 오디오는 평소에 접하기 힘든 내용이라 호기심을 자극하는 경험이 될 수 있을 것입니다. 경우에 따라서는 지루한 시간이 될 수도 있겠지만 사람에 따라 다르겠죠. 번역하는 입장에서는 매우 힘들었습니다만 다 이해하지 않아도 한 번쯤 보시면 재미있습니다. 그 외 기존 부분에서 시대에 맞게 갱신한 내용들도 많습니다.
초판 번역 후 너무 힘들었던 기억 덕에 다시는 번역을 하지 않으려 했는데 10년은 많은 것을 잊게 해주는 시간인 듯합니다. 번역을 제의받았을 때 거절하지 못했습니다. 그러나 다음 판이 나오게 된다면 아마 AI가 번역하지 않을까요?
초판도 두꺼웠는데 3판은 훨씬 더 두꺼워졌습니다. 훌륭한 선생님의 강의를 더 많이 배울 수 있어서 다행입니다. 이 책을 통해 훌륭한 게임이 더 많이 나올 수 있길 바랍니다.

옮긴이 소개

박상희

서울대학교 컴퓨터 공학과를 졸업한 후 게임 클라이언트 프로그래머(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.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 다루지 않았던 엔진 시스템

도서 오류 신고

도서 오류 신고

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

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

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