Vulkan開發實戰詳解 ,

作者:吳亞峰

出版社:人民郵電出版社

ISBN:9787115509390

$58.50

產品號碼: 126303 貨號: 9787115509390 分類: , 標籤: , ,

本書共分為19章,介紹了Vulkan的誕生、特點、開發環境的搭建以及運行機制、渲染管線和調試技術,著色器程式設計語言—GLSL、投影及各種變換、光照、紋理映射、3D模型的載入、混合與霧、兩種測試及片元丟棄、頂點著色器的妙用、片元著色器的妙用、真實光學環境的類比、陰影及高級光照、幾種高級著色器特效、骨骼動畫、Vulkan的性能優化等,最後以一個休閒遊戲—方塊歷險記的案例來展示Vulkan的功能與技術。

本書按照必知必會的基礎知識、基於Vulkan實現基本特效以及高級特效、完整遊戲案例的順序,循序漸進地進行詳細講解,適合不同需求、不同水準層次的各類讀者。為了便於讀者學習,隨書提供了書中所有案例的完整原始程式碼(書中所有案例都給出了安卓版和Windows版,最後的大案例還進一步給出了macOS、iOS和Linux版),最大限度地幫助讀者快速地掌握各方面的開發技術。

本書適合遊戲開發者、程式師學習,也可以作為大專院校相關專業的師生學習用書和培訓學校的教材。

 

目錄

第1章 初識Vulkan 1
1.1 Vulkan概覽 1
1.1.1 Vulkan簡介 1
1.1.2 支援Vulkan的遊戲概覽 2
1.2 搭建開發環境 4
1.2.1 Android平臺開發環境的配置 4
1.2.2 Windows平臺開發環境的配置 8
1.3 第一個Vulkan程式 15
1.3.1 案例的運行效果 15
1.3.2 Vulkan應用程式的基本架構 15
1.3.3 3色三角形案例相關類的介紹 20
1.3.4 Vulkan中的常用方法 22
1.3.5 MyVulkanManager類的基本結構 28
1.3.6 創建Vulkan實例 31
1.3.7 獲取物理設備清單 32
1.3.8 創建邏輯裝置 32
1.3.9 創建命令緩衝 33
1.3.10 獲取設備中支援圖形工作的佇列 35
1.3.11 初始化交換鏈 35
1.3.12 創建深度緩衝 41
1.3.13 創建渲染通道 43
1.3.14 創建幀緩衝 46
1.3.15 創建繪製用物體 47
1.3.16 初始化渲染管線 51
1.3.17 創建柵欄和初始化呈現資訊 62
1.3.18 初始化基本變換矩陣、攝像機矩陣、投影矩陣 63
1.3.19 執行繪製 63
1.3.20 銷毀相關物件 66
1.3.21 整體流程的執行 67
1.3.22 頂點著色器和片元著色器 68
1.4 Vulkan中立體物體的構建 70
1.5 本章小結 71

第2章 渲染管線和調試技術 72
2.1 渲染管線 72
2.2 著色器的預編譯 79
2.3 Vulkan調試技術 81
2.4 Vulkan GPU大PK 89
2.4.1 移動端GPU的4大家族 89
2.4.2 PC端GPU中3大家族 91
2.5 本章小結 92

第3章 著色器程式設計語言——GLSL 93
3.1 著色語言概述 93
3.2 著色語言基礎 94
3.2.1 資料類型概述 94
3.2.2 資料類型的基本使用 98
3.2.3 運算子 100
3.2.4 各個資料類型的構造函數 102
3.2.5 類型轉換 104
3.2.6 存儲限定詞 104
3.2.7 插值限定詞 107
3.2.8 一致塊 108
3.2.9 layout限定詞 109
3.2.10 流程控制 111
3.2.11 函數的聲明和使用 113
3.2.12 片元著色器中浮點及整型變數精度的指定 114
3.2.13 程式的基本結構 114
3.3 特殊的內建變數 115
3.3.1 頂點著色器中的內建變數 115
3.3.2 片元著色器中的內建變數 116
3.3.3 內建常量 117
3.4 著色語言的內置函數 117
3.4.1 角度轉換與三角函數 118
3.4.2 指數函數 119
3.4.3 常見函數 120
3.4.4 幾何函數 123
3.4.5 矩陣函數 124
3.4.6 向量關係函數 125
3.4.7 紋理採樣函數 126
3.4.8 微分函數 129
3.4.9 浮點數打包與解包函數 129
3.5 用invariant修飾符避免值變問題 130
3.6 前置處理器 131
3.7 本章小結 132

