《騰訊遊戲開發精粹》是2019年電子工業出版社出版的圖書,作者是騰訊遊戲。
基本介紹
- 中文名:騰訊遊戲開發精粹
- 作者:騰訊遊戲
- 出版時間:2019年9月
- 出版社:電子工業出版社
- 頁數:292 頁
- ISBN:9787121366024
- 定價:79 元
- 開本:16 開
內容簡介,目錄,作者簡介,
內容簡介
《騰訊遊戲開發精粹》是騰訊遊戲研發團隊的技術結晶,由10多名騰訊遊戲資深技術專家撰寫而成,整理了團隊在自主遊戲研發的道路上積累沉澱的技術方案,具有較強的通用性及時效性,內容涵蓋遊戲腳本系統及開發工具、數學和物理、計算機圖形、人工智慧與後台架構等。
目錄
第一部分 遊戲數學
第1 章 基於SDF的搖桿移動 2
摘要 2
1.1 引言 3
1.2 有號距離場(SDF 3)
1.3 利用柵格數據預計算SDF 4
1.4 SDF 的碰撞檢測與碰撞回響 5
1.5 避免往返 8
1.6 利用多邊形數據預計算SDF 9
1.7 其他需求 10
1.7.1 如何將角色從障礙區域中移出 10
1.7.2 角色不能越過障礙物的遠距離移動 11
1.8 動態障礙物 12
1.9 AI尋路 14
1.10 動態地圖 14
1.11 總結 17
參考文獻 17
第2 章 高性能的定點數實現方案 18
摘要 18
2.1 引言 18
2.1.1 浮點數簡介 18
2.1.2 32 位浮點數(單精度)表示原理 19
2.2 基於整數的二進制表示的定點數原理 19
2.2.1 32 位定點數表示原理 19
2.2.2 64 位定點數表示原理 20
2.3 定點數的四則運算 21
2.3.1 加法與減法 22
2.3.2 乘法 22
2.3.3 除法 23
2.4 定點數開方與超越函式實現方法 23
2.4.1 多項式擬合 24
2.4.2 正弦/餘弦函式 25
2.4.3 指數函式 26
2.4.4 對數函式 27
2.4.5 開方運算 27
2.4.6 開方求倒數 28
2.4.7 為什麼不用查表法 30
2.5 定點數的誤差對比與性能測試 30
2.5.1 超越函式及開方的誤差測試 30
2.5.2 性能測試 30
2.6 總結 31
參考文獻 31
第二部分 遊戲物理
第3 章 一種高效的弧長參數化路徑系統 34
摘要 34
3.1 引言 34
3.2 端點間二次樣條的構建 35
3.3 路徑的構建 38
3.4 曲線的弧長參數化 39
3.5 曲線上的簡單運動 42
3.5.1 跑動 42
3.5.2 跳躍 43
3.5.3 相鄰路徑的切換 44
3.5.4 曲線上的旋轉插值 45
3.6 總結 46
參考文獻 46
第4 章 船的物理模擬及同步設計 47
摘要 47
4.1 浮力系統 48
4.1.1 浮力 48
4.1.2 升力 52
4.1.3 拉力 52
4.1.4 拍擊力 53
4.1.5 阻力上限 54
4.2 引擎系統 55
4.2.1 移動、轉向模擬 55
4.2.2 向心力計算 56
4.3 Entity-Component 及同步概覽 56
4.4 浮力系統物理更新機制 57
4.5 總結 59
參考文獻 59
第5 章 3D 遊戲碰撞之體素記憶體、效率最佳化 60
摘要 60
5.1 背景介紹 60
5.2 體素生成 62
5.3 體素記憶體最佳化 62
5.3.1 體素合併的原理 62
5.3.2 體素合併的算法 64
5.3.3 地面處理 65
5.3.4 水的處理 66
5.3.5 範圍控制 67
5.3.6 記憶體自管理 67
5.3.7 體素記憶體最佳化算法的效果 68
5.3.8 體素效率最佳化 69
5.4 NavMesh 生成 69
5.4.1 體素生成NavMesh 69
5.4.2 獲取地面高度 70
5.4.3 後台阻擋圖 71
5.4.4 前台優先權NavMesh 71
5.4.5 鋸齒 72
5.5 行走、輕功、攝像機碰撞 73
5.5.1 行走 73
5.5.2 輕功 75
5.5.3 攝像機碰撞 75
參考文獻 76
第三部分 計算機圖形
第6 章 移動端體育類寫實模型最佳化 78
摘要 78
6.1 引言 79
6.2 方案設計思路 79
6.2.1 角色統一與差異元素分析 79
6.2.2 角色表現=人體+服飾 80
6.2.3 角色資源整理 83
6.2.4 資源製作與實現 84
6.3 具體實現 92
6.3.1 實現流程 92
6.3.2 CPU 邏輯 93
6.3.3 GPU 渲染 97
6.4 效果收益、性能分析和結語 97
6.4.1 方案優劣勢 98
6.4.2 方案補充 99
6.4.3 套用場景 99
參考文獻 100
第7 章 大規模3D 模型數據的最佳化壓縮與精細漸進載入 101
摘要 101
7.1 引言 102
7.2 頂點數據最佳化 102
7.2.1 頂點數據合併去重 103
7.2.2 索引數據合併 104
7.2.3 頂點數據排序 104
7.2.4 子格線的拆分與合併 105
7.2.5 頂點數據編碼壓縮 105
7.3 有利於漸進載入的數據組織方式 112
7.4 總結 113
參考文獻 114
第四部分 人工智慧及後台架構
第8 章 遊戲AI 開發框架組件behaviac 和元編程 116
摘要 116
8.1 behaviac 的工作原理 117
8.1.1 類型信息 117
8.1.2 什麼是行為樹 118
8.1.3 例子1 119
8.1.4 執行說明 119
8.1.5 進階 120
8.1.6 例子2 120
8.1.7 再進階 123
8.1.8 總結 123
8.2 元編程在behaviac中的套用 125
8.2.1 模板特化 126
8.2.2 載入中的特例化 126
8.2.3 運行中的特例化 129
第9 章 跳點搜尋算法的效率、記憶體、路徑最佳化方法 131
摘要 131
9.1 引言 132
9.2 JPS算法 133
9.2.1 算法介紹 133
9.2.2 A*算法流程 133
9.2.3 JPS算法流程 135
9.2.4 JPS算法的“兩個定義、三個規則 135
9.2.5 算法舉例 137
9.3 JPS算法最佳化 138
9.3.1 JPS效率最佳化算法 138
9.3.2 JPS記憶體最佳化 144
9.3.3 路徑最佳化 145
9.4 GPPC 比賽解讀 146
9.4.1 GPPC 比賽與地圖數據集 146
9.4.2 GPPC 的評價體系 148
9.4.3 GPPC 參賽算法及其比較 150
參考文獻 151
第10 章 最佳化MMORPG開發效率及性能的有限多執行緒模型 152
摘要 152
10.1 引言 152
10.1.1 多進程單執行緒模型 153
10.1.2 單進程多執行緒模型 153
10.1.3 單進程單執行緒模型 153
10.2 有限多執行緒模型 154
10.3 使用OpenMP框架快速實現有限多執行緒模型 156
10.4 控制多執行緒邏輯代碼 158
10.5 異步化解決數據安全問題 159
10.6 對“不安全”訪問的防範 160
10.7 拆解大鎖 161
10.8 其他建議 163
參考文獻 164
第五部分 遊戲腳本系統
第11 章 Lua翻譯工具——C#轉Lua 166
摘要 166
11.1 設計初衷 166
11.2 實現原理 167
11.2.1 參考對比行業內類似的解決方案 167
11.2.2 翻譯原理 168
11.2.3 翻譯流程 168
11.3 翻譯示例 170
11.4 實現細節 174
11.4.1 連續賦值 175
11.4.2 switch 175
11.4.3 continue 176
11.4.4 不定參數 177
11.4.5 條件表達式 178
11.5 運行性能 179
11.6 TKLua 翻譯藍圖 179
11.6.1 類關係 180
11.6.2 類成員 180
11.6.3 方法體 181
11.7 發展方向 182
11.8 總結 184
參考文獻 185
第12 章 Unreal Engine 4集成Lua 186
摘要 186
12.1 引言 186
12.2 UE4 元信息 187
12.2.1 介紹 187
12.2.2 Lua 通過元信息與UE4互動 189
12.2.3 讀寫成員變數 189
12.2.4 函式調用 190
12.2.5 C++調用Lua 191
12.2.6 小結 192
12.3 通過模板元編程生成“膠水”代碼 192
12.3.1 接口設計 193
12.3.2 實現 195
12.3.3 讀寫成員變數 197
12.3.4 引用類型 198
12.3.5 導出函式 199
12.3.6 默認實參 200
12.3.7 默認生成的函式 202
12.3.8 C++調用Lua 203
12.3.9 小結 203
12.4 最佳化 203
12.4.1 UObject 指針與Table 203
12.4.2 結構體 204
12.4.3 運行時熱載入 205
第六部分 開發工具
第13 章 使用FASTBuild助力Unreal Engine 4 208
摘要 208
13.1 引言 209
13.2 UE4 分散式工具 209
13.2.1 Derived Data Cache DDC 209
13.2.2 Swarm 210
13.2.3 IncrediBuild 210
13.2.4 FASTBuild 211
13.3 在Windows系統下搭建FASTBuild 工作環境 213
13.3.1 網路架構 213
13.3.2 搭建基本環境 214
13.3.3 可用性驗證 215
13.4 使用FASTBuild 分散式編譯UE4代碼和項目代碼 219
13.4.1 準備工作 219
13.4.2 部署多機FASTBuild 環境 220
13.4.3 編譯UE4 代碼及對比測試 220
13.4.4 最佳化FASTBuild 224
13.4.5 再次測試分散式編譯UE4代碼 227
13.5 “秒”編UE4著色器 228
13.5.1 準備工作 229
13.5.2 大規模著色器編譯測試 237
13.5.3 材質編輯器內著色器編譯測試 240
13.6 總結 243
第14 章 一種高效的幀同步全過程日誌輸出方案 244
摘要 244
14.1 引言 244
14.2 幀同步的基礎理論 245
14.2.1 基本原理 245
14.2.2 系統抽象 246
14.3 本方案最終解決的問題 247
14.4 全日誌的自動插入 250
14.4.1 在函式第一行代碼之前自動插入日誌代碼 250
14.4.2 處理手動插入的日誌代碼 251
14.4.3 對每行日誌代碼進行唯一編碼 251
14.4.4 構建版本 252
14.4.5 整體工具流程及代碼清單 252
14.4.6 為什麼不採用IL 注入 256
14.5 運行時的日誌收集 256
14.5.1 整體業務流程 256
14.5.2 高效的存儲格式 258
14.5.3 高性能的日誌輸出 259
14.5.4 正確選擇合適的校驗算法 259
14.6 導出可讀性日誌信息 260
14.7 本方案思路的可移植性 260
14.8 總結 261
第15 章 基於解析符號表,使用注入的方式進行Profiler採樣的技術 262
摘要 262
15.1 進行測量之前的準備工作 263
15.1.1 注入的簡單例子 263
15.1.2 注入額外的代碼 264
15.1.3 注入的注意事項 265
15.2 性能的測量 267
15.2.1 時間的統計方法 267
15.2.2 針對函式的採樣 268
15.2.3 測量實戰 273
15.3 總結 276
作者簡介
騰訊遊戲十多位從事一線技術研發和前沿創新的骨幹開發技術專家。