Unity 3D ShaderLab開發實戰詳解

Unity 3D ShaderLab開發實戰詳解

《Unity 3D ShaderLab開發實戰詳解》是2015年1月人民郵電出版社出版的圖書,作者是郭浩瑜。

基本介紹

  • 中文名:Unity 3D ShaderLab開發實戰詳解
  • 作者:郭浩瑜
  • 出版社:人民郵電出版社
  • 出版時間:2015年1月
  • 頁數:309 頁
  • 定價:69 元
  • 開本:16 開
  • 裝幀:平裝
  • ISBN:9787115338907
內容簡介,圖書目錄,

內容簡介

《Unity 3D ShaderLab開發實戰詳解》全面講解了Unity Shader渲染的實戰技術,全書分為五篇共33章,主要內容為:Shader在3D遊戲中的作用、Shader的實例化、Shader的實現語言等;Unity中Shader的形態、SubShader的重要標籤、可程式Shader、Surface Shader;Shader中用到的各種空間的概念和Shader中的投影矩陣;基本的光照模型;第 一個被執行的Pass,包括渲染路徑和Pass的LightMode標籤;VertexLit渲染路徑,包括頂點照明和Unity存放光源的方式;Forward渲染路徑;基於光照貼圖的烘焙照明;基於LightProbes的照明;平面陰影;球體陰影;體積陰影;映射陰影;內置的陰影;Pass的通用指令開關;固定管線;Surface Shader;凹凸材質;卡通材質;鏡面材質;半透明材質;體積霧;Wrap Model新解;面積光;體積光;材質替代渲染;後期效果;地形;投影;Shader的組織和復用。和你必須知道的渲染概念及基於渲染路徑的最佳化、移動平台上的最佳化等實戰內容,是不 可多得的實戰教程。
《Unity 3D ShaderLab開發實戰詳解》適合移動開發 者、遊戲開 發者、程式設計師閱讀,可作為大專院校相關專業的師生用書,也可當作培訓學校的教材。

圖書目錄