第4章 投影與各種變換 133
4.1 矩陣相關類的介紹 133
4.1.1 矩陣數學計算類—Matrix 133
4.1.2 矩陣狀態管理類—MatrixState3D 134
4.2 攝像機的設置 137
4.3 兩種投影方式 138
4.3.1 正交投影 138
4.3.2 透視投影 144
4.3.3 推送常量 146
4.4 各種變換 148
4.4.1 基本變換的相關數學知識 148
4.4.2 平移變換 149
4.4.3 旋轉變換 150
4.4.4 縮放變換 151
4.4.5 基本變換的實質 152
4.5 所有變換的完整流程 153
4.6 繪製方式 156
4.6.1 各種繪製方式概覽 156
4.6.2 點與線段繪製方式 158
4.6.3 三角形條帶與扇面繪製方式 161
4.6.4 索引法繪製 164
4.7 設置合理的視角 169
4.8 設置合理的投影參數 174
4.9 深度偏移 178
4.10 捲繞和背面剪裁 181
4.10.1 基本知識 181
4.10.2 一個簡單的案例 182
4.11 間接繪製 183
4.11.1 背景知識 184
4.11.2 頂點法間接繪製 184
4.11.3 索引法間接繪製 186
4.12 本章小結 188

第5章 光照 189
5.1 曲面物體的構建 189
5.1.1 球體構建的基本原理 189
5.1.2 案例效果概覽 190
5.1.3 開發步驟 190
5.2 基本光照效果 194
5.2.1 光照的基本模型 194
5.2.2 環境光 195
5.2.3 散射光 199
5.2.4 鏡面光 205
5.2.5 3種光照通道的合成 210
5.3 定位光與定向光 212
5.4 點法向量和麵法向量 215
5.5 光照的每頂點計算與每片元計算 218
5.6 本章小結 223

第6章 紋理映射 224
6.1 初識紋理映射 224
6.2 一個簡單的案例 225
6.2.1 開發前的準備工作 225
6.2.2 紋理相關類 226
6.2.3 案例代碼的開發 241
6.2.4 圖像的瓦片組織方式 248
6.2.5 色彩通道的靈活組合 250
6.3 紋理拉伸 251
6.3.1 四種拉伸方式概覽 251
6.3.2 不同拉伸方式的案例 254
6.4 紋理採樣 259
6.4.1 紋理採樣概述 259
6.4.2 最近點採樣 259
6.4.3 線性紋理採樣 260
6.4.4 MIN與MAG採樣 261
6.4.5 不同紋理採樣方式的案例 262
6.5 Mipmap紋理 266
6.5.1 基本原理 266
6.5.2 一個簡單的案例 268
6.6 多重紋理與過程紋理 272
6.6.1 案例概覽 273
6.6.2 將2D紋理映射到球面上的策略 273
6.6.3 案例的場景結構 274
6.6.4 開發過程 275
6.7 壓縮紋理的使用 283
6.7.1 Android平臺下的壓縮紋理 284
6.7.2 PC中Windows平臺下的壓縮紋理 286
6.8 點精靈 289
6.8.1 基本知識 289
6.8.2 一個簡單的案例 289
6.9 3D紋理 292
6.9.1 3D棋盤紋理的準備 293
6.9.2 3D棋盤紋理案例的開發 294
6.10 2D紋理陣列 297
6.10.1 2D紋理陣列的準備 297
6.10.2 2D紋理陣列案例的開發 298
6.11 各向異性過濾 302
6.11.1 背景知識 303
6.11.2 一個簡單的案例 303
6.12 本章小結 305

第7章 更逼真的場景——3D模型的載入 306
7.1 obj模型檔概述 306
7.1.1 obj檔的格式 306
7.1.2 用3ds Max設計3D模型 307
7.2 載入obj檔 308
7.2.1 載入僅有頂點座標資料與面資料的obj檔 308
7.2.2 載入後自動計算面法向量 312
7.2.3 載入後自動計算平均法向量 315
7.2.4 載入紋理座標 317
7.2.5 載入頂點法向量 320
7.3 雙面光照 321
7.4 本章小結 324

