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

前言/序言


《光影的魔術:現代遊戲引擎的渲染技術解析》 內容梗概 在數字娛樂的浩瀚星海中,視覺效果無疑是吸引玩傢目光、沉浸遊戲世界的關鍵。從逼真細膩的人物建模,到宏偉壯麗的場景構建,再到令人目眩神迷的特效奇觀,這一切的背後都離不開強大的渲染技術。本書《光影的魔術:現代遊戲引擎的渲染技術解析》將帶領讀者深入探索現代遊戲引擎中渲染管綫的奧秘,揭示那些讓虛擬世界栩栩如生的底層原理與高級技巧。 本書並非聚焦於某一款特定的開發工具或語言,而是以通用的渲染流程為脈絡,詳細剖析從模型加載、幾何處理、光照計算、紋理映射,到後期處理特效等一係列核心環節。我們將跳齣具體API的束縛,深入理解圖形渲染的基本概念,並在此基礎上探討各種先進的渲染技術是如何被集成和實現的。 核心章節解析 第一部分:渲染管綫的基石——從數據到像素的旅程 數據結構的玄機: 深入解析模型數據的組織形式,包括頂點緩衝(Vertex Buffer)、索引緩衝(Index Buffer)等,以及它們在GPU端的優化加載策略。理解如何高效地傳輸和管理場景中的幾何信息,是高效渲染的第一步。我們將探討不同數據格式的優劣,以及如何根據實際需求進行選擇和優化。 幾何變換的魔法: 從模型空間到世界空間,再到視圖空間和投影空間,我們將詳細闡述MVP矩陣(Model-View-Projection Matrix)的構建與應用。理解坐標係的轉換原理,是實現三維場景繪製的基礎。本書將通過實例講解,讓讀者直觀地理解每個變換矩陣的作用。 光柵化的藝術: 剖析光柵化過程,即如何將三維的幾何圖元轉換為屏幕上的二維像素。我們將探討三角形裁剪、邊緣檢測、像素覆蓋等關鍵算法,理解GPU如何高效地完成這一核心任務。 材質與紋理的融閤: 深入講解紋理映射的原理,包括UV坐標的含義、紋理過濾(如雙綫性、三綫性過濾)的作用,以及各種紋理格式(如PNG, JPG, DDS)的特點。我們將展示如何利用紋理為模型賦予豐富的細節和色彩,並通過法綫貼圖(Normal Mapping)、高光貼圖(Specular Mapping)等高級技術,模擬錶麵凹凸和光照反射。 第二部分:光影的律動——模擬真實世界的視覺效果 光照模型的演進: 從基礎的蘭伯特(Lambert)光照模型,到更接近物理真實的馮氏(Phong)光照模型,再到菲涅爾(Fresnel)效應和微錶麵(Microfacet)理論,我們將循序漸進地介紹各種光照模型的數學原理和實現方式。理解不同光照模型如何模擬錶麵對光的反射和散射,是創造真實感光照的關鍵。 陰影的藝術: 深入探討生成逼真陰影的多種技術,包括陰影貼圖(Shadow Mapping)的原理、級聯陰影貼圖(Cascaded Shadow Maps)的優化、以及軟陰影(Soft Shadows)的實現方法。我們將分析不同陰影技術在性能和視覺效果上的權衡。 全局光照的探索: 介紹全局光照(Global Illumination, GI)的基本概念,包括間接光照(Indirect Illumination)、環境光遮蔽(Ambient Occlusion, AO)等。我們將探討光綫追蹤(Ray Tracing)和探針(Probes)等技術在實現逼真全局光照方麵的應用,以及它們在現代遊戲引擎中的集成方式。 PBR:邁嚮物理真實渲染: 全麵解析基於物理的渲染(Physically Based Rendering, PBR)的核心思想與實現方法。我們將詳細講解PBR的金屬度/粗糙度(Metallic/Roughness)工作流,以及如何在著色器中實現能量守恒,從而生成更自然、更具一緻性的材質錶現。 第三部分:視覺的升華——後期處理與高級渲染技巧 後期處理的魔力: 深入講解各種常用的後期處理特效,如抗鋸齒(Anti-aliasing,包括FXAA, SMAA, TAA)、景深(Depth of Field)、運動模糊(Motion Blur)、輝光(Bloom)、色調映射(Tone Mapping)、顔色校正(Color Grading)等。我們將分析這些特效的工作原理,以及它們對整體畫麵觀感的巨大提升作用。 屏幕空間特效: 探索屏幕空間環境光遮蔽(Screen Space Ambient Occlusion, SSAO)和屏幕空間反射(Screen Space Reflections, SSR)等高效的屏幕空間技術,瞭解它們如何在不顯著增加GPU負擔的情況下,顯著提升場景的立體感和真實感。 渲染特效的實現: 講解粒子係統(Particle Systems)的渲染原理,以及如何實現各種炫目的視覺特效,如火焰、煙霧、爆炸、魔法粒子等。我們將探討粒子係統的動畫、生命周期管理和渲染優化。 性能優化的藝術: 深入探討各種渲染性能優化策略,包括剔除(Culling,視錐剔除、遮擋剔除)、LOD(Level of Detail)技術、批處理(Batching)、GPU實例化(GPU Instancing)等。我們將分析這些技術如何有效地減少GPU的渲染負擔,從而提升遊戲的幀率。 可編程渲染管綫(Programmable Pipeline)的深度解析: 詳細講解頂點著色器(Vertex Shader)和片段著色器(Fragment Shader)的作用,以及如何編寫自定義的著色器代碼來控製渲染的各個環節。我們將通過實例,展示如何利用著色器實現各種獨特的視覺效果。 適用人群 本書適閤有一定編程基礎,對計算機圖形學、遊戲開發以及視覺特效有濃厚興趣的開發者、學生、以及技術愛好者。無論您是初涉圖形編程的新手,還是希望深入理解現代遊戲引擎渲染原理的進階者,都能從本書中獲得寶貴的知識和啓發。 學習價值 通過閱讀《光影的魔術:現代遊戲引擎的渲染技術解析》,您將: 建立堅實的圖形學理論基礎: 理解渲染管綫的核心概念和數學原理。 掌握先進的渲染技術: 學習如何實現逼真光照、陰影、全局光照和PBR材質。 解鎖視覺錶現的無限可能: 能夠運用後期處理和粒子係統創造令人驚嘆的視覺效果。 提升代碼性能: 掌握常用的渲染優化技巧,寫齣更高效的渲染代碼。 為跨平颱開發打下基礎: 理解通用渲染原理,有助於適應不同遊戲引擎和圖形API。 本書將以清晰的邏輯、豐富的圖例和深入的講解,帶領您一步步揭開光影的秘密,在數字世界的畫布上揮灑創意,創造齣令人驚嘆的視覺奇跡。

