《Unity 3D ShaderLab開發實戰詳解(第2版)》是2017年11月人民郵電出版社出版的圖書,作者是郭浩瑜。
基本介紹
- 書名:Unity 3D ShaderLab開發實戰詳解(第2版)
- 作者:郭浩瑜
- ISBN:9787115386243
- 頁數:322頁
- 定價:69元
- 出版社:人民郵電出版社
- 出版時間:2017年11月
- 裝幀:平裝
- 開本:16開
內容簡介,圖書目錄,
內容簡介
本書全面講解了Unity Shader渲染的實戰技術,全書分為5篇共33章,主要內容為:Shader在3D遊戲中的作用、Shader的實例化、Shader的實現語言等;Unity中Shader的形態、SubShader的重要標籤、可程式Shader、Surface Shader;Shader中用到的各種空間的概念和Shader中的投影矩陣;基本的光照模型;第 一個被執行的Pass,包括渲染路徑和Pass的LightMode標籤;VertexLit渲染路徑,包括頂點照明和Unity存放光源的方式;Forward渲染路徑;基於光照貼圖的烘焙照明;NDC的驗證;基於LightProbes的照明;平面陰影;球體陰影;體積陰影;映射陰影;內置的陰影;Pass的通用指令開關;Blend操作;Stencil蒙版;固定管線;Surface Shader;凹凸材質;卡通材質;鏡面材質;半透明材質;製作透明材質;體積霧;Wrap Model新解;用Shader切割物體;面積光;體積光;材質替代渲染;自定義材質編輯器;後期效果;地形;投影;Shader的組織和復用。本書還包含你必須知道的渲染概念及基於渲染路徑的最佳化、移動平台上的最佳化等實戰內容。
本書適合移動開 發者、遊戲開發 者、程式設計師閱讀,可作為大專院校相關專業的師生用書,也可當作培訓學校的教材。
圖書目錄
第 1篇 初識廬山真面目——Unity 3D Shader
第 1章 虛擬世界的“魔法”——Shader(著色器)的概念和在3D遊戲中的作用 2
1.1 Shader的概念 2
1.1.1 虛擬世界中的光明和色彩 2
1.1.2 遊戲開發人員的終點 2
1.1.3 Shader(著色器)簡史 2
1.2 Shader的實例化 3
1.3 Shader的實現語言 3
1.3.1 GPU上的編程 3
1.3.2 Unity中的著色器編程 3
第 2章 Unity中Shader(著色器)的形態 4
2.1 Unity通過ShaderLab來組織Shader 4
2.1.1 關鍵字Shader 4
2.1.2 使用SubShader組織Shader的不同實現 4
2.1.3 SubShader的重要標籤 4
2.1.4 SubShader中的Pass塊 5
2.1.5 Pass塊的標籤及其名字的意義 5
2.1.6 使用FallBack保證Shader的廣泛適應性 6
2.2 Unity的ShaderLab所支持的Shader程式語言 6
2.3 Unity中Shader的3種形態 6
2.3.1 固定管線 6
2.3.2 可程式Shader 7
2.3.3 ShaderLab的驕傲:
Surface Shader 8
2.4 Shader的數據接口:屬性和uniform變數 8
2.4.1 在Properties塊中定義屬性 8
2.4.2 通過圖形界面操作屬性 9
2.4.3 通過腳本操控屬性 9
2.4.4 矩陣:不能在屬性塊定義的變數 10
2.4.5 在Cg代碼中使用屬性 10
第3章 Shader(著色器)中用到的各種空間概念 11
3.1 模型空間 11
3.1.1 為什麼用模型空間 11
3.1.2 在腳本和Shader中進出模型空間 11
3.2 世界坐標空間 11
3.2.1 統一表達:世界坐標空間 11
3.2.2 在腳本和Shader中進出世界坐標空間 12
3.3 視空間 12
3.3.1 渲染的需要:視空間 12
3.3.2 在腳本和Shader中進出視空間 12
3.4 空間的一塊:視錐體 12
3.5 剪下空間 13
3.5.1 投影 13
3.5.2 腳本和Shader中的投影矩陣 13
3.5.3 驗證NDC 14
3.6 NDC之後 14
3.6.1 NDC之後發生的事情 14
第4章 基本的光照模型 16
4.1 光源對物體照明的分類 16
4.1.1 間接照明 16
4.1.2 直接照明 16
4.2 照明的計算方式:光照模型 16
4.2.1 漫反射和Lambert 16
4.2.2 鏡面高光和Phong 17
4.2.3 半角向量和BlinnPhong 18
第 2篇 讓你的套用更炫彩——Unity中的照明
第5章 第 一個被執行的Pass 20
5.1 不同的LightMode被選擇的順序 20
5.1.1 渲染路徑和Pass的LightMode標籤 20
5.1.2 設計可以檢測渲染路徑的材質 20
5.1.3 設計便於檢測渲染路徑的場景 23
5.1.4 VertexLit渲染路徑下Pass的執行 23
5.1.5 Forward渲染路徑下Pass的執行 23
5.1.6 Deferred渲染路徑下Pass的執行 23
5.1.7 不同渲染路徑下的Pass執行規則總結 24
5.2 3個渲染路徑之外 24
5.2.1 LightMode的其他值 24
5.2.2 設計檢測用的材質 24
5.2.3 Always類型的Pass在3種渲染路徑下的執行 26
5.2.4 LightMode的默認值及其在3種渲染路徑下的執行 27
第6章 VertexLit渲染路徑 28
6.1 頂點照明 28
6.1.1 什麼是頂點照明 28
6.1.2 存取光源的變數 28
6.2 頂點照明和Unity存放光源的第 一種方式 29
6.2.1 用於調試輸出的材質 29
6.2.2 設計用於檢測的場景 29
6.2.3 在Vertex Pass中的檢測結果 30
6.2.4 無效數據 30
6.3 頂點照明和Unity存放光源的第 二種方式 31
6.3.1 用於調試輸出的材質 31
6.3.2 設計用於檢測的場景 32
6.3.3 在Vertex Pass中的檢測結果 32
6.4 頂點照明和Unity存放光源的第三種方式 33
6.4.1 Unity為Vertex Pass準備的光源 33
6.4.2 設計用於檢測的場景 33
6.4.3 頂點照明中的點光源 33
6.4.4 計算頂點照明的ShadeVertexLights函式 34
6.4.5 頂點照明中的Pixel光源 34
6.4.6 頂點照明中的平行光 35
6.4.7 頂點照明中的燈光信息小結 37
6.4.8 一個頂點照明的實現例子 37
第7章 Forward渲染路徑 39
7.1 渲染物體——ForwardBase和ForwardAdd 39
7.1.1 設計檢測用的場景和材質 39
7.1.2 ForwardBase和ForwardAdd的表現 41
7.2 Forward渲染路徑下的重要光源 41
7.2.1 設計檢測用的材質 41
7.2.2 不存在Pixel光源時的情況 42
7.2.3 存在Pixel平行光時的情況 42
7.2.4 存在Pixel點光源時的情況 42
7.2.5 有多種類型的Pixel光源時的情況 43
7.2.6 Forward渲染路徑下的Pixel光源小結 43
7.3 重要光源在ForwardAdd內的執行 43
7.3.1 設計用來檢測Pixel光源的材質 43
7.3.2 設計檢測用的場景 46
7.3.3 檢測結果:ForwardAdd如何被執行 46
7.4 ForwardBase和Unity存放光源的第 一種方式 47
7.4.1 設計檢測用的材質 47
7.4.2 第 一種方式內的Vertex點光源 48
7.4.3 第 一種方式內的平行光 48
7.4.4 第 一種方式內的重要Pixel點光源 48
7.4.5 只有ForwardBase時的情況總結 49
7.4.6 ForwardAdd對ForwardBase內光源的影響 49
7.4.7 有ForwardAdd時存放光源數據第 一種方式的總結 51
7.5 ForwardAdd和Unity存放光源的第 一種方式 51
7.5.1 設計檢測用的材質 51
7.5.2 設計檢測用的場景 52
7.5.3 ForwardAdd內的Pixel光源 52
7.5.4 ForwardAdd內的平行光 53
7.5.5 數組變數unity_4LightPos的使用情況分析 53
7.6 Forward渲染路徑和Unity存放光源的第三種方式 53
7.6.1 檢測ForwardBase內情況的材質 53
7.6.2 檢測結果:第三種方式不包含對ForwardBase有效的數據 54
7.6.3 檢測結果:第三種方式不包含對ForwardAdd有效的數據 54
7.7 Forward渲染路徑總結 55
7.7.1 Forward渲染路徑下材質的適應性 55
7.7.2 Unity如何為Forward渲染路徑設定光源 55
第8章 基於光照貼圖的烘焙照明 56
8.1 單光照貼圖和VertexLit渲染路徑 56
8.1.1 測試烘焙的場景 56
8.1.2 烘焙場景中使用的材質 57
8.1.3 烘焙的前提:靜態物體 57
8.1.4 如何在烘焙中使用自發光材質 57
8.1.5 烘焙之後靜態物體和非靜態物體的實時照明 59
8.1.6 套用光照貼圖到VertexLit渲染路徑下的材質中 59
8.1.7 通過自己的材質改變實時光源對烘焙後物體的照明 61
8.2 在效果和性能間進行權衡 62
8.2.1 影響全局的Resolution選項 62
8.2.2 影響單個物體的Scale In Lightmap選項 63
8.3 單光照貼圖和Forward渲染路徑 64
8.3.1 單光照貼圖在VertexLit和Forward下面的不同表現 64
8.3.2 準備可套用於烘焙的自發光材質 64
8.3.3 在ForwardBase內計算光照貼圖 66
8.3.4 Forward渲染路徑下烘焙之後的實時照明 67
8.4 單光照貼圖在Deferred渲染路徑下的實時陰影 69
8.5 雙光照貼圖和Deferred渲染路徑 69
8.5.1 全局GI、間接照明以及雙光照貼圖 69
8.5.2 混合雙光照貼圖和實時照明 69
8.5.3 觀察混合過程 71
8.5.4 雙光照貼圖的使用限制 72
8.6 雙光照貼圖和Forward渲染路徑