第8章 獨特的場景渲染技術——混合與霧 325
8.1 混合技術 325
8.1.1 基本知識 325
8.1.2 源因數和目標因數 326
8.1.3 簡單混合效果的案例 328
8.2 地月系雲層效果的實現 330
8.3 霧 333
8.3.1 霧的原理與優勢 333
8.3.2 霧的簡單實現 334
8.4 本章小結 336

第9章 常用3D開發小技巧 337
9.1 標誌板 337
9.1.1 案例效果與基本原理 337
9.1.2 開發步驟 338
9.2 灰度圖地形 341
9.2.1 基本原理 341
9.2.2 開發前的準備工作 342
9.2.3 普通灰度圖地形 342
9.2.4 過程紋理地形 344
9.2.5 Mipmap地形 347
9.2.6 頂點著色器採樣紋理地形 351
9.3 高真實感地形 353
9.3.1 基本思路 353
9.3.2 地形設計工具EarthSculptor的使用 354
9.3.3 一個簡單的案例 356
9.4 天空盒與天空穹 358
9.4.1 天空盒 358
9.4.2 天空穹 359
9.4.3 天空盒與天空穹的使用技巧 361
9.5 簡單鏡像效果 361
9.5.1 基本原理 361
9.5.2 基本效果案例 362
9.5.3 升級效果案例 364
9.6 非真實感繪製 366
9.6.1 基本原理與案例效果 366
9.6.2 具體開發步驟 368
9.7 描邊效果的實現 370
9.7.1 沿法線擠出輪廓 370
9.7.2 視空間中擠出 373
9.8 本章小結 374

第10章 兩種測試及片元丟棄 375
10.1 剪裁測試 375
10.1.1 基本原理與核心代碼 375
10.1.2 一個簡單的案例 375
10.2 範本測試 377
10.2.1 基本原理 377
10.2.2 一個簡單的案例 380
10.3 片元丟棄操作 383
10.4 任意剪裁平面 385
10.4.1 基本原理 385
10.4.2 茶壺被任意平面剪裁的案例 386
10.5 本章小結 387

第11章 頂點著色器的妙用 388
11.1 飄揚的旗幟 388
11.1.1 基本原理 388
11.1.2 開發步驟 389
11.2 扭動的軟糖 392
11.2.1 基本原理 392
11.2.2 開發步驟 393
11.3 風吹椰林場景的開發 394
11.3.1 椰子樹隨風搖擺的基本原理 395
11.3.2 開發步驟 396
11.4 展翅飛翔的雄鷹 400
11.4.1 基本原理 400
11.4.2 開發步驟 400
11.5 二維扭曲 402
11.5.1 基本原理 403
11.5.2 開發步驟 403
11.6 吹氣膨脹特效 406
11.6.1 基本原理 406
11.6.2 開發步驟 406
11.7 本章小結 407

第12章 片元著色器的妙用 408
12.1 程式紋理技術 408
12.1.1 磚塊著色器 408
12.1.2 沙灘球著色器 410
12.2 數字影像處理 411
12.2.1 卷積的基本知識 411
12.2.2 平滑過濾 412
12.2.3 邊緣檢測 413
12.2.4 銳化處理 414
12.2.5 浮雕效果 414
12.2.6 圖像漸變 415
12.2.7 卡通渲染 416
12.3 分形著色器 418
12.3.1 曼德布羅集簡介 418
12.3.2 曼德布羅集著色器的實現 419
12.3.3 將曼德布羅集紋理應用到實際物體上 421
12.3.4 茱莉亞集著色器的實現 421
12.4 3D紋理的妙用 423
12.4.1 雜訊函數的基礎知識 423
12.4.2 柏林雜訊生成工具 426
12.4.3 3D雜訊木紋理茶壺的開發 427
12.5 體積霧 429
12.5.1 基本原理 429
12.5.2 開發步驟 430
12.6 粒子系統火焰的開發 431
12.6.1 火焰的基本原理 431
12.6.2 普通版火焰 433
12.6.3 點精靈版火焰 441
12.7 本章小結 444

