內容簡介
《遊戲引擎架構》(第 2 版)涵蓋遊戲引擎軟體開發的理論及實踐知識,並在第 1 版的基礎上對多個主題進行了更新。本書中討論的概念及技巧被實際套用於現實中的遊戲工作室(如藝電及頑皮狗)。雖然書中採用的例子通常依託於一些專門的技術,但是討論範圍遠超某個引擎或API。另外,書中提供的參考文獻及引用也非常有價值,可讓讀者繼續深入遊戲開發的任何特定方向。本書為大學程度的遊戲編程課程而編寫,但也適合軟體工程師、遊戲開發業餘愛好者,以及遊戲產業的從業人員閱讀。通過閱讀本書,資歷較淺的遊戲工程師可以鞏固他們所學的遊戲技術及引擎架構的知識,專注某一領域的程式設計師也能從本書全面的介紹中獲益。《遊戲引擎架構》(第2版)不僅可作為知識掃盲的工具,以及延伸學習的跳板,更能讓讀者紮實地理解遊戲引擎中每個工程範疇中的理論與典型實踐。本書將助你走過遊戲引擎架構那迷人、全方位的難忘之旅。本書講解商業遊戲引擎中各個子系統的理論基礎,並論述了實現這些子系統通常所需的數據結構、算法及軟體接口。本書聚焦在引擎本身,其中包括底層基礎系統、渲染引擎、碰撞系統、物理模擬、角色動畫及音頻。而在“遊戲性基礎層”中深入探討遊戲對象模型、世界編輯器、事件系統與腳本系統。書中還涉及一些遊戲編程方面的技術,如玩家機制、攝像頭和人工智慧。《遊戲引擎架構》廣受歡迎,成為遊戲引擎軟體開發理論和實踐的完整指南。
第2版按當今遊戲引擎架構發展趨勢更新大量內容,進一步完善對典型遊戲引擎各主要模組的講解,重點新內容包括:·更新了各個主題的信息,包括C++程式語言的最新版本C++11、第8代遊戲機Xbox One 和PlayStation 4。·新增了音頻技術章節,包含AAA遊戲音頻引擎所涉及的物理、數學和技術等方面的知識。·更新了多核編程、流水線CPU架構、最佳化、國際化、贗矢量、格拉斯曼代數、對偶四元數、SIMD矢量數學、記憶體對齊及抗鋸齒等章節。
圖書目錄
第 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 聲音技術 ......................................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
第 IV 部分 游 戲 性
第 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
第 V 部分 總 結
第 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,第 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