用戶評價

評分

這本書的名字,"Unity 3D ShaderLab開發實戰詳解",聽起來就充滿瞭技術深度和實踐導嚮。我一直以來都對Unity的圖形渲染技術充滿好奇,尤其是在看到那些令人驚嘆的視覺效果時,總是在思考它們背後是如何實現的。Shader編程是我一直想要深入瞭解的領域,但市麵上許多資料要麼過於理論化,要麼案例太少,很難真正上手。這本書的“實戰詳解”這幾個字,讓我看到瞭希望。我期待書中能夠從最基礎的概念講起,比如Shader的構成、ShaderLab的語法結構,以及它與Unity渲染管綫的交互方式。更重要的是,我希望它能提供大量的、具有實際應用價值的代碼示例,讓我能夠一步步跟著學習,親手實現一些常見的Shader效果。例如,書中是否會詳細講解如何創建自定義的光照模型,如何實現屏幕後處理特效,或者如何為角色創建復雜的材質錶現?我甚至期待它能觸及一些更高級的主題,比如使用Compute Shader來進行一些並行計算,或者如何實現一些基於物理的渲染(PBR)技術。這本書如果能幫助我建立起對Shader開發的全麵理解,並讓我能夠獨立解決實際開發中遇到的渲染難題,那麼它將是我的寶貴財富。

評分

我是一名對遊戲開發抱有極大熱情的初學者,一直以來,Unity的強大之處讓我驚嘆,尤其是那些令人驚艷的畫麵效果,總是讓我好奇其背後的技術。當我看到《Unity 3D ShaderLab開發實戰詳解》這本書時,就覺得它可能是我踏入Shader世界的一扇絕佳窗口。雖然“ShaderLab”聽起來可能有點專業,但“開發實戰詳解”這幾個字,讓我覺得這本書會非常實用,而且會從基礎講起,不會讓我感到無從下手。我非常期待書中能夠用清晰的語言,一步步地引導我理解Shader到底是什麼,它是如何工作的,以及在Unity中是如何被使用的。我希望能通過書中大量的代碼示例,親手去實踐,去創造一些簡單的視覺效果,比如改變物體的顔色,實現透明效果,或者製作一些簡單的粒子效果。如果書中還能包含一些關於如何使用Shader來實現遊戲中的常見特效,例如雨滴、雪花、或者爆炸效果的教程,那就太棒瞭。我希望這本書能夠幫助我建立起對Shader編程的初步認識和信心,讓我能夠更深入地理解Unity強大的渲染能力,並為我日後的遊戲開發之路打下堅實的基礎。

評分

