书籍 游戏引擎架构  第2版=GAME ENGINE ARCHITECTURE (SECOND EDITION)的封面

游戏引擎架构 第2版=GAME ENGINE ARCHITECTURE (SECOND EDITION)PDF电子书下载

(美)JASON GREGORY著

购买点数

20

出版社

出版时间

2019

ISBN

标注页数

0 页

PDF页数

985 页

图书目录

第Ⅰ部分 基础 3

第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

第Ⅱ部分 底层引擎系统 209

第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 案例分析:《雷神之锤Ⅱ》 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

第Ⅲ部分 图形、运动与声音 401

第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 声音技术 685

13.3.1 模拟音频技术 685

13.3.2 数字音频技术 690

13.4 三维音频渲染 696

13.4.1 三维声音渲染概览 697

13.4.2 为音频世界建模 698

13.4.3 基于距离的衰减 698

13.4.4 偏移 700

13.4.5 传播、混响及声学 705

13.4.6 多普勒频移 712

13.5 音频引擎架构 712

13.5.1 音频处理管道 714

13.5.2 概念及术语 714

13.5.3 音总线 715

13.5.4 主控混音器 718

13.5.5 主控输出总线 719

13.5.6 实现总线 720

13.5.7 资产管理 722

13.5.8 对游戏混音 724

13.5.9 音频引擎调查 727

13.6 游戏专用的音频功能 730

13.6.1 支持切割屏 731

13.6.2 角色对话 732

13.6.3 音乐 744

第Ⅳ部分 游戏性 747

第14章 游戏性系统简介 747

14.1 剖析游戏世界 748

14.1.1 世界元素 748

14.1.2 世界组块 750

14.1.3 高级游戏流程 751

14.2 实现动态元素:游戏对象 752

14.2.1 游戏对象模型 753

14.2.2 工具方的设计和运行时的设计 754

14.3 数据驱动游戏引擎 754

14.4 游戏世界编辑器 755

14.4.1 游戏世界编辑器的典型功能 758

14.4.2 集成的资产管理工具 763

第15章 运行时游戏性基础系统 766

15.1 游戏性基础系统的组件 766

15.2 各种运行时对象模型架构 768

15.2.1 以对象为中心的各种架构 769

15.2.2 以属性为中心的各种架构 781

15.3 世界组块的数据格式 785

15.3.1 二进制对象映像 786

15.3.2 序列化游戏对象描述 786

15.3.3 生成器及类型架构 788

15.4 游戏世界的加载和串流 792

15.4.1 简单的关卡加载 792

15.4.2 向无缝加载进发:阻隔室 792

15.4.3 游戏世界的串流 794

15.4.4 对象生成的内存管理 796

15.4.5 游戏存档 798

15.5 对象引用与世界查询 799

15.5.1 指针 799

15.5.2 智能指针 800

15.5.3 句柄 802

15.5.4 游戏对象查询 804

15.6 实时更新游戏对象 806

15.6.1 一个简单(但不可行)的方式 807

15.6.2 性能限制及批次式更新 809

15.6.3 对象及子系统的相互依赖 811

15.6.4 为并行设计 819

15.7 事件与消息泵 821

15.7.1 静态类型的函数绑定带来的问题 821

15.7.2 把事件封装成对象 822

15.7.3 事件类型 823

15.7.4 事件参数 824

15.7.5 事件处理器 826

15.7.6 取出事件参数 827

15.7.7 职责链 827

15.7.8 登记对事件的关注 829

15.7.9 要排队还是不要排队 830

15.7.10 即时传递事件带来的问题 835

15.7.11 数据驱动事件/消息传递系统 836

15.8 脚本 839

15.8.1 运行时与数据定义的对比 839

15.8.2 编程语言特性 839

15.8.3 一些常见的游戏脚本语言 841

15.8.4 脚本所需的架构 846

15.8.5 运行时游戏脚本语言的功能 847

15.9 高层次的游戏流程 858

第Ⅴ部分 总结 863

第16章 还有更多内容吗 863

16.1 一些未谈及的引擎系统 863

16.1.1 影片播放器 863

16.1.2 多人网络 864

16.2 游戏性系统 864

16.2.1 玩家机制 864

16.2.2 摄像机 864

16.2.3 人工智能 865

16.2.4 其他游戏性系统 866

参考文献 867

中文索引 871

英文索引 900

查看更多关于的内容

出版社其它书籍
本类热门
在线购买PDF电子书
下载此书RAR压缩包