第 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
第4章 基本的光照模型 14
4.1 光源對物體照明的分類 14
4.1.1 間接照明 14
4.1.2 直接照明 14
4.2 照明的計算方式:光照模型 14
4.2.1 漫反射和Lambert 14
4.2.2 鏡面高光和Phong 15
4.2.3 半角向量和BlinnPhong 16
第 2篇 讓你的套用更炫彩——Unity中的照明
第5章 第 一個被執行的Pass 18
5.1 不同的LightMode被選擇的順序 18
5.1.1 渲染路徑和Pass的LightMode標籤 18
5.1.2 設計可以檢測渲染路徑的材質 18
5.1.3 設計便於檢測渲染路徑的場景 21
5.1.4 VertexLit渲染路徑下Pass的執行 21
5.1.5 Forward渲染路徑下Pass的執行 21
5.1.6 Deferred渲染路徑下Pass的執行 21
5.1.7 不同渲染路徑下的Pass執行規則總結 22
5.2 3個渲染路徑之外 22
5.2.1 LightMode的其他值 22
5.2.2 設計檢測用的材質 23
5.2.3 Always類型的Pass在3種渲染路徑下的執行 24
5.2.4 LightMode的默認值及其在3種渲染路徑下的執行 25
第6章 VertexLit渲染路徑 26
6.1 頂點照明 26
6.1.1 什麼是頂點照明 26
6.1.2 存取光源的變數 26
6.2 頂點照明和Unity存放光源的第 一種方式 27
6.2.1 用於調試輸出的材質 27
6.2.2 設計用於檢測的場景 27
6.2.3 在Vertex Pass中的檢測結果 28
6.2.4 無效數據 28
6.3 頂點照明和Unity存放光源的第 二種方式 29
6.3.1 用於調試輸出的材質 29
6.3.2 設計用於檢測的場景 30
6.3.3 在Vertex Pass中的檢測結果 30
6.4 頂點照明和Unity存放光源的第三種方式 31
6.4.1 Unity為Vertex Pass準備的光源 31
6.4.2 設計用於檢測的場景 31
6.4.3 頂點照明中的點光源 32
6.4.4 計算頂點照明的ShadeVertexLights函式 32
6.4.5 頂點照明中的Pixel光源 33
6.4.6 頂點照明中的平行光 33
6.4.7 頂點照明中的燈光信息小結 35
6.4.8 一個頂點照明的實現例子 35
第7章 Forward渲染路徑 37
7.1 ForwardBase和ForwardAdd 37
7.1.1 設計檢測用的場景和材質 37
7.1.2 ForwardBase和ForwardAdd的表現 39
7.2 Forward渲染路徑下的重要光源 39
7.2.1 設計檢測用的材質 39
7.2.2 不存在Pixel光源時的情況 40
7.2.3 存在Pixel平行光時的情況 40
7.2.4 存在Pixel點光源時的情況 40
7.2.5 有多種類型的Pixel光源時的情況 41
7.2.6 Forward渲染路徑下的Pixel光源小結 41
7.3 重要光源在ForwardAdd內的執行 41
7.3.1 設計用來檢測Pixel光源的材質 41
7.3.2 設計檢測用的場景 44
7.3.3 檢測結果:ForwardAdd如何被執行 44
7.4 ForwardBase和Unity存放光源的第 一種方式 45
7.4.1 設計檢測用的材質 45
7.4.2 第 一種方式內的Vertex點光源 46
7.4.3 第 一種方式內的平行光 46
7.4.4 第 一種方式內的重要Pixel點光源 46
7.4.5 只有ForwardBase時的情況總結 47
7.4.6 ForwardAdd對ForwardBase內光源的影響 47
7.4.7 有ForwardAdd時存放光源數據第 一種方式的總結 49
7.5 ForwardAdd和Unity存放光源的第 一種方式 49
7.5.1 設計檢測用的材質 49
7.5.2 設計檢測用的場景 50
7.5.3 ForwardAdd內的Pixel光源 50
7.5.4 ForwardAdd內的平行光 51
7.5.5 數組變數unity_4LightPos的使用情況分析 51
7.6 Forward渲染路徑和Unity存放光源的第三種方式 51
7.6.1 檢測ForwardBase內情況的材質 51
7.6.2 檢測結果:第三種方式不包含對ForwardBase有效的數據 52
7.6.3 檢測結果:第三種方式不包含對ForwardAdd有效的數據 52
7.7 Forward渲染路徑總結 53
7.7.1 Forward渲染路徑下材質的適應性 53
7.7.2 Unity如何為Forward渲染路徑設定光源 53
第8章 基於光照貼圖的烘焙照明 54
8.1 單光照貼圖和VertexLit渲染路徑 54
8.1.1 測試烘焙的場景 54
8.1.2 烘焙場景中使用的材質 55
8.1.3 烘焙的前提:靜態物體 55
8.1.4 如何在烘焙中使用自發光材質 55
8.1.5 烘焙之後靜態物體和非靜態物體的實時照明 57
8.1.6 套用光照貼圖到VertexLit渲染路徑下的材質中 57
8.1.7 通過自己的材質改變實時光源對烘焙後物體的照明 59
8.2 在效果和性能間進行權衡 60
8.2.1 影響全局的Resolution選項 60
8.2.2 影響單個物體的Scale In Lightmap選項 61
8.3 單光照貼圖和Forward渲染路徑 62
8.3.1 單光照貼圖在VertexLit和Forward下面的不同表現 62
8.3.2 準備可套用於烘焙的自發光材質 62
8.3.3 在ForwardBase內計算光照貼圖 64
8.3.4 Forward渲染路徑下烘焙之後的實時照明 65
8.4 單光照貼圖在Deferred渲染路徑下的實時陰影 67
8.5 雙光照貼圖和Deferred渲染路徑 67
8.5.1 全局GI、間接照明以及雙光照貼圖 67
8.5.2 混合雙光照貼圖和實時照明 67
8.5.3 觀察混合過程 69
8.5.4 雙光照貼圖的使用限制 70
8.6 雙光照貼圖和Forward渲染路徑 71
8.7 方向光照貼圖和Forward渲染路徑 71
8.7.1 烘焙後的凹凸問題 71
8.7.2 方向光照貼圖(Direction Lightmaps)和凹凸貼圖 72
第9章 基於LightProbes的照明 74
9.1 初識LightProbes 74
9.1.1 LightProbes照明的優點 74
9.1.2 檢測LightProbes照明的場景 74
9.1.3 使用Light Probe Group進行管理 76
9.1.4 烘焙場景光照信息到LightProbes中 76
9.1.5 對比Light Probes照明和實時照明 77
9.2 放置LightProbes的注意事項 77
9.2.1 必須形成一個體積 77
9.2.2 單個Light Probe必須處於採樣光源的照射範圍 77
9.3 動態更新LightProbes 78
9.3.1 跟新數據的注意事項 78
9.3.2 更改不同通道的Coefficient 78
9.4 照明採樣的Archor Override 79
9.4.1 基於線性插值的採樣 79
9.4.2 改變默認的插值位置 79
9.5 LightProbes照明和陰影 80
9.5.1 LightProbes和光照貼圖的異同 80
9.5.2 烘焙陰影時可能會犯的錯誤 80
9.5.3 將靜態物體的陰影烘焙到Light Probe上 81
9.5.4 LightProbes照明和實時陰影的混合 82
9.6 烘焙一個色彩豐富的場景 82
9.7 在自己的材質中使用LightProbes 83
9.7.1 為Forward渲染路徑的材質計算LightProbes 84
9.7.2 使用ShadeSH9函式 84
9.7.3 在一個Surface Shader中進行計算 85
第3篇 使套用更逼真——Shadows(陰影)
第 10章 平面陰影 88
10.1 平行光對平面的投影 88
10.1.1 對平行光投影的考慮 88
10.1.2 進出陰影接受平面的矩陣 88
10.1.3 使用三角形相似計算陰影 89
10.2 點光源對平面的投影 90
10.3 陰影的淡出 91
10.3.1 有效利用計算平面陰影過程中的數據 91
10.3.2 潛在的問題 91
第 11章 球體陰影 92
11.1 平行光對球體的投影 92
11.1.1 投影球體的信息 92
11.1.2 使用相似三角形計算投影 92
11.2 陰影的淡入/淡出 93
11.3 點光源對球體的投影 94
第 12章 體積陰影 95
12.1 將頂點沿某一方向擠出 95
12.1.1 在Vertex函式中操作 95
12.1.2 判斷頂點是向光還是背光 95
12.2 從Volumes中找到陰影區域 96
12.2.1 兩次擠出 96
12.2.2 計算出陰影區域 97
12.2.3 渲染陰影 97
12.2.4 需要注意的問題 98
第 13章 陰影映射 99
13.1 燈光空間和相機空間 99
13.1.1 觀察兩個空間 99
13.1.2 兩個視角的Z深度 99
13.1.3 渲染Z深度的材質 99
13.2 投射Z深度 100
13.2.1 準備燈光視角的投影矩陣 100
13.2.2 在材質中計算投影后的Z深度 101
13.3 比較Z深度 103
13.3.1 比較Z深度的材質 103
13.3.2 Z精度引起的問題 104
13.3.3 增加Z的精度 104
13.3.4 對Z值進行偏移 105
第 14章 內置的陰影 107
14.1 投射陰影 107
14.1.1 使用ShadowCaster投射陰影 107
14.1.2 ShadowCaster里都做了什麼 108
14.1.3 寫一個自己的ShadowCaster 108
14.1.4 改變ShadowCaster的行為 109
14.1.5 陰影和FallBack機制 110
14.2 接受陰影 111
14.3 Surface Shader和陰影 112
14.3.1 Surface Shader的陰影和Fallback 112
14.3.2 Surface Shader里的燈光參數和陰影 112
14.3.3 Surface Shader對Forward渲染路徑下陰影的支持 112
第4篇 Unity中的各種Shader
第 15章 Pass的通用指令開關 116
15.1 使用LOD在運行時決定材質 116
15.1.1 材質的LOD 116
15.1.2 運行時設定單個材質的LOD 116
15.1.3 設定全局所有材質的LOD 117
15.1.4 Unity內置的LOD層級 118
15.2 渲染佇列 118
15.2.1 標籤佇列和渲染順序 118
15.2.2 渲染佇列和ZTest判斷 120
15.2.3 Unity中內置的渲染佇列 120
15.3 透明的產生 120
15.3.1 Alpha檢測和8種比較條件 120
15.3.2 動態生成AlphaTest的材質 120
15.3.3 動態生成Shader的內容 121
15.3.4 結合AlphaTest和Blend操作 122
15.4 混合操作 123
15.4.1 什麼是混合(Blend)操作 123
15.4.2 動態生成測試用的材質 123
15.4.3 生成Shader的代碼 124
15.4.4 檢測不同的混合操作 125
15.4.5 BlendOp選項 126
15.4.6 動態生成帶BlendOp選項的材質 126
15.4.7 生成Shader的代碼 127
15.4.8 檢測BlendOp操作 127
15.5 使用通道遮罩(ColorMask) 128
15.5.1 ColorMask的作用 128
15.5.2 檢測ColorMask 128
15.5.3 一個使用ColorMask的例子 129
15.6 ZTest(深度測試) 130
15.6.1 存取場景的ZTest 130
15.6.2 RenderType標籤和生成ZTest的關聯 130
15.6.3 內置RenderType的值 131
15.6.4 Forward渲染路徑下的ZTest 131
15.6.5 Deferred渲染路徑下的ZTest 132
15.7 對Z深度的偏移 134
15.7.1 干預正常ZTest的手段 134
15.7.2 動態改變Offset的參數 134
15.7.3 觀察Offset在不同套用條件下的表現 135
15.8 面的剔除操作 135
15.9 自動貼圖坐標的生成 136
15.9.1 ObjectLinear和等價的Cg代碼 136
15.9.2 EyeLinear和等價的Cg代碼 137
15.9.3 SphereMap和等價的Cg代碼 138
15.9.4 CubeReflect和等價的Cg代碼 139
15.9.5 CubeNormal和等價的Cg代碼 139
15.10 抓屏操作 140
15.10.1 如何使用GrabPass 140
15.10.2 一個模擬曲面反射的例子 141
15.11 Fog(霧效) 142
15.11.1 Fog和Unity的3種實現 142
15.11.2 材質中對Fog的控制 142
15.11.3 實現自己的Fog 143
第 16章 固定管線 146
16.1 Unity中固定管線的基本形態 146
16.1.1 基本形態 146
16.1.2 與照明相關的Material塊 147
16.1.3 處理紋理的SetTexture塊 147
16.1.4 基本形態的另一種寫法 147
16.1.5 Combine語句 147
16.2 使用頂點色 148
16.2.1 使用ColorMaterial 148
16.2.2 使用Bind 148
16.3 在固定管線中使用光照貼圖 149
16.4 嵌套Cg代碼 149
第 17章 Surface Shader 151
17.1 Surface Shader的適應性 151
17.1.1 一個分析策略 151
17.1.2 VertexLit渲染路徑的檢測材質 151
17.1.3 Forward渲染路徑的檢測材質 152
17.1.4 測試用的場景 153
17.1.5 檢測結果:不獨立支持VertexLit渲染路徑 153
17.1.6 檢測結果:對Forward渲染路徑的有條件支持 153
17.2 Surface Shader和Deferred渲染路徑 154
17.2.1 設計檢測的策略和材質 154
17.2.2 檢測結果:Surface Shader對Deferred渲染路徑的支持條件 156
17.3 Forward渲染路徑下的Surface Shader 157
17.3.1 Cg代碼完全體 157
17.3.2 **簡形式的等價Cg代碼 158
17.3.3 Cg代碼對光照貼圖的支持 163
17.3.4 一個檢測生成的ForwardBase場景 164
17.3.5 自動生成的ForwardAdd 165
17.3.6 參數noambient和novertexlights 168
17.3.7 參數approxview和halfasview 168
17.3.8 Forward渲染路徑下的透明和混合模式參數 169
17.3.9 加強Forward渲染路徑下效果的參數 171
17.4 Deferred渲染路徑下的Surface Shader 174
17.4.1 自動生成的PrePassBase和PrePassFinal 174
17.4.2 PrePassBase都做了什麼 177
17.4.3 _LightBuffer裡面的東西 179
17.4.4 計算_LightBuffer所使用的材質 180
17.4.5 PrePassFinal的工作 185
17.4.6 FallBack和Surface Shader的陰影 186
17.4.7 精簡用的參數 187
17.4.8 Vertex、finalcolor函式和addshadow選項 188
17.4.9 Deferred模式下的材質透明 188
17.4.10 decal參數 189
第 18章 凹凸材質 190
18.1 切空間 190
18.2 凹凸貼圖 190
18.2.1 計算到切空間的矩陣 190
18.2.2 Unity中法線貼圖的壓縮格式 191
18.2.3 使用切空間矩陣的另一種方法 191
18.2.4 Unity對切空間計算的支持 192
18.2.5 解壓縮法線貼圖的函式 193
18.2.6 在切空間中計算高光 193
18.2.7 Surface Shader和切空間 194
18.3 Parallax Mapping(視差映射) 194
18.3.1 Parallax Mapping及其別名 194
18.3.2 一個使用灰度圖來偏移UV的材質 195
18.3.3 結合法線貼圖 196
18.3.4 用視角來決定UV偏移 197
18.3.5 一個完整的實現 197
18.4 Relief Mapping(地勢映射) 198
18.4.1 Parallax Mapping的極限和Relief Mapping的面世 198
18.4.2 Relief Mapping的算法 199
18.4.3 一個完整的實現 200
第 19章 卡通材質 203
19.1 描邊 203
19.1.1 沿法線擠出輪廓 203
19.1.2 容易產生的問題 204
19.1.3 在視空間中擠出 205
19.1.4 頂點位置的另一個含義 206
19.1.5 調和法線和頂點方向 207
19.1.6 判斷頂點的指向 207
19.1.7 不僅僅是輪廓 208
19.1.8 通過Z偏移來描邊 210
19.2 卡通著色 211
19.2.1 對光照進行離散化 211
19.2.2 使用2D貼圖重新映射光照 213
第 20章 鏡面材質 215
20.1 鏡像一個相機 215
20.1.1 鏡子裡的世界和我的計畫 215
20.1.2 在腳本中對位置和角度進行鏡像 215
20.2 使用鏡像相機來渲染、投影 216
20.2.1 鏡面材質的工作:採樣被投影的渲染結果 216
20.2.2 腳本的工作:渲染鏡像相機和設定投影矩陣 217
20.3 鏡像相機的近剪下平面和傾斜矩陣 218
20.3.1 調節近剪下平面 218
20.3.2 使用傾斜矩陣微調視錐體 218
第 21章 半透明材質 219
21.1 什麼是半透明材質 219
21.2 用簡單來表達複雜 219
第 22章 體積霧 221
22.1 距離的表達:相對於背景的體積霧 221
22.1.1 需要計算的東西 221
22.1.2 使用一個Pass來完成所有的計算 221
22.1.3 黑色的霧效 222
22.2 厚度的表達:物體形體的體積霧 223
22.2.1 必須計算的兩個數據 223
22.2.2 在Unity中使用一個Pass來完成所有計算 223
第 23章 Wrap Model新解 226
23.1 一個可調節的Wrap光照模型 226
23.2 另一種實現途徑 226
23.2.1 基於不同構想的Wrap 226
23.2.2 實現這種構想 227
23.2.3 進一步的變通 227
第 24章 面積光 228
24.1 線光源 228
24.1.1 點,線,面 228
24.1.2 如何理解一個線光源 228
24.1.3 通過腳本傳遞線光源的幾何信息 228
24.1.4 計算線光源的照明 229
24.1.5 線光源的輻射方向 230
24.1.6 線光源的衰減 230
24.2 面積光源 231
24.2.1 面積光和線光源的不同 231
24.2.2 通過腳本設定面積光的幾何特性 231
24.2.3 計算面積光 232
24.2.4 和默認照明的整合 234
第 25章 體積光 235
25.1 體積光和體積陰影 235
25.1.1 什麼是體積光 235
25.1.2 體積光和體積陰影的關係 235
25.2 實現體積光 235
25.2.1 在Shader中表現體積光 235
25.2.2 腳本的幫助 236
第 26章 材質替代渲染 238
26.1 相機(Camera)和渲染訊息 238
26.1.1 相機的渲染訊息傳送順序 238
26.1.2 物體的渲染訊息傳送順序 239
26.1.3 相機和物體的渲染訊息先後順序 240
26.1.4 存在兩個相機時的渲染訊息 240
26.1.5 **後能改變Cull操作結果的地方 241
26.1.6 **後能設定材質數據的地方 241
26.2 相機(Camera)的渲染方法 242
26.2.1 Render方法 242
26.2.2 RenderWithShader方法 243
26.3 如何使用RenderWithShader方法 245
26.3.1 標籤值不同的5個Shader 245
26.3.2 調用RenderWithShader方法的腳本 246
26.3.3 替換用的5個材質 247
26.3.4 檢測RenderWithShader方法的效果 248
26.3.5 使用SubShader組織替代材質 249
26.3.6 如何設定替代材質的屬性 249
26.3.7 將結果輸出到螢幕上 250
26.4 SetReplacementShader和ResetReplacementShader 251
第 27章 後期效果 252
27.1 Graphics的兩個方法 252
27.1.1 與相機渲染方法的不同之處 252
27.1.2 Blit方法的簡單示例 252
27.1.3 使用BlitMultiTap方法進行多重採樣 254
27.2 一個簡單的調色 257
27.2.1 調色用的腳本 257
27.2.2 調色用的材質 258
27.2.3 更高效的做法 259
27.3 景深 261
27.3.1 用於模糊圖像的材質 261
27.3.2 進行縱橫兩次模糊操作 262
27.3.3 進行混合操作的腳本 263
27.3.4 進行混合操作的材質 263
27.3.5 提供一個可調節參數 264
27.4 輪廓檢測 265
27.4.1 用腳本索要場景的Z深度和法線 265
27.4.2 在材質中進行邊緣檢測 265
27.5 扭曲 267
27.5.1 通過UV操作扭曲圖像 267
27.5.2 限定扭曲的區域 268
27.5.3 使用物體來做遮罩 268
27.6 運動模糊 271
27.6.1 如何記錄運動軌跡 271
27.6.2 實現運動模糊的材質 271
27.6.3 用於完成整個過程的腳本 272
27.6.4 通過Alpha和幀的混合操作實現運動模糊 273
27.7 噪波 273
27.7.1 根據Z深度來混合噪波 274
27.7.2 根據明暗程度來混合噪波 274
27.8 色彩的溢出 275
27.8.1 色彩溢出的算法考量 276
27.8.2 實現色彩溢出的採樣計算 276
第 28章 地形 278
28.1 地表的材質 278
28.1.1 地面紋理的控制貼圖 278
28.1.2 如何自定義地表材質 279
28.1.3 如何使用更多的紋理貼圖 280
28.2 花草的材質 280
28.2.1 非Billboard類型花草的材質 281
28.2.2 Terrain引擎傳入的數據 282
28.2.3 Billboard類型花草的材質 282
28.2.4 自定義Detail Mesh的材質 283
28.3 樹木的材質 283
28.3.1 樹木的2D Billboard材質 283
28.3.2 3D形態樹木的材質 284
28.3.3 套用Unity計算的Occlusion 286
第 29章 投影 288
29.1 Unity的Projector 288
29.1.1 Projector中的材質被執行的順序 288
29.1.2 如何寫Projector使用的材質 288
29.1.3 控制投影淡進淡出的矩陣 289
29.2 實現自己的投影 290
29.2.1 設定投影矩陣的腳本 290
29.2.2 採樣投影的材質 291
29.2.3 直接投影到螢幕上 292
29.2.4 模擬GUITexture 293
29.3 模擬粒子的廣告牌效果 294
29.3.1 使用材質將物體面向相機 294
29.3.2 保持旋轉角度 295
第5篇 Shader的組織和最佳化
第30章 Shader的組織和復用 298
30.1 cginc檔案 298
30.1.1 Unity的UnityCG.cginc檔案 298
30.1.2 定義自己的cginc檔案 298
30.1.3 使用自定義的cginc檔案 299
30.2 通過UsePass來復用 300
30.2.1 定義自己要復用的Pass 300
30.2.2 復用這些Pass 301
30.3 定義自己的Shader關鍵字 301
30.3.1 使用關鍵字改變Shader的行為 301
30.3.2 定義自己的Shader關鍵字 301
30.4 使用multi_compile編譯Shader的多個版本 302
30.4.1 使用multi_compile實現多次編譯 302
30.4.2 在腳本中選擇Shader的版本 302
30.5 Unity對DX11支持所帶來的問題 303
第31章 你必須知道的渲染概念 304
31.1 逐頂點計算和逐像素計算 304
31.1.1 逐頂點計算 304
31.1.2 逐像素計算 304
31.1.3 如何在這兩個概念中取捨 304
31.2 Draw Call的指標意義 304
31.2.1 Draw Call的概念 304
31.2.2 正確理解Draw Call對你開發套用的意義 304
31.2.3 Batching的概念和Unity為最佳化Draw Call所做的工作 305
31.2.4 最佳化Draw Call 305
31.3 利用渲染佇列的技巧 305
31.3.1 渲染佇列的概念 305
31.3.2 設定Render Queue的技巧 305
第32章 基於渲染路徑的最佳化 306
32.1 VertexLit渲染路徑下的最佳化 306
32.1.1 VertexLit渲染路徑的特點 306
32.1.2 合理的光照計算 306
32.2 Forward渲染路徑下的最佳化 306
32.2.1 Forward渲染路徑的特點 306
32.2.2 合理的光照計算 306
32.3 Deferred渲染路徑下的最佳化 307
32.3.1 Deferred渲染路徑的特點 307
32.3.2 合理的燈光布局 307
第33章 移動平台上的最佳化 308
33.1 移動平台的特點 308
33.2 一些指令的運算速度概念 308
33.3 幾何複雜度的考量 308
33.4 貼圖的問題 309
33.5 數據類型的使用方式 309
33.6 變數的使用 310
33.7 慎用後期效果 310
33.8 慎用透明效果 310
附錄 相關資源 311

熱門詞條

聯絡我們