《騰訊游戲開發(fā)精粹Ⅲ》是騰訊游戲研發(fā)團隊不斷積累沉淀的技術結晶,是繼 2019年推出《騰訊游戲開發(fā)精粹I》和《《騰訊游戲開發(fā)精粹II》后的誠意續(xù)作。本書收錄了 21 個在上線項目中得到驗證的技術方案,深入介紹了騰訊公司在游戲開發(fā)領域的新研究成果和新技術進展,涉及人工智能、計算機圖形、動畫和物理、客戶端架構和技術、服務端架構和技術及管線和工具等多個方向。本書適合游戲從業(yè)者、游戲相關專業(yè)師生及對游戲幕后技術原理感興趣的普通玩家。
騰訊游戲學堂是騰訊游戲設立的致力于打造游戲知識分享和行業(yè)交流的平臺,通過游戲行業(yè)專業(yè)人才培養(yǎng)、高校產學研合作、行業(yè)交流及開發(fā)者生態(tài)建設等,推動游戲行業(yè)良性發(fā)展,以能力生長,助游戲創(chuàng)作。
第1章 適用于MOBA游戲的幀同步移動預表現方案 1
1.1 網絡游戲的客戶端預表現技術 1
1.2 幀同步及客戶端預表現原理 2
1.2.1 幀同步的原理與流程 2
1.2.2 邏輯與表現分離 3
1.2.3 客戶端預表現基本流程 5
1.3 幀同步下的移動預表現實現方案 6
1.3.1 預測移動的基本表現要素 8
1.3.2 移動預表現與技能銜接處理 8
1.3.3 預測位置的修正 10
1.3.4 墻體和動態(tài)阻擋 14
1.4 移動手感指標與實驗 15
1.5 總結 17
第2章 基于網格的視野技術方案 18
2.1 實現及原理 19
2.1.1 離線處理 21
2.1.2 運行時處理 25
2.1.3 渲染迷霧 28
2.2 性能優(yōu)化 29
2.2.1 內存優(yōu)化 30
2.2.2 計算性能優(yōu)化 32
2.3 總結 33
第3章 移動端App集成UE的實踐 34
3.1 移動端App集成UE簡介 34
3.1.1 價值、意義和對手機QQ相關技術的影響 34
3.1.2 線上數據和成果展示 35
3.2 UE的SDK化之旅 35
3.2.1 啟動器改造—集成移動端App的關鍵起點 36
3.2.2 針對移動端App特點的引擎生命周期改造 41
3.3 針對移動端App需求的引擎極致輕量化 44
3.3.1 包體優(yōu)化:二進制代碼文件 44
3.3.2 包體優(yōu)化:資源文件 46
3.3.3 內存優(yōu)化 52
3.4 應用功能的展示 58
3.4.1 QQ秀 58
3.4.2 游戲 59
3.4.3 聊天表情錄制 60
3.5 總結 60
第4章 UE的Dedicated Server優(yōu)化實踐 61
4.1 DS管理優(yōu)化 61
4.1.1 游戲服務架構 62
4.1.2 SeedDS模式優(yōu)化方案 64
4.1.3 MultiWorld模式 69
4.2 Tick優(yōu)化 74
4.2.1 引擎層Tick優(yōu)化 74
4.2.2 邏輯層Tick優(yōu)化 78
4.2.3 Tick優(yōu)化小結 79
4.3 網絡層優(yōu)化 79
4.3.1 網絡同步簡介 80
4.3.2 DirtySystem的構建 80
4.3.3 網絡相關性優(yōu)化 83
4.4 業(yè)務層優(yōu)化 87
4.4.1 動畫優(yōu)化 87
4.4.2 OverlapEvents實現分析和性能優(yōu)化 90
4.5 總結 92
第5章 深入剖析高性能游戲數據庫TcaplusDB的存儲引擎 93
5.1 數據庫存儲引擎概述 93
5.2 LSH存儲引擎的整體架構 94
5.2.1 LSH存儲引擎的設計思想 94
5.2.2 LSH存儲引擎架構設計 95
5.2.3 存儲引擎的讀寫刪流程 97
5.3 LSH存儲引擎的實時自適應設計 99
5.3.1 LSH存儲引擎的rehash 100
5.3.2 LSH存儲引擎進行數據整理 102
5.4 引擎線程模型及動態(tài)負載均衡 105
5.4.1 TcaplusDB的線程模型 105
5.4.2 動態(tài)負載均衡算法 105
5.5 總結和展望 107
第6章 面向游戲的服務網格:Tbuspp2 108
6.1 微服務架構模型簡介 108
6.2 游戲后臺對服務網格的能力需求分析 109
6.2.1 游戲與Web服務后臺運行模式的差異 110
6.2.2 為什么需要Tbuspp2 110
6.3 Tbuspp2設計 113
6.3.1 系統(tǒng)架構 113
6.3.2 領域建模 114
6.4 Tbuspp2核心實現機制 118
6.4.1 信令、數據獨立信道,支持高效可靠信息交換 118
6.4.2 兩級隊列模型,提供功能擴展彈性 120
6.4.3 按需路由同步,從容支持大規(guī)模集群 122
6.4.4 Stateful Group治理,全面支持游戲后臺需求 123
6.5 總結 128
第7章 混合語言程序的混合調用;鹧鎴D 129
7.1 混合語言程序 129
7.2 混合調用;鹧鎴D 130
7.2.1 性能熱點與火焰圖 130
7.2.2 原生調用棧獲取問題 131
7.2.3 腳本調用棧獲取問題 132
7.2.4 混合調用棧獲取問題 134
7.2.5 混合調用棧火焰圖監(jiān)控服務 135
7.3 目標進程的調試控制 137
7.4 快速獲取跨進程原生調用棧 140
7.4.1 優(yōu)化Linux平臺的原生調用棧獲取 140
7.4.2 優(yōu)化Windows平臺的原生調用棧獲取 144
7.4.3 addr2func的查詢優(yōu)化 146
7.4.4 Linux平臺中UE的堆棧獲取 148
7.5 安全獲取跨進程腳本調用棧 150
7.5.1 獲取執(zhí)行環(huán)境指針 151
7.5.2 模擬調用;厮 154
7.6 合并腳本調用棧與原生調用棧 157
7.7 優(yōu)化混合調用棧統(tǒng)計數據編碼 158
7.8 混合調用棧火焰圖獲取總結 162
第8章 出海游戲的LQA工業(yè)化 163
8.1 LQA工業(yè)化背景簡介 163
8.2 LQA工業(yè)化的過程及方法 166
8.2.1 LQA工業(yè)化的提取階段 168
8.2.2 LQA工業(yè)化的翻譯階段 170
8.2.3 LQA工業(yè)化的合入階段 171
8.2.4 LQA工業(yè)化的測試階段 175
8.2.5 LQA工業(yè)化的大版本合并階段 179
8.3 總結 182
第9章 在TPS類游戲中應用可微渲染進行資源轉換與優(yōu)化 183
9.1 在TPS類游戲中應用可微渲染簡介 183
9.2 背景知識 184
9.2.1 什么是可微渲染 184
9.2.2 可微渲染的光柵化實現 185
9.2.3 可微渲染在游戲和虛擬現實行業(yè)中的應用 187
9.2.4 TPS類游戲的特點 187
9.3 基于可微渲染進行資源轉換與優(yōu)化的一般框架 189
9.4 可微渲染器的實現 190
9.4.1 可微渲染器基本功能的實現 190
9.4.2 游戲方面的修改與擴展 194
9.5 材質擬合相關處理 196
9.5.1 觀察視角相關內容的處理 196
9.5.2 材質的處理 198
9.5.3 材質轉換之后的效果 200
9.6 網格的處理 202
9.7 總結與展望 204
第10章 DirectX Shader Compiler適配UE4移動平臺 205
10.1 著色器與變體 205
10.1.1 移動平臺性能評估標準 205
10.1.2 DirectX Shader Compiler 207
10.2 適配UE 208
10.2.1 OpenGL & Vulkan RHI適配 208
10.2.2 Metal RHI適配 211
第11章 大規(guī)模復雜場景下光照烘焙面臨的挑戰(zhàn)及解決方案 219
11.1 光照烘焙的背景與現有解決方案 219
11.2 光照烘焙中大規(guī)模光源的管理方案 221
11.2.1 單個光源的選取 222
11.2.2 單個光源的采樣 227
11.2.3 基于多重重要性采樣的樣本融合 228
11.2.4 方案的收益 229
11.3 烘焙中復雜光路下的采樣優(yōu)化 230
11.3.1 一種基于GPU實現的空間方向樹的自適應路徑引導算法 230
11.3.2 基于時空蓄水池的路徑重采樣算法 237
11.4 烘焙中的降噪器優(yōu)化 241
11.4.1 基于雙邊濾波的自研光照貼圖降噪器 241
11.4.2 結合雙邊濾波的Optix降噪器優(yōu)化 246
第12章 光照烘焙中基于GPU實現的接縫修復方案 247
12.1 光照烘焙及接縫問題簡介 247
12.2 相關背景知識 248
12.2.1 關鍵術語 248
12.2.2 光線追蹤 249
12.2.3 聯合雙邊濾波 249
12.2.4 SVGF 250
12.3 工業(yè)界現有光照烘焙接縫修復方案 251
12.4 實現細節(jié) 252
12.4.1 Seam Finder Pass 252
12.4.2 Seam Filter Pass 255
12.5 接縫修復效果對比 257
12.6 總結 259
第13章 VRS在移動端的集成與實踐 260
13.1 VRS概述 260
13.2 VRS介紹 260
13.2.1 VRS的概念 261
13.2.2 VRS的原理 261
13.2.3 VRS的作用 262
13.3 著色率控制方式 263
13.3.1 Per-Draw 263
13.3.2 Per-Triangle 263
13.3.3 Per-Region 264
13.4 VRS中Per-Draw的集成 265
13.4.1 UE4中的VRS材質 266
13.4.2 VRS中的基元組件 270
13.4.3 VRS中的渲染硬件接口 273
13.5 VRS中Per-Draw的實踐 276
13.5.1 將VRS用于具有低頻細節(jié)材質的物體 276
13.5.2 將VRS用于快速移動的物體 277
13.5.3 將VRS用于近處的物體 279
13.6 總結與展望 281
第14章 基于幀預測的移動端高幀率性能優(yōu)化技術 282
14.1 解決思路 283
14.2 生成預測幀的方法 285
14.2.1 使用深度在屏幕空間還原場景網格 287
14.2.2 頂點的重投影及走樣的修復 289
14.2.3 幀預測的實現 292
14.3 適配幀預測的管線 298
14.3.1 以“渲染幀-預測幀”為一對的渲染管線 298
14.3.2 直接在渲染線程插補中間幀的渲染管線 300
14.4 適配幀預測管線的負載均衡方案 301
14.4.1 管線的渲染負載均衡 302
14.4.2 成對渲染管線中Game線程游戲邏輯的跳幀更新及
負載均衡方案 304
14.5 優(yōu)化效果與總結 313
第15章 基于UE4的開放世界地形渲染 315
15.1 開放世界地形渲染簡介 315
15.2 方案背景 316
15.3 方案設計思路 316
15.4 地形著色方式 318
15.4.1 Weightmap著色 318
15.4.2 MaterialID著色 319
15.4.3 Hybrid MaterialID著色 319
15.4.4 MaterialID編輯工具 320
15.5 地形渲染管線 321
15.5.1 UE4中的Landscape渲染流程 322
15.5.2 GPU Driven Terrain渲染流程 323
15.5.3 CPU端技術細節(jié) 324
15.5.4 GPU端技術細節(jié) 326
15.6 效果收益與性能分析 332
15.6.1 測試場景 332
15.6.2 Metal平臺性能數據 333
15.6.3 OpenGL ES平臺性能數據 333
15.7 總結 335
第16章 游戲中的極端天氣渲染 336
16.1 游戲中的天氣 336
16.2 認識風暴云 337
16.3 中央氣旋分析與建模 338
16.3.1 風暴位置與大小 339
16.3.2 風暴眼的形態(tài) 340
16.3.3 風暴流動與旋轉 345
16.3.4 風暴眼的垂直結構 349
16.3.5 風暴色彩與氛圍 351
16.4 流體模擬 352
16.4.1 流體在數學上的表達 353
16.4.2 密度場擴散過程 354
16.4.3 體積云的流體模擬 356
16.5 體積散射與風暴云光照 358
16.5.1 光照方程 358
16.5.2 相函數 360
16.5.3 風暴云光照 362
16.6 閃電與內部光照 365
16.6.1 閃電光照擬合 365
16.6.2 閃電形態(tài) 366
16.7 環(huán)境交互 367
16.7.1 投影 368
16.7.2 自定義緩沖 368
第17章 移動端貼圖壓縮優(yōu)化 371
17.1 ZTC紋理壓縮 371
17.2 移動端常見壓縮格式回顧 371
17.2.1 ETC1 372
17.2.2 ETC1s 374
17.2.3 ASTC 374
17.2.4 PVRTC 376
17.2.5 ETC1和ASTC的問題 377
17.3 ZTC格式設計 377
17.3.1 支持更多的塊尺寸 378
17.3.2 塊分區(qū) 378
17.3.3 Endpoint Direction(PCA)優(yōu)化 379
17.3.4 亮度碼本修訂 380
17.3.5 RGBA格式的壓縮 380
17.3.6 基于雙線性插值的編碼 381
17.4 ZTC數據計算 382
17.4.1 優(yōu)化base color 383
17.4.2 匹配partition 383
17.4.3 邊界擬合 383
17.4.4 ZTC轉碼ASTC 384
17.4.5 未來的工作 385
17.5 ZTC測試 385
17.5.1 RGB 386
17.5.2 Normal 386
17.5.3 RGBA 387
17.6 總結 388
第18章 顯存管理 389
18.1 內存管理 389
18.1.1 內存碎片 389
18.1.2 內存分配算法 390
18.2 通用顯存管理 392
18.2.1 為什么要實現通用顯存管理 392
18.2.2 VMA介紹 393
18.2.3 VMA顯存分配 393
18.2.4 VMA顯存碎片整理 402
18.3 專用顯存管理 403
18.3.1 GPU Driven顯存管理需求 403
18.3.2 GPU Driven顯存分配 404
18.3.3 顯存碎片整理 406
第19章 基于Vulkan Ray Query的移動端光線追蹤反射效果 409
19.1 移動平臺的光線追蹤特性簡介 409
19.1.1 支持光線追蹤的圖形API 410
19.1.2 光線追蹤管線和光線查詢 410
19.2 基于光線查詢的材質系統(tǒng) 411
19.2.1 現有實現及其局限性 412
19.2.2 可見性緩沖區(qū) 414
19.2.3 材質系統(tǒng)的實現 415
19.3 光線追蹤反射 422
19.3.1 世界空間法線紋理和Thin GBuffer 423
19.3.2 實現原理 425
19.3.3 結果與分析 428
19.4 總結 429
第20章 移動端全局光照演變的思考與實踐 430
20.1 什么是全局光照 430
20.2 靜態(tài)光照烘焙 431
20.2.1 光照貼圖 431
20.2.2 光照探針 432
20.2.3 靜態(tài)光照烘焙的局限性與優(yōu)勢 433
20.3 基于預計算傳輸的全局光照 434
20.3.1 如何讓光照動起來 434
20.3.2 預計算輻射傳輸 434
20.3.3 數據存儲的優(yōu)化 435
20.3.4 基于預計算的半動態(tài)GI的局限性 436
20.4 動態(tài)全局光照SmartGI 437
20.4.1 移動端全動態(tài)GI方案的挑戰(zhàn) 437
20.4.2 已有全動態(tài)GI方案的分析 437
20.4.3 使用混合架構實現全動態(tài)GI的基本框架 438
20.4.4 使用屏幕空間數據做光照緩存 439
20.4.5 使用體素化數據做光照緩存 440
20.4.6 使用離散圖元做光照緩存 442
20.4.7 多光照緩存的收集 444
20.4.8 全動態(tài)GI的性能優(yōu)化 446
20.4.9 全動態(tài)GI的渲染效果 452
20.5 未來的展望與思考 455
20.5.1 GI算法的持續(xù)迭代 455
20.5.2 移動端硬件能力的持續(xù)演變和提升 456
第21章 動作匹配及神經動畫技術 457
21.1 背景介紹 457
21.1.1 自然動畫的目標 459
21.1.2 骨骼動畫 460
21.1.3 游戲動畫中的根骨骼 460
21.1.4 骨骼動畫中的正向動力學 461
21.1.5 骨骼動畫中的反向動力學 462
21.1.6 游戲動畫中的狀態(tài)機 464
21.2 動作匹配 465
21.2.1 動作捕捉中的數據采集 467
21.2.2 設計動作捕捉中的數據采集的腳本 468
21.2.3 未來軌跡的預測 469
21.2.4 動作姿態(tài)特征提取 471
21.2.5 運動數據的混合 472
21.2.6 動作匹配技術總結 473
21.3 基于學習的動作匹配 473
21.3.1 匹配數據的神經網絡壓縮 473
21.3.2 將動作匹配中涉及的三個網絡進行連接 474
21.3.3 神經相位動畫技術 475
21.4 游戲動畫中的多風格技術 481
21.4.1 游戲動畫中的多風格及數據采集 481
21.4.2 多風格網絡設計 482
21.4.3 風格效果 484
21.5 小結 485
第22章 深度照片還原——Light Stage人像數字掃描管線 486
22.1 人像掃描介紹 486
22.2 拍攝 488
22.2.1 Light Stage拍攝 488
22.2.2 LookDev拍攝 489
22.3 數據處理 491
22.3.1 Light Stage數據處理 491
22.3.2 LookDev數據處理 493
22.4 三維重建 495
22.4.1 點云匹配 495
22.4.2 模型重構 496
22.4.3 貼圖映射 496
22.5 美術制作 496
22.5.1 模型清理 497
22.5.2 模型包裹 498
22.5.3 PBR貼圖生成 499
22.5.4 細節(jié)紋理貼圖 499
22.5.5 高模制作 502
22.5.6 烘焙 503
22.5.7 貼圖制作 503
22.6 LookDev 506
22.6.1 毛發(fā)制作 506
22.6.2 光照環(huán)境匹配 509
22.6.3 Maya Arnold 513
22.6.4 Unreal Substrate 516
22.6.5 Unreal MetaHuman 520
22.7 總結 526
第23章 語音驅動的面部動畫生成算法 527
23.1 解決方案與核心技術 527
23.1.1 面部動畫驅動技術 528
23.1.2 口型表情動畫生成技術 528
23.2 基于音素方案的實現流程 531
23.2.1 總體流程 531
23.2.2 音素、視素、動作單元的概念 532
23.2.3 從音頻文件到口型動畫的基礎實現 538
23.2.4 解決協同發(fā)音的難題 542
23.3 其他輔助效果 547
23.3.1 與情緒的結合 547
23.3.2 手勢、挑眉、身體姿態(tài)的配合 548
23.3.3 最終效果 551
23.4 總結 552