第13章 真實光學環境的類比 445
13.1 反射環境模擬 445
13.1.1 案例效果與基本原理 445
13.1.2 開發前的準備工作 446
13.1.3 開發步驟 447
13.2 折射環境模擬 449
13.2.1 案例效果與基本原理 449
13.2.2 開發步驟 450
13.3 色散效果模擬 452
13.3.1 案例效果與基本原理 452
13.3.2 開發步驟 452
13.4 菲涅爾效果的模擬 453
13.4.1 案例效果與基本原理 453
13.4.2 開發步驟 454
13.5 凹凸映射 455
13.5.1 案例效果與基本原理 455
13.5.2 法向量紋理圖的生成 456
13.5.3 切向量的計算 458
13.5.4 案例的開發 459
13.6 鏡頭光暈 464
13.6.1 案例效果與基本原理 464
13.6.2 鏡頭光暈案例 465
13.7 投影貼圖 468
13.7.1 案例效果與基本原理 468
13.7.2 開發步驟 470
13.8 繪製到紋理 472
13.8.1 案例效果與基本原理 472
13.8.2 開發步驟 473
13.9 高級鏡像 476
13.9.1 案例效果與基本原理 476
13.9.2 開發步驟 477
13.10 高真實感水面倒影 480
13.10.1 案例效果與基本原理 480
13.10.2 開發步驟 481
13.11 本章小結 484

第14章 陰影及高級光照 485
14.1 多重渲染目標 485
14.1.1 基本知識 485
14.1.2 一個簡單的案例 486
14.2 陰影的重要性 491
14.3 平面陰影 493
14.3.1 案例效果與基本原理 493
14.3.2 開發步驟 494
14.4 陰影映射 497
14.4.1 案例效果與基本原理 497
14.4.2 距離紋理的生成 498
14.4.3 陰影場景的繪製 501
14.5 陰影貼圖 506
14.5.1 案例效果與基本原理 506
14.5.2 開發步驟 507
14.6 靜態光照貼圖 508
14.6.1 案例效果與基本原理 508
14.6.2 使用3ds Max製作靜態光照貼圖 509
14.6.3 案例的開發 510
14.7 聚光燈高級光源 512
14.7.1 第一種實現的案例效果與基本原理 513
14.7.2 第一種實現案例的開發步驟 514
14.7.3 第二種實現的案例效果與基本原理 515
14.7.4 第二種實現案例的開發步驟 516
14.8 延遲渲染 517
14.8.1 案例效果與基本原理 517
14.8.2 開發步驟 518
14.9 環境光遮擋 522
14.9.1 基本原理 522
14.9.2 一個簡單的案例 524
14.9.3 效率的提升 526
14.9.4 平滑處理 528
14.10 本章小結 529

第15章 幾種高級著色器特效 530
15.1 運動模糊 530
15.1.1 普通運動模糊 530
15.1.2 高級運動模糊 533
15.2 遮擋透視效果 536
15.2.1 案例效果與基本原理 536
15.2.2 開發步驟 538
15.3 積雪效果 541
15.3.1 案例效果與基本原理 541
15.3.2 開發步驟 541
15.4 背景虛化 542
15.4.1 案例效果與基本原理 542
15.4.2 開發步驟 543
15.5 泛光效果 545
15.5.1 案例效果與基本原理 545
15.5.2 開發步驟 546
15.6 色調映射 548
15.6.1 案例效果與背景知識 548
15.6.2 開發步驟 549
15.7 體繪製 550
15.7.1 案例效果與基本原理 550
15.7.2 開發步驟 551
15.8 本章小結 553

第16章 骨骼動畫 554
16.1 開發骨骼動畫 554
16.1.1 骨骼動畫的基本原理 554
16.1.2 開發步驟 557
16.1.3 機器人模型在地面上運動時的問題 563
16.2 ms3d骨骼動畫檔的載入 566
16.2.1 ms3d檔的格式 566
16.2.2 將3ds Max動畫檔轉換為ms3d文件 570
16.2.3 載入ms3d檔案例的開發 574
16.3 自訂格式骨骼動畫的載入 591
16.3.1 bnggdh檔的格式 591
16.3.2 Bnggdh類 594
16.3.3 載入bnggdh檔的案例 594
16.4 本章小結 606

