商品详情
定价:219.0
ISBN:9787121375293
作者:(美)Jason,Gregory(杰森·格雷戈瑞)
版次:第1版
出版时间:2019-10
内容提要:
《游戏引擎架构》(第 2 版)涵盖游戏引擎软件开发的理论及实践知识,并在第 1 版的基础上对多个主题进行了更新。本书中讨论的概念及技巧被实际应用于现实中的游戏工作室(如艺电及顽皮狗)。虽然书中采用的例子通常依托于一些专门的技术,但是讨论范围远超某个引擎或API。另外,书中提供的参考文献及引用也非常有价值,可让读者继续深入游戏开发的任何特定方向。本书为大学程度的游戏编程课程而编写,但也适合软件工程师、游戏开发业余爱好者,以及游戏产业的从业人员阅读。通过阅读本书,资历较浅的游戏工程师可以巩固他们所学的游戏技术及引擎架构的知识,专注某一领域的程序员也能从本书全面的介绍中获益。《游戏引擎架构》(第2版)不仅可作为知识扫盲的工具,以及延伸学习的跳板,更能让读者扎实地理解游戏引擎中每个工程范畴中的理论与典型实践。本书将助你走过游戏引擎架构那迷人、全方位的难忘之旅。本书讲解商业游戏引擎中各个子系统的理论基础,并论述了实现这些子系统通常所需的数据结构、算法及软件接口。本书聚焦在引擎本身,其中包括底层基础系统、渲染引擎、碰撞系统、物理模拟、角色动画及音频。而在“游戏性基础层”中深入探讨游戏对象模型、世界编辑器、事件系统与脚本系统。书中还涉及一些游戏编程方面的技术,如玩家机制、摄像头和人工智能。《游戏引擎架构》广受欢迎,成为游戏引擎软件开发理论和实践的完整指南。第2版按当今游戏引擎架构发展趋势更新大量内容,进一步完善对典型游戏引擎各主要模块的讲解,重点新内容包括:·更新了各个主题的信息,包括C++编程语言的*新版本C++11、第8代游戏机Xbox One 和PlayStation 4。·新增了音频技术章节,包含AAA游戏音频引擎所涉及的物理、数学和技术等方面的知识。·更新了多核编程、流水线CPU架构、优化、国际化、赝矢量、格拉斯曼代数、对偶四元数、SIMD矢量数学、内存对齐及抗锯齿等章节。
作者简介:
Jason Gregory,在1994年开始任职专业软件工程师,自1999年3月开始在游戏产业中任职软件工程师。在圣迭哥Midway Home Entertainment公司开始游戏编程的他,为《疯狂飞行员(Freaky Flyers)》及《Crank the Weasel》开发PlayStation 2/Xbox上的动画系统。在2003年,他转到洛杉矶艺电,为《荣誉勋章:血战太平洋(Medal of Honor: Pacific Assault)》开发游戏引擎及游戏性技术,并在《荣誉勋章:空降神兵(Medal of Honor: Airborne)》中担任首席工程师。他现时是顽皮狗公司的通才程序员,为《神秘海域:德雷克船长的宝藏(Uncharted: Drake's Fortune)》及《神秘海域:纵横四海(Uncharted: Among Thieves)》开发引擎及游戏性软件。他也在南加州大学教授游戏技术的课程。
叶劲峰(Milo Yip),从小自习编程,并爱好计算机图形学。上中学时兼职开发策略RPG《王子传奇》,该游戏在1995年于台湾发行。其后他获取了香港大学认知科学学士、香港中文大学系统工程及工程管理哲学硕士。毕业后在香港理工大学设计学院从事游戏引擎及相关技术的研发,职至项目主任。除发表学术文章外,也曾合著《DirectX9游戏编程实务》。2008年往上海育碧担任引擎工程师开发《美食从天而降(Cloudy with a Chance of Meatballs)》Xbox360/PS3/Wii/PC,2009年起于麻辣马开发《爱丽丝:疯狂回归(Alice: Madness Returns)》Xbox360/PS3/PC,2011年加入腾讯互动娱乐引擎技术中心担任专家工程师,所研发的技术已用于《斗战神》、《天涯明月刀》、《众神争霸》等项目中。
目录:
第 2 版序言 .........................................xxxiii
第 1 版序言 .........................................xxxv
第 2 版前言 .........................................xxxvii
第 1 版前言 .........................................xxxviii
致谢 .............................................xl
第 I 部分 基 础
第 1 章 导论 .......................................3
1.1 典型游戏团队的结构 ................................4
1.1.1 工程师 .....................................5
1.1.2 艺术家 .....................................5
1.1.3 游戏设计师 ...................................6
1.1.4 制作人 .....................................7
1.1.5 其他工作人员 ..................................7
1.1.6 发行商及工作室 .................................7
1.2 游戏是什么 .....................................8
1.2.1 电子游戏作为软实时模拟.............................8
1.3 游戏引擎是什么 ...................................10
1.4 不同游戏类型的引擎差异 ..............................11
1.4.1 **人称射击游戏 ................................12
1.4.2 平台及其他第三人称游戏.............................13
1.4.3 格斗游戏 ....................................15
1.4.4 竞速游戏 ....................................17
1.4.5 实时策略游戏 ..................................18
1.4.6 大型多人在线游戏 ................................20
1.4.7 玩家创作内容 ? ..................................21
1.4.8 其他游戏类型 ..................................23
1.5 游戏引擎概览 ....................................24
1.5.1 雷神之锤引擎家族 ................................24
1.5.2 虚幻引擎 ....................................25
1.5.3 Source 引擎 ...................................26
1.5.4 DICE 的寒霜引擎 ? ...............................26
1.5.5 CryEngine ? ...................................26
1.5.6 索尼的 PhyreEngine ? ..............................27
1.5.7 微软的 XNA Game Studio............................27
1.5.8 Unity ? .....................................27
1.5.9 供非程序员使用的二维游戏引擎 ? .........................28
1.5.10 其他商业引擎 .................................29
1.5.11 专有内部引擎 .................................29
1.5.12 开源引擎....................................29
1.6 运行时引擎架构 ...................................30
1.6.1 目标硬件 ....................................32
1.6.2 设备驱动程序 ..................................32
1.6.3 操作系统 ....................................32
1.6.4 第三方软件开发包和中间件............................33
1.6.5 平台独立层 ...................................36
1.6.6 核心系统 ....................................36
1.6.7 资源管理器 ...................................37
1.6.8 渲染引擎 ....................................37
1.6.9 剖析和调试工具 .................................41
1.6.10 碰撞和物理...................................42
1.6.11 动画 ......................................43
1.6.12 人体学接口设备 ................................44
1.6.13 音频 ......................................45
1.6.14 在线多人/网络游戏 ...............................46
1.6.15 游戏性基础系统 ................................47
1.6.16 个别游戏专用子系统 ..............................50
1.7 工具及资产管道 ...................................50
1.7.1 数字内容创作工具 ................................50
1.7.2 资产调节管道 ..................................52
1.7.3 世界编辑器 ...................................54
1.7.4 资源数据库 ? ...................................55
1.7.5 一些构建工具的方法 ...............................55
第 2 章 专业工具 ....................................58
2.1 版本控制 .......................................58
2.1.1 为何使用版本控制 ................................58
2.1.2 常见的版本控制系统 ...............................59
2.1.3 Subversion 和 TortoiseSVN 概览 .........................60
2.1.4 在 Google 上设置代码版本库...........................61
2.1.5 安装 TortoiseSVN ................................61
2.1.6 文件版本、更新和提交 ..............................63
2.1.7 多人签出、分支及合并 ..............................64
2.1.8 删除 ......................................66
2.2 微软 Visual Studio..................................66
2.2.1 源文件、头文件及翻译单元 ............................67
2.2.2 程序库、可执行文件及动态链接库.........................67
2.2.3 项目及解决方案 .................................68
2.2.4 生成配置 ....................................69
2.2.5 调试代码 ....................................75
2.3 剖析工具 .......................................81
2.3.1 剖析器列表 ...................................83
2.4 内存泄漏和损坏检测 ................................83
2.5 其他工具 .......................................84
第 3 章 游戏软件工程基础 ..............................85
3.1 重温 C++ 及*佳实践 ...............................85
3.1.1 扼要重温面向对象编程..............................85
3.1.2 编码标准: 为什么及需要多少 ...........................91
3.1.3 C++11 ? ....................................92
3.2 C/C++ 的数据、代码及内存 ............................99
3.2.1 数值表达形式 ..................................99
3.2.2 声明、定义及链接规范 ..............................109
3.2.3 C/C++ 内存布局 ................................115
3.2.4 成员变量 ....................................119
3.2.5 对象的内存布局 .................................121
3.2.6 kilobyte 及 kibibyte ...............................129
3.3 捕捉及处理错误 ...................................129
3.3.1 错误类型 ....................................129
3.3.2 错误处理 ....................................130
3.3.3 实现错误检测及处理 ...............................132
3.4 流水线、缓存及优化 .................................136
3.4.1 并行范式转移 ..................................136
3.4.2 内存缓存 ....................................137
3.4.3 指令流水线及超纯量 CPU ............................142
第 4 章 游戏所需的三维数学 .............................146
4.1 在二维中解决三维问题 ...............................146
4.2 点和矢量 .......................................146
4.2.1 点和笛卡儿坐标 .................................147
4.2.2 左手坐标系与右手坐标系的比较 .........................148
4.2.3 矢量 ......................................149
4.2.4 矢量运算 ....................................150
4.2.5 点和矢量的线性插值 ...............................160
4.3 矩阵 .........................................160
4.3.1 矩阵乘法 ....................................161
4.3.2 以矩阵表示点和矢量 ...............................162
4.3.3 单位矩阵 ....................................163
4.3.4 逆矩阵 .....................................163
4.3.5 转置矩阵 ....................................163
4.3.6 齐次坐标 ....................................164
4.3.7 基础变换矩阵 ..................................165
4.3.8 4 × 3 矩阵 ...................................168
4.3.9 坐标空间 ....................................168
4.3.10 基的变更....................................171
4.3.11 变换法矢量...................................175
4.3.12 在内存中存储矩阵 ...............................175
4.4 四元数 ........................................177
4.4.1 把单位四元数视为三维旋转............................178
4.4.2 四元数运算 ...................................178
4.4.3 以四元数旋转矢量 ................................180
4.4.4 等价的四元数和矩阵 ...............................181
4.4.5 旋转性的线性插值 ................................183
4.5 比较各种旋转表达方式 ...............................185
4.5.1 欧拉角 .....................................185
4.5.2 3 × 3 矩阵 ...................................186
4.5.3 轴角 ......................................186
4.5.4 四元数 .....................................187
4.5.5 SQT 变换....................................187
4.5.6 对偶四元数 ...................................188
4.5.7 旋转和自由度 ..................................188
4.6 其他数学对象 ....................................189
4.6.1 直线、光线及线段 ................................189
4.6.2 球体 ......................................190
4.6.3 平面 ......................................190
4.6.4 轴对齐包围盒 ..................................192
4.6.5 定向包围盒 ...................................193
4.6.6 平截头体 ....................................193
4.6.7 凸多面体区域 ..................................194
4.7 硬件加速的 SIMD 运算 ...............................194
4.7.1 SSE 寄存器 ...................................195
4.7.2 __m128 数据类型 ................................196
4.7.3 用 SSE 内部函数编码 ..............................197
4.7.4 用 SSE 实现矢量与矩阵的相乘 ..........................199
4.8 产生随机数 .....................................203
4.8.1 线性同余产生器 .................................204
4.8.2 梅森旋转 ....................................204
4.8.3 所有伪随机数产生器之母及 Xorshift .......................205
第 II 部分 底层引擎系统
第 5 章 游戏支持系统 .................................209
5.1 子系统的启动和终止 ................................209
5.1.1 C++ 的静态初始化次序 (是不可用的) ......................209
5.1.2 行之有效的简单方法 ...............................212
5.1.3 一些实际引擎的例子 ...............................214
5.2 内存管理 .......................................218
5.2.1 优化动态内存分配 ................................218
5.2.2 内存碎片 ....................................227
5.3 容器 .........................................231
5.3.1 容器操作 ....................................232
5.3.2 迭代器 .....................................233
5.3.3 算法复杂度 ...................................234
5.3.4 建立自定义的容器类 ...............................236
5.4 字符串 ........................................248
5.4.1 字符串的使用问题 ................................248
5.4.2 字符串类 ....................................249
5.4.3 **标识符 ...................................249
5.4.4 本地化 .....................................253
5.5 引擎配置 .......................................263
5.5.1 读/写选项....................................263
5.5.2 个别用户选项 ..................................264
5.5.3 真实引擎中的配置管理..............................265
第 6 章 资源及文件系统 ................................270
6.1 文件系统 .......................................270
6.1.1 文件名和路径 ..................................271
6.1.2 基本文件 I/O ..................................274
6.1.3 异步文件 I/O ..................................277
6.2 资源管理器 .....................................281
6.2.1 离线资源管理及工具链..............................281
6.2.2 运行时资源管理 .................................289
第 7 章 游戏循环及实时模拟 .............................305
7.1 渲染循环 .......................................305
7.2 游戏循环 .......................................306
7.2.1 简单例子: 《乓》 .................................306
7.3 游戏循环的架构风格 ................................308
7.3.1 视窗消息泵 ...................................308
7.3.2 回调驱动框架 ..................................309
7.3.3 基于事件的更新 .................................311
7.4 抽象时间线 .....................................311
7.4.1 真实时间 ....................................311
7.4.2 游戏时间 ....................................311
7.4.3 局部及全局时间线 ................................312
7.5 测量及处理时间 ...................................313
7.5.1 帧率及时间增量 .................................313
7.5.2 从帧率到速率 ..................................314
7.5.3 使用高分辨率计时器测量实时时间 ........................317
7.5.4 时间单位和时钟变量 ...............................318
7.5.5 应对断点 ....................................321
7.5.6 一个简单的时钟类 ................................322
7.6 多处理器的游戏循环 ................................325
7.6.1 多处理器游戏机的架构..............................326
7.6.2 SIMD......................................331
7.6.3 分叉及汇合 ...................................331
7.6.4 每个子系统运行于独立线程............................333
7.6.5 作业模型 ....................................334
7.6.6 异步程序设计 ..................................334
7.7 网络多人游戏循环 ..................................337
7.7.1 主从式模型 ...................................337
7.7.2 点对点模型 ...................................339
7.7.3 案例分析: 《雷神之锤 II》.............................339
第 8 章 人体学接口设备 ................................342
8.1 各种人体学接口设备 ................................342
8.2 人体学接口设备的接口技术 .............................344
8.2.1 轮询 ......................................344
8.2.2 中断 ......................................344
8.2.3 无线设备 ....................................345
8.3 输入类型 .......................................345
8.3.1 数字式按钮 ...................................345
8.3.2 模拟式轴及按钮 .................................347
8.3.3 相对性轴 ....................................348
8.3.4 加速计 .....................................348
8.3.5 以 Wii 遥控器或 DualShock 做三维定向 .....................349
8.3.6 摄像机 .....................................350
8.4 输出类型 .......................................352
8.4.1 震动反馈 ....................................352
8.4.2 力反馈 .....................................353
8.4.3 音频 ......................................353
8.4.4 其他输入/输出 .................................353
8.5 游戏引擎的人体学接口设备系统 ..........................353
8.5.1 典型需求 ....................................354
8.5.2 死区 ......................................354
8.5.3 模拟信号过滤 ..................................355
8.5.4 输入事件检测 ..................................357
8.5.5 为多位玩家管理多个 HID ............................364
8.5.6 跨平台的 HID 系统 ...............................364
8.5.7 输入的重新映射 .................................366
8.5.8 上下文相关控制 .................................367
8.5.9 禁用输入 ....................................368
8.6 人体学接口设备使用实践 ..............................368
第 9 章 调试及开发工具 ................................370
9.1 日志及跟踪 .....................................370
9.1.1 使用 OutputDebugString() 做格式化输出.....................371
9.1.2 冗长级别 ....................................372
9.1.3 频道 ......................................373
9.1.4 把输出同时抄写至日志文件............................374
9.1.5 崩溃报告 ....................................374
9.2 调试用的绘图功能 ..................................375
9.2.1 调试绘图 API ..................................378
9.3 游戏内置菜单 ....................................382
9.4 游戏内置主控台 ...................................385
9.5 调试用摄像机和游戏暂停 ..............................386
9.6 作弊 .........................................386
9.7 屏幕截图及录像 ...................................387
9.8 游戏内置性能剖析 ..................................387
9.8.1 层阶式剖析 ...................................389
9.8.2 导出至 Excel ..................................394
9.9 游戏内置的内存统计和泄漏检测 ..........................394
第 III 部分 图形、运动与声音
第 10 章 渲染引擎 ...................................401
10.1 采用深度缓冲的三角形光栅化基础 ........................401
10.1.1 场景描述....................................403
10.1.2 描述表面的视觉性质 ..............................410
10.1.3 光照基础....................................423
10.1.4 虚拟摄像机...................................432
10.2 渲染管道 ......................................442
10.2.1 渲染管道概览 .................................443
10.2.2 工具阶段....................................444
10.2.3 资产调节阶段 .................................446
10.2.4 GPU 简史 ...................................447
10.2.5 GPU 管道 ...................................448
10.2.6 可编程着色器 .................................452
10.2.7 抗锯齿 ? ....................................456
10.2.8 应用程序阶段 .................................459
10.3 高级光照及全局光照 ................................468
10.3.1 基于图像的光照 ................................468
10.3.2 高动态范围光照 ................................472
10.3.3 全局光照....................................473
10.3.4 延迟渲染....................................479
10.3.5 基于物理着色 ? .................................480
10.4 视觉效果和覆盖层 .................................481
10.4.1 粒子效果....................................481
10.4.2 贴花 ......................................482
10.4.3 环境效果....................................483
10.4.4 覆盖层.....................................486
10.4.5 伽马校正....................................487
10.4.6 全屏后期处理效果 ...............................488
10.5 延伸阅读 ......................................489
第 11 章 动画系统 ...................................490
11.1 角色动画的类型 ..................................490
11.1.1 赛璐璐动画...................................490
11.1.2 刚性层阶式动画 ................................491
11.1.3 每顶点动画及变形目标 .............................492
11.1.4 蒙皮动画....................................493
11.1.5 把动画方法视为数据压缩技术 ..........................494
11.2 骨骼 .........................................495
11.2.1 骨骼层阶结构 .................................496
11.2.2 在内存中表示骨骼 ...............................497
11.3 姿势 .........................................498
11.3.1 绑定姿势....................................498
11.3.2 局部姿势....................................499
11.3.3 全局姿势....................................501
11.4 动画片段 ......................................502
11.4.1 局部时间线...................................503
11.4.2 全局时间线...................................506
11.4.3 比较局部和全局时钟 ..............................508
11.4.4 简单的动画数据格式 ..............................511
11.4.5 连续的通道函数 ................................512
11.4.6 元通道.....................................513
11.5 蒙皮及生成矩阵调色板 ...............................514
11.5.1 每顶点的蒙皮信息 ...............................515
11.5.2 蒙皮涉及的数学知识 ..............................515
11.6 动画混合 ......................................519
11.6.1 线性插值混合 .................................519
11.6.2 线性插值混合的应用 ..............................521
11.6.3 复杂的线性插值混合 ..............................526
11.6.4 骨骼分部混合 .................................529
11.6.5 加法混合....................................531
11.6.6 加法混合的应用 ................................533
11.7 后期处理 ......................................536
11.7.1 程序式动画...................................536
11.7.2 逆运动学....................................537
11.7.3 布娃娃.....................................538
11.8 压缩技术 ......................................538
11.8.1 通道省略....................................539
11.8.2 量化 ......................................539
11.8.3 采样频率及键省略 ...............................543
11.8.4 基于曲线的压缩 ................................543
11.8.5 选择性载入及串流 ...............................544
11.9 动画系统架构 ....................................544
11.10 动画管道 .....................................545
11.10.1 数据结构 ...................................546
11.10.2 扁平的加权平均混合表示法 ..........................549
11.10.3 混合树 ....................................552
11.10.4 淡入/淡出架构 ................................555
11.10.5 动画管道的优化 ................................557
11.11 动作状态机 ....................................559
11.11.1 动画状态 ...................................559
11.11.2 过渡 .....................................565
11.11.3 状态层 ....................................568
11.11.4 控制参数 ...................................570
11.11.5 约束 .....................................571
11.12 动画控制器 ....................................579
第 12 章 碰撞及刚体动力学 ..............................580
12.1 你想在游戏中加入物理吗 .............................580
12.1.1 物理系统可以做的事情 .............................581
12.1.2 物理好玩吗...................................582
12.1.3 物理对游戏的影响 ...............................583
12.2 碰撞 / 物理中间件 ..................................585
12.2.1 I-Collide、SWIFT、V-Collide 及 RAPID ....................585
12.2.2 ODE .....................................585
12.2.3 Bullet .....................................586
12.2.4 TrueAxis ...................................586
12.2.5 PhysX.....................................586
12.2.6 Havok .....................................587
12.2.7 PAL......................................587
12.2.8 DMM .....................................587
12.3 碰撞检测系统 ....................................588
12.3.1 可碰撞的实体 .................................588
12.3.2 碰撞/物理世界 .................................589
12.3.3 关于形状的概念 ................................590
12.3.4 碰撞原型....................................592
12.3.5 碰撞测试及解析几何 ..............................596
12.3.6 性能优化....................................604
12.3.7 碰撞查询....................................606
12.3.8 碰撞过滤....................................610
12.4 刚体动力学 .....................................611
12.4.1 基础 ......................................613
12.4.2 线性动力学...................................614
12.4.3 运动方程求解 .................................616
12.4.4 数值积分....................................618
12.4.5 二维旋转动力学 ................................622
12.4.6 三维旋转动力学 ................................625
12.4.7 碰撞响应....................................629
12.4.8 约束 ......................................636
12.4.9 控制刚体的运动 ................................640
12.4.10 碰撞/物理步 .................................641
12.5 将物理引擎整合至游戏 ...............................643
12.5.1 连接游戏对象和刚体 ..............................643
12.5.2 更新模拟....................................646
12.5.3 游戏中碰撞及物理的应用例子 ..........................649
12.6 展望 : 高级物理功能 ................................656
第 13 章 音频 ? ......................................658
13.1 声音的物理 .....................................658
13.1.1 声波的属性...................................659
13.1.2 感知响度及分贝 ................................660
13.1.3 声波的传播...................................663
13.1.4 位置的感知...................................668
13.2 声音中的数学知识 .................................668
13.2.1 信号 ......................................669
13.2.2 处理信号....................................670
13.2.3 线性时不变系统 ................................671
13.2.4 LTI 系统的脉冲响应 ..............................672
13.2.5 频域与傅里叶变换 ...............................677
13.3 声音技术 .........................
- 电子工业出版社有限公司
- 电子工业出版社有限公司有赞官方供货商,为客户提供一流的知识产品及服务。
- 扫描二维码,访问我们的微信店铺