《Unity 3D ShaderLab開發實戰詳解》——光是書名就讓我産生瞭濃厚的興趣。作為一名有幾年Unity開發經驗的從業者,我深知Shader在提升遊戲視覺錶現力方麵的重要性,但坦白說,在Shader開發這一塊,我總覺得還有很多未曾涉足的領域。我希望這本書能夠為我提供一個係統性的學習框架,深入地講解ShaderLab的語言特性,以及它在Unity渲染流水綫中的定位。特彆吸引我的是“實戰詳解”這個詞,我期待書中不僅僅是理論的闡述,更是包含一係列精心設計的案例,能夠讓我直接上手,體會Shader開發帶來的樂趣和挑戰。比如,我非常希望書中能涵蓋一些關於卡通渲染(Cel Shading)的實現,或者如何通過Shader來模擬各種特殊的材質,像是金屬、玻璃、或者布料。此外,如果書中能涉及一些關於Shader性能優化的實用技巧,以及如何在移動端和PC端之間進行Shader的適配和優化,那就更完美瞭。這本書的齣現,是我希望能夠將我的Shader開發能力提升到一個新颱階的契機,讓我能夠更遊刃有餘地處理各種復雜的渲染需求,為遊戲項目帶來更具視覺衝擊力的錶現。

評分

這本書的名字聽起來就讓人躍躍欲試,"Unity 3D ShaderLab開發實戰詳解"——單是看到這幾個字,就能想象齣作者在書中會傾囊相授,把那些讓新手望而卻步的ShaderLab技術,用一種通俗易懂、循序漸進的方式呈現在我們眼前。我一直對Unity的視覺錶現力非常著迷,尤其是那些炫酷的光影效果、逼真的材質,總是在感嘆背後究竟是如何實現的。很多時候,看到網上分享的一些Shader代碼,雖然效果驚艷,但對於沒有基礎的我來說,簡直如同天書。這本書的齣現,無疑是一道曙光,它承諾的“實戰詳解”四個字,讓我看到瞭希望。我期待的不僅僅是理論知識的堆砌,更是那些能夠直接上手、解決實際問題的代碼示例和案例分析。比如,書中會不會講解如何從零開始編寫一個簡單的光照模型,如何實現一些常見的特效,像是水麵波動、火焰燃燒、或者角色身上的特殊材質效果?我更希望它能深入剖析ShaderLab的語法和結構,讓我們理解為什麼這樣寫能夠實現特定的效果,而不僅僅是復製粘貼。如果書中還能提及一些性能優化的技巧,或者在不同平颱上的兼容性問題,那就更加完美瞭。總之,我非常期待這本書能成為我通往Unity Shader開發之路的得力助手,讓我能夠真正掌握這項技能,將腦海中的創意變成遊戲中的視覺奇觀。

評分

作為一個資深的Unity開發者,我一直在尋找能夠提升我Shader技能的書籍,而《Unity 3D ShaderLab開發實戰詳解》這個名字,瞬間就抓住瞭我的眼球。我對Shader編程並不陌生,但總覺得在某些方麵,尤其是那些復雜的、高性能的渲染技術上,還有很多值得深入學習的地方。這本書承諾的“實戰詳解”聽起來非常有吸引力,它暗示著書中不僅僅會羅列API,更會深入到每一個細節的實現原理,並且通過實際的項目案例來鞏固這些知識。我特彆關注的是,書中是否會對ShaderLab中的各種內置變量、函數以及關鍵字進行詳盡的解釋,並且提供不同應用場景下的最佳實踐。例如,對於一些高級的光照模型,比如PBR(Physically Based Rendering)的實現,書中是否會有專門的篇幅來講解其核心概念和代碼實現?我更希望它能覆蓋到一些圖形學的基礎知識,並與ShaderLab緊密結閤,讓我們理解為何要這樣做。同時,我也很想知道,書中是否會涉及到一些自定義渲染管綫的優化,或者如何針對移動端和PC端進行Shader的性能調優。這本書如果能提供一些關於Shader調試和分析的技巧,那將是極大的幫助。我希望它能引領我突破現有的技術瓶頸,讓我能夠更自信地應對各種復雜的渲染需求。

評分

價格便宜,書本不錯,隻是零基礎的不閤適

評分

正版,一般買書都在京東!

評分

頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂

評分

第一次用ShaderLab,不知道會不會看得懂

評分

裏麵的分析很詳細,國內很少有這麼好的書瞭。

評分

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

評分

發貨速度很快~~~~~~~~~~~~~~~~

評分

書的質量很好 內容一半

評分

不愧是人郵的,書印刷質量很好,有光盤,晚上要好好品嘗瞭

相關圖書

本站所有內容均為互聯網搜尋引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度google,bing,sogou

© 2025 book.coffeedeals.club All Rights Reserved. 靜流書站 版權所有