第17章 讓應用運行得更流暢——性能優化 607
17.1 著色器的優化 607
17.1.1 計算量及計算頻率的相關問題 607
17.1.2 其他需要注意的問題 608
17.2 紋理圖的優化 609
17.3 3D圖形繪製的優化 610
17.3.1 CPU階段的優化 610
17.3.2 幾何階段的優化 611
17.3.3 光柵化階段的優化 612
17.4 圖元重啟 612
17.4.1 基本原理 612
17.4.2 一個簡單的案例 613
17.5 幾何體實例渲染 614
17.5.1 基本原理 614
17.5.2 基於實例渲染的土星光環案例 615
17.6 視錐體剪裁 620
17.6.1 AABB包圍盒的基本原理 620
17.6.2 AABB包圍盒的計算 621
17.6.3 視錐體剪裁的基本思路及實現策略 622
17.6.4 一個簡單的案例 623
17.7 遮擋查詢 626
17.7.1 相關方法 626
17.7.2 基本原理和實現策略 626
17.7.3 一個簡單的案例 627
17.8 計算著色器的使用 630
17.8.1 基礎知識 630
17.8.2 動態法向量光照水面案例 633
17.9 多執行緒併發渲染 640
17.9.1 基本原理 641
17.9.2 飛船案例的開發 641
17.10 多子通道渲染 646
17.10.1 基本原理 646
17.10.2 一個簡單的案例 647
17.11 細節級別LOD 652
17.12 本章小結 653

第18章 雜項 654
18.1 四元數旋轉 654
18.1.1 基本原理與案例效果 654
18.1.2 開發步驟 656
18.2 3D拾取技術 662
18.2.1 案例效果與基本原理 662
18.2.2 開發步驟 665
18.3 多重採樣抗鋸齒 670
18.3.1 基本知識與案例效果 670
18.3.2 一個簡單的案例 671
18.4 保存螢幕截圖 674
18.5 Windows系統視窗縮放 676
18.6 曲面細分著色器 677
18.6.1 基本知識 677
18.6.2 一個簡單的案例 680
18.7 幾何著色器 685
18.8 macOS、iOS與Linux平臺下Vulkan
應用的開發 688
18.8.1 macOS與iOS平臺下Vulkan
應用程式的開發 688
18.8.2 Linux平臺下Vulkan圖形應用
程式的開發 692
18.9 本章小結 700

第19章 基於Vulkan的3D休閒遊戲——
方塊歷險記 701
19.1 遊戲背景及功能概述 701
19.1.1 遊戲開發背景概述 701
19.1.2 遊戲功能簡介 701
19.2 遊戲的策劃及準備工作 702
19.2.1 遊戲的策劃 703
19.2.2 遊戲的開發準備工作 703
19.3 遊戲的架構 705
19.3.1 各類的簡要介紹 705
19.3.2 遊戲框架簡介 706
19.4 佈景相關類 707
19.4.1 3D佈景類——My3Dlayer 707
19.4.2 總繪製類——MyDraw 712
19.4.3 攝像機管理類——
CameraUtil 716
19.4.4 3D物體創建類——
Square3D 717
19.5 機關與方塊相關類 718
19.5.1 方塊管理類——
ZFTManager 718
19.5.2 地刺機關管理類——
DiCiBox 721
19.5.3 掉落塊機關管理類——
DiaoLuoManager 722
19.6 遊戲入口及輔助工具類 724
19.6.1 遊戲入口類——main 724
19.6.2 觸控監聽類——Touch2D 726
19.7 著色器的開發 728
19.8 遊戲的優化及改進 730
 

作者介紹

吳亞峰,畢業于北京郵電大學,後留學澳大利亞臥龍崗大學取得碩士學位。1998年開始從事Java應用的開發,有10多年的Java開發與培訓經驗。主要的研究方向為Vulkan、OpenGL ES、手機遊戲、以及VR/AR。同時為3D遊戲、VR/AR獨立軟體工程師,並兼任百納科技軟體培訓中心首席培訓師。近十年來為數十家著名企業培養了上千名高級軟體發展人員,曾編寫過《OpenGL ES 3x遊戲開發(上下卷)》、《Unity 案例開發大全(第一版~第二版)》、《VR與AR開發高級教程——基於Unity》、《H5和WebGL 3D開發實戰詳解》、《Android應用案例開發大全》(第一版至第四版)、《Android遊戲開發大全》(第一版至第四版)等多本暢銷技術書籍。2008年初開始關注Android平臺下的3D應用開發,並開發出一系列優秀的Android應用程式與3D遊戲。
 

出版地

大陸

出版日期

07/01/2019

印刷

單色印刷

版別

初版

裝訂

平裝

語系

簡體中文