《騰訊游戲開發(fā)精粹Ⅲ》是騰訊游戲研發(fā)團(tuán)隊不斷積累沉淀的技術(shù)結(jié)晶,是繼 2019年推出《騰訊游戲開發(fā)精粹I》和《《騰訊游戲開發(fā)精粹II》后的誠意續(xù)作。本書收錄了 21 個在上線項目中得到驗證的技術(shù)方案,深入介紹了騰訊公司在游戲開發(fā)領(lǐng)域的新研究成果和新技術(shù)進(jìn)展,涉及人工智能、計算機(jī)圖形、動畫和物理、客戶端架構(gòu)和技術(shù)、服務(wù)端架構(gòu)和技術(shù)及管線和工具等多個方向。本書適合游戲從業(yè)者、游戲相關(guān)專業(yè)師生及對游戲幕后技術(shù)原理感興趣的普通玩家。
騰訊游戲?qū)W堂是騰訊游戲設(shè)立的致力于打造游戲知識分享和行業(yè)交流的平臺,通過游戲行業(yè)專業(yè)人才培養(yǎng)、高校產(chǎn)學(xué)研合作、行業(yè)交流及開發(fā)者生態(tài)建設(shè)等,推動游戲行業(yè)良性發(fā)展,以能力生長,助游戲創(chuàng)作。
第1章 適用于MOBA游戲的幀同步移動預(yù)表現(xiàn)方案 1
1.1 網(wǎng)絡(luò)游戲的客戶端預(yù)表現(xiàn)技術(shù) 1
1.2 幀同步及客戶端預(yù)表現(xiàn)原理 2
1.2.1 幀同步的原理與流程 2
1.2.2 邏輯與表現(xiàn)分離 3
1.2.3 客戶端預(yù)表現(xiàn)基本流程 5
1.3 幀同步下的移動預(yù)表現(xiàn)實現(xiàn)方案 6
1.3.1 預(yù)測移動的基本表現(xiàn)要素 8
1.3.2 移動預(yù)表現(xiàn)與技能銜接處理 8
1.3.3 預(yù)測位置的修正 10
1.3.4 墻體和動態(tài)阻擋 14
1.4 移動手感指標(biāo)與實驗 15
1.5 總結(jié) 17
第2章 基于網(wǎng)格的視野技術(shù)方案 18
2.1 實現(xiàn)及原理 19
2.1.1 離線處理 21
2.1.2 運行時處理 25
2.1.3 渲染迷霧 28
2.2 性能優(yōu)化 29
2.2.1 內(nèi)存優(yōu)化 30
2.2.2 計算性能優(yōu)化 32
2.3 總結(jié) 33
第3章 移動端App集成UE的實踐 34
3.1 移動端App集成UE簡介 34
3.1.1 價值、意義和對手機(jī)QQ相關(guān)技術(shù)的影響 34
3.1.2 線上數(shù)據(jù)和成果展示 35
3.2 UE的SDK化之旅 35
3.2.1 啟動器改造—集成移動端App的關(guān)鍵起點 36
3.2.2 針對移動端App特點的引擎生命周期改造 41
3.3 針對移動端App需求的引擎極致輕量化 44
3.3.1 包體優(yōu)化:二進(jìn)制代碼文件 44
3.3.2 包體優(yōu)化:資源文件 46
3.3.3 內(nèi)存優(yōu)化 52
3.4 應(yīng)用功能的展示 58
3.4.1 QQ秀 58
3.4.2 游戲 59
3.4.3 聊天表情錄制 60
3.5 總結(jié) 60
第4章 UE的Dedicated Server優(yōu)化實踐 61
4.1 DS管理優(yōu)化 61
4.1.1 游戲服務(wù)架構(gòu) 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)化小結(jié) 79
4.3 網(wǎng)絡(luò)層優(yōu)化 79
4.3.1 網(wǎng)絡(luò)同步簡介 80
4.3.2 DirtySystem的構(gòu)建 80
4.3.3 網(wǎng)絡(luò)相關(guān)性優(yōu)化 83
4.4 業(yè)務(wù)層優(yōu)化 87
4.4.1 動畫優(yōu)化 87
4.4.2 OverlapEvents實現(xiàn)分析和性能優(yōu)化 90
4.5 總結(jié) 92
第5章 深入剖析高性能游戲數(shù)據(jù)庫TcaplusDB的存儲引擎 93
5.1 數(shù)據(jù)庫存儲引擎概述 93
5.2 LSH存儲引擎的整體架構(gòu) 94
5.2.1 LSH存儲引擎的設(shè)計思想 94
5.2.2 LSH存儲引擎架構(gòu)設(shè)計 95
5.2.3 存儲引擎的讀寫刪流程 97
5.3 LSH存儲引擎的實時自適應(yīng)設(shè)計 99
5.3.1 LSH存儲引擎的rehash 100
5.3.2 LSH存儲引擎進(jìn)行數(shù)據(jù)整理 102
5.4 引擎線程模型及動態(tài)負(fù)載均衡 105
5.4.1 TcaplusDB的線程模型 105
5.4.2 動態(tài)負(fù)載均衡算法 105
5.5 總結(jié)和展望 107
第6章 面向游戲的服務(wù)網(wǎng)格:Tbuspp2 108
6.1 微服務(wù)架構(gòu)模型簡介 108
6.2 游戲后臺對服務(wù)網(wǎng)格的能力需求分析 109
6.2.1 游戲與Web服務(wù)后臺運行模式的差異 110
6.2.2 為什么需要Tbuspp2 110
6.3 Tbuspp2設(shè)計 113
6.3.1 系統(tǒng)架構(gòu) 113
6.3.2 領(lǐng)域建模 114
6.4 Tbuspp2核心實現(xiàn)機(jī)制 118
6.4.1 信令、數(shù)據(jù)獨立信道,支持高效可靠信息交換 118
6.4.2 兩級隊列模型,提供功能擴(kuò)展彈性 120
6.4.3 按需路由同步,從容支持大規(guī)模集群 122
6.4.4 Stateful Group治理,全面支持游戲后臺需求 123
6.5 總結(jié) 128
第7章 混合語言程序的混合調(diào)用;鹧鎴D 129
7.1 混合語言程序 129
7.2 混合調(diào)用;鹧鎴D 130
7.2.1 性能熱點與火焰圖 130
7.2.2 原生調(diào)用棧獲取問題 131
7.2.3 腳本調(diào)用棧獲取問題 132
7.2.4 混合調(diào)用棧獲取問題 134
7.2.5 混合調(diào)用;鹧鎴D監(jiān)控服務(wù) 135
7.3 目標(biāo)進(jìn)程的調(diào)試控制 137
7.4 快速獲取跨進(jìn)程原生調(diào)用棧 140
7.4.1 優(yōu)化Linux平臺的原生調(diào)用棧獲取 140
7.4.2 優(yōu)化Windows平臺的原生調(diào)用棧獲取 144
7.4.3 addr2func的查詢優(yōu)化 146
7.4.4 Linux平臺中UE的堆棧獲取 148
7.5 安全獲取跨進(jìn)程腳本調(diào)用棧 150
7.5.1 獲取執(zhí)行環(huán)境指針 151
7.5.2 模擬調(diào)用;厮 154
7.6 合并腳本調(diào)用棧與原生調(diào)用棧 157
7.7 優(yōu)化混合調(diào)用棧統(tǒng)計數(shù)據(jù)編碼 158
7.8 混合調(diào)用;鹧鎴D獲取總結(jié) 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 總結(jié) 182
第9章 在TPS類游戲中應(yīng)用可微渲染進(jìn)行資源轉(zhuǎn)換與優(yōu)化 183
9.1 在TPS類游戲中應(yīng)用可微渲染簡介 183
9.2 背景知識 184
9.2.1 什么是可微渲染 184
9.2.2 可微渲染的光柵化實現(xiàn) 185
9.2.3 可微渲染在游戲和虛擬現(xiàn)實行業(yè)中的應(yīng)用 187
9.2.4 TPS類游戲的特點 187
9.3 基于可微渲染進(jìn)行資源轉(zhuǎn)換與優(yōu)化的一般框架 189
9.4 可微渲染器的實現(xiàn) 190
9.4.1 可微渲染器基本功能的實現(xiàn) 190
9.4.2 游戲方面的修改與擴(kuò)展 194
9.5 材質(zhì)擬合相關(guān)處理 196
9.5.1 觀察視角相關(guān)內(nèi)容的處理 196
9.5.2 材質(zhì)的處理 198
9.5.3 材質(zhì)轉(zhuǎn)換之后的效果 200
9.6 網(wǎng)格的處理 202
9.7 總結(jié)與展望 204
第10章 DirectX Shader Compiler適配UE4移動平臺 205
10.1 著色器與變體 205
10.1.1 移動平臺性能評估標(biāo)準(zhǔn) 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ī)模復(fù)雜場景下光照烘焙面臨的挑戰(zhàn)及解決方案 219
11.1 光照烘焙的背景與現(xiàn)有解決方案 219
11.2 光照烘焙中大規(guī)模光源的管理方案 221
11.2.1 單個光源的選取 222
11.2.2 單個光源的采樣 227
11.2.3 基于多重重要性采樣的樣本融合 228
11.2.4 方案的收益 229
11.3 烘焙中復(fù)雜光路下的采樣優(yōu)化 230
11.3.1 一種基于GPU實現(xiàn)的空間方向樹的自適應(yīng)路徑引導(dǎo)算法 230
11.3.2 基于時空蓄水池的路徑重采樣算法 237
11.4 烘焙中的降噪器優(yōu)化 241
11.4.1 基于雙邊濾波的自研光照貼圖降噪器 241
11.4.2 結(jié)合雙邊濾波的Optix降噪器優(yōu)化 246
第12章 光照烘焙中基于GPU實現(xiàn)的接縫修復(fù)方案 247
12.1 光照烘焙及接縫問題簡介 247
12.2 相關(guān)背景知識 248
12.2.1 關(guān)鍵術(shù)語 248
12.2.2 光線追蹤 249
12.2.3 聯(lián)合雙邊濾波 249
12.2.4 SVGF 250
12.3 工業(yè)界現(xiàn)有光照烘焙接縫修復(fù)方案 251
12.4 實現(xiàn)細(xì)節(jié) 252
12.4.1 Seam Finder Pass 252
12.4.2 Seam Filter Pass 255
12.5 接縫修復(fù)效果對比 257
12.6 總結(jié) 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材質(zhì) 266
13.4.2 VRS中的基元組件 270
13.4.3 VRS中的渲染硬件接口 273
13.5 VRS中Per-Draw的實踐 276
13.5.1 將VRS用于具有低頻細(xì)節(jié)材質(zhì)的物體 276
13.5.2 將VRS用于快速移動的物體 277
13.5.3 將VRS用于近處的物體 279
13.6 總結(jié)與展望 281
第14章 基于幀預(yù)測的移動端高幀率性能優(yōu)化技術(shù) 282
14.1 解決思路 283
14.2 生成預(yù)測幀的方法 285
14.2.1 使用深度在屏幕空間還原場景網(wǎng)格 287
14.2.2 頂點的重投影及走樣的修復(fù) 289
14.2.3 幀預(yù)測的實現(xiàn) 292
14.3 適配幀預(yù)測的管線 298
14.3.1 以“渲染幀-預(yù)測幀”為一對的渲染管線 298
14.3.2 直接在渲染線程插補(bǔ)中間幀的渲染管線 300
14.4 適配幀預(yù)測管線的負(fù)載均衡方案 301
14.4.1 管線的渲染負(fù)載均衡 302
14.4.2 成對渲染管線中Game線程游戲邏輯的跳幀更新及
負(fù)載均衡方案 304
14.5 優(yōu)化效果與總結(jié) 313
第15章 基于UE4的開放世界地形渲染 315
15.1 開放世界地形渲染簡介 315
15.2 方案背景 316
15.3 方案設(shè)計思路 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端技術(shù)細(xì)節(jié) 324
15.5.4 GPU端技術(shù)細(xì)節(jié) 326
15.6 效果收益與性能分析 332
15.6.1 測試場景 332
15.6.2 Metal平臺性能數(shù)據(jù) 333
15.6.3 OpenGL ES平臺性能數(shù)據(jù) 333
15.7 總結(jié) 335
第16章 游戲中的極端天氣渲染 336
16.1 游戲中的天氣 336
16.2 認(rèn)識風(fēng)暴云 337
16.3 中央氣旋分析與建模 338
16.3.1 風(fēng)暴位置與大小 339
16.3.2 風(fēng)暴眼的形態(tài) 340
16.3.3 風(fēng)暴流動與旋轉(zhuǎn) 345
16.3.4 風(fēng)暴眼的垂直結(jié)構(gòu) 349
16.3.5 風(fēng)暴色彩與氛圍 351
16.4 流體模擬 352
16.4.1 流體在數(shù)學(xué)上的表達(dá) 353
16.4.2 密度場擴(kuò)散過程 354
16.4.3 體積云的流體模擬 356
16.5 體積散射與風(fēng)暴云光照 358
16.5.1 光照方程 358
16.5.2 相函數(shù) 360
16.5.3 風(fēng)暴云光照 362
16.6 閃電與內(nèi)部光照 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格式設(shè)計 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數(shù)據(jù)計算 382
17.4.1 優(yōu)化base color 383
17.4.2 匹配partition 383
17.4.3 邊界擬合 383
17.4.4 ZTC轉(zhuǎn)碼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 總結(jié) 388
第18章 顯存管理 389
18.1 內(nèi)存管理 389
18.1.1 內(nèi)存碎片 389
18.1.2 內(nèi)存分配算法 390
18.2 通用顯存管理 392
18.2.1 為什么要實現(xiàn)通用顯存管理 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 基于光線查詢的材質(zhì)系統(tǒng) 411
19.2.1 現(xiàn)有實現(xiàn)及其局限性 412
19.2.2 可見性緩沖區(qū) 414
19.2.3 材質(zhì)系統(tǒng)的實現(xiàn) 415
19.3 光線追蹤反射 422
19.3.1 世界空間法線紋理和Thin GBuffer 423
19.3.2 實現(xiàn)原理 425
19.3.3 結(jié)果與分析 428
19.4 總結(jié) 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 基于預(yù)計算傳輸?shù)娜止庹?434
20.3.1 如何讓光照動起來 434
20.3.2 預(yù)計算輻射傳輸 434
20.3.3 數(shù)據(jù)存儲的優(yōu)化 435
20.3.4 基于預(yù)計算的半動態(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 使用混合架構(gòu)實現(xiàn)全動態(tài)GI的基本框架 438
20.4.4 使用屏幕空間數(shù)據(jù)做光照緩存 439
20.4.5 使用體素化數(shù)據(jù)做光照緩存 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章 動作匹配及神經(jīng)動畫技術(shù) 457
21.1 背景介紹 457
21.1.1 自然動畫的目標(biāo) 459
21.1.2 骨骼動畫 460
21.1.3 游戲動畫中的根骨骼 460
21.1.4 骨骼動畫中的正向動力學(xué) 461
21.1.5 骨骼動畫中的反向動力學(xué) 462
21.1.6 游戲動畫中的狀態(tài)機(jī) 464
21.2 動作匹配 465
21.2.1 動作捕捉中的數(shù)據(jù)采集 467
21.2.2 設(shè)計動作捕捉中的數(shù)據(jù)采集的腳本 468
21.2.3 未來軌跡的預(yù)測 469
21.2.4 動作姿態(tài)特征提取 471
21.2.5 運動數(shù)據(jù)的混合 472
21.2.6 動作匹配技術(shù)總結(jié) 473
21.3 基于學(xué)習(xí)的動作匹配 473
21.3.1 匹配數(shù)據(jù)的神經(jīng)網(wǎng)絡(luò)壓縮 473
21.3.2 將動作匹配中涉及的三個網(wǎng)絡(luò)進(jìn)行連接 474
21.3.3 神經(jīng)相位動畫技術(shù) 475
21.4 游戲動畫中的多風(fēng)格技術(shù) 481
21.4.1 游戲動畫中的多風(fēng)格及數(shù)據(jù)采集 481
21.4.2 多風(fēng)格網(wǎng)絡(luò)設(shè)計 482
21.4.3 風(fēng)格效果 484
21.5 小結(jié) 485
第22章 深度照片還原——Light Stage人像數(shù)字掃描管線 486
22.1 人像掃描介紹 486
22.2 拍攝 488
22.2.1 Light Stage拍攝 488
22.2.2 LookDev拍攝 489
22.3 數(shù)據(jù)處理 491
22.3.1 Light Stage數(shù)據(jù)處理 491
22.3.2 LookDev數(shù)據(jù)處理 493
22.4 三維重建 495
22.4.1 點云匹配 495
22.4.2 模型重構(gòu) 496
22.4.3 貼圖映射 496
22.5 美術(shù)制作 496
22.5.1 模型清理 497
22.5.2 模型包裹 498
22.5.3 PBR貼圖生成 499
22.5.4 細(xì)節(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 總結(jié) 526
第23章 語音驅(qū)動的面部動畫生成算法 527
23.1 解決方案與核心技術(shù) 527
23.1.1 面部動畫驅(qū)動技術(shù) 528
23.1.2 口型表情動畫生成技術(shù) 528
23.2 基于音素方案的實現(xiàn)流程 531
23.2.1 總體流程 531
23.2.2 音素、視素、動作單元的概念 532
23.2.3 從音頻文件到口型動畫的基礎(chǔ)實現(xiàn) 538
23.2.4 解決協(xié)同發(fā)音的難題 542
23.3 其他輔助效果 547
23.3.1 與情緒的結(jié)合 547
23.3.2 手勢、挑眉、身體姿態(tài)的配合 548
23.3.3 最終效果 551
23.4 總結(jié) 552