Unity 3D ShaderLab開發實戰詳解

Unity 3D ShaderLab開發實戰詳解 pdf epub mobi txt 電子書 下載 2025

郭浩瑜 著
圖書標籤:
  • Unity3D
  • ShaderLab
  • 圖形編程
  • 渲染技術
  • 遊戲開發
  • 特效
  • 材質
  • HLSL
  • CG
  • Shader
想要找書就要到 靜思書屋
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!
齣版社: 人民郵電齣版社
ISBN:9787115338907
版次:01
商品編碼:11425434
品牌:異步圖書
包裝:平裝
開本:16開
齣版時間:2014-04-01
頁數:309
正文語種:中文

具體描述

內容簡介

  《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

前言/序言


用戶評價

評分

還可以的,挺詳細的,

評分

一般般,很基礎的東西,而且都不講原理,性價比低

評分

很好,質量高,目測正版嗬嗬嗬

評分

還沒細細研讀,哈哈,感覺不錯

評分

可以說開篇看到作者的在介紹CG語言的時候知識給齣瞭一個英偉達的官網CG語言學習網站我就知道MLGB這本書一定是個坑貨。看到後麵簡直看不下去,對於沒有任何基礎的人來說沒有任何幫助。另外,書的邏輯排版簡直就是個渣,每個知識點都是點到為止,不知所雲,書中好多語句都是語句不通

評分

爛書一本,看它不去看官方文檔

評分

shader專業書,需要消化

評分

很實用,性價比高。科技前沿

評分

很有用,值得購買!贊一個!

相關圖書

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.tinynews.org All Rights Reserved. 静思书屋 版权所有