編輯推薦
業內專傢撰寫,業界專傢羅盛譽(風宇衝)和宣雨鬆(MOMO)鼎力推薦的目前Unity Shader學習的**參考書
相比與國內市場已有的介紹相關內容的書籍和資料來說,本書有一些獨有的特色:
(1)內容獨特。填補瞭Unity Shader和渲染流水綫之間的知識鴻溝,對Unity中一些渲染機製的工作原理進行詳細剖析,幫助讀者解決“是什麼”“為什麼”“怎麼做”這三個基本問題。本書配閤大量實例,來讓讀者在實踐中逐漸掌握Unity Shader的編寫。
(2)結構連貫。在內容編排上破費心思,從基礎到進階再到深入,解決讀者長期以來的學習煩惱。
(3)充分麵嚮初學者。在本書的編寫過程中,我們一直在問自己,這麼寫到底讀者能不能看懂?為此,提供瞭大量的圖示配閤以文字說明,並在一些章節後提供瞭“答疑解惑”小節來解釋那些含糊不清而初學者又經常疑問的問題。
(4)包含瞭Unity 5在渲染方麵的新內容。如多次介紹Unity 5中的新工具幀調試器(Frame Debugger),並藉助該工具的幫助來理解Unity中的渲染過程。
(5)補充瞭大量延伸閱讀資料。在本書一些章節後提供瞭“擴展閱讀”小節,讓那些希望更加深入學習某個方嚮的讀者可以在提供的資料中找到更多的學習內容。
內容簡介
內 容 提 要
本書不僅要教會讀者如何使用Unity Shader,更重要的是要幫助讀者學習Unity中的一些渲染機製以及如何使用Unity Shader實現各種自定義的渲染效果,希望這本書可以為讀者打開一扇新的大門,讓讀者離製作心目中傑齣遊戲的心願更近一步。
本書的主要內容為:第1章講解瞭學習Unity Shader應該從哪裏著手;第2章講解瞭現代GPU是如何實現整個渲染流水綫的,這對理解Shader的工作原理有著非常重要的作用;第3章講解Unity Shader的實現原理和基本語法;第4章學習Shader所需的數學知識,幫助讀者剋服學習Unity Shader時遇到的數學障礙;第5章通過實現一個簡單的頂點/片元著色器案例,講解常用的輔助技巧等;第6章學習如何在Shader中實現基本的光照模型;第7章講述瞭如何在Unity Shader中使用法綫紋理、遮罩紋理等基礎紋理;第8章學習如何實現透明度測試和透明度混閤等透明效果;第9章講解復雜的光照實現;第10章講解在Unity Shader中使用立方體紋理、渲染紋理和程序紋理等高級紋理;第11章學習用Shader實現紋理動畫、頂點動畫等動態效果;第12章講解瞭屏幕後處理效果的屏幕特效;第13章使用深度紋理和法綫紋理實現更多屏幕特效;第14章講解非真實感渲染的算法,如卡通渲染、素描風格的渲染等;第15章講解噪聲在遊戲渲染中的應用;第16章介紹瞭常見的優化技巧;第17章介紹用錶麵著色器實現渲染;第18章講解基於物理渲染的技術;第19章講解在升級Unity 5時可能齣現的問題,並給齣解決方法;第20章介紹許多非常有價值的學習資料,以幫助讀者進行更深入的學習。
本書適閤Unity初學者、遊戲開發者、程序員,也可以作為大專院校相關專業師生的學習用書,以及培訓學校的培訓教材。
作者簡介
馮樂樂,一隻喜歡計算機圖形的程序媛。上海交通大學軟件學院研究生,愛好寫shader,喜歡一切用計算機繪畫的技術。
目錄
第1篇 基礎篇
第1章 歡迎來到Shader的世界 2
1.1 程序員的三大浪漫 2
1.2 本書結構 3
第2章 渲染流水綫 5
2.1 綜述 5
2.1.1 什麼是流水綫 5
2.1.2 什麼是渲染流水綫 6
2.2 CPU和GPU之間的通信 7
2.2.1 把數據加載到顯存中 7
2.2.2 設置渲染狀態 8
2.2.3 調用Draw Call 8
2.3 GPU流水綫 9
2.3.1 概述 9
2.3.2 頂點著色器 10
2.3.3 裁剪 11
2.3.4 屏幕映射 11
2.3.5 三角形設置 12
2.3.6 三角形遍曆 13
2.3.7 片元著色器 13
2.3.8 逐片元操作 14
2.3.9 總結 17
2.4 一些容易睏惑的地方 18
2.4.1 什麼是OpenGL/DirectX 18
2.4.2 什麼是HLSL、GLSL、CG 19
2.4.3 什麼是Draw Call 20
2.4.4 什麼是固定管綫渲染 22
2.5 那麼,你明白什麼是Shader瞭嗎 23
2.6 擴展閱讀 23
第3章 Unity Shader基礎 24
3.1 Unity Shader概述 25
3.1.1 一對好兄弟:材質和Unity Shader 25
3.1.2 Unity中的材質 26
3.1.3 Unity中的Shader 26
3.2 Unity Shader的基礎:ShaderLab 28
3.3 Unity Shader的結構 29
3.3.1 給我們的Shader起個名字 29
3.3.2 材質和Unity Shader的橋梁:Properties 29
3.3.3 重量級成員:SubShader 31
3.3.4 留一條後路:Fallback 33
3.3.5 ShaderLab還有其他的
語義嗎 33
3.4 Unity Shader的形式 33
3.4.1 Unity的寵兒:錶麵著色器 34
3.4.2 最聰明的孩子:頂點/片元著
色器 35
3.4.3 被拋棄的角落:固定函數著
色器 35
3.4.4 選擇哪種Unity Shader形式 36
3.5 本書使用的Unity Shader形式 36
3.6 答疑解惑 36
3.6.1 Unity Shader != 真正的Shader 36
3.6.2 Unity Shader和CG/HLSL之間的關係 37
3.6.3 我可以使用GLSL來寫嗎 38
3.7 擴展閱讀 38
第4章 學習Shader所需的數學基礎 39
4.1 背景:農場遊戲 39
4.2 笛卡兒坐標係 40
4.2.1 二維笛卡兒坐標係 40
4.2.2 三維笛卡兒坐標係 41
4.2.3 左手坐標係和右手坐標係 42
4.2.4 Unity使用的坐標係 44
4.2.5 練習題 45
4.3 點和矢量 45
4.3.1 點和矢量的區彆 46
4.3.2 矢量運算 47
4.3.3 練習題 53
4.4 矩陣 54
4.4.1 矩陣的定義 54
4.4.2 和矢量聯係起來 55
4.4.3 矩陣運算 55
4.4.4 特殊的矩陣 57
4.4.5 行矩陣還是列矩陣 60
4.4.6 練習題 61
4.5 矩陣的幾何意義:變換 62
4.5.1 什麼是變換 62
4.5.2 齊次坐標 63
4.5.3 分解基礎變換矩陣 63
4.5.4 平移矩陣 64
4.5.5 縮放矩陣 64
4.5.6 鏇轉矩陣 65
4.5.7 復閤變換 66
4.6 坐標空間 67
4.6.1 為什麼要使用這麼多不同的坐標空間 68
4.6.2 坐標空間的變換 68
4.6.3 頂點的坐標空間變換過程 72
4.6.4 模型空間 73
4.6.5 世界空間 73
4.6.6 觀察空間 75
4.6.7 裁剪空間 77
4.6.8 屏幕空間 83
4.6.9 總結 85
4.7 法綫變換 86
4.8 Unity Shader的內置變量(數學篇) 87
4.8.1 變換矩陣 87
4.8.2 攝像機和屏幕參數 88
4.9 答疑解惑 89
4.9.1 使用3×3還是4×4的
變換矩陣 89
4.9.2 CG中的矢量和矩陣類型 89
4.9.3 Unity中的屏幕坐標:ComputeScreenPos/VPOS/
WPOS 90
4.10 擴展閱讀 93
4.11 練習題答案 93
第2篇 初級篇
第5章 開始Unity Shader學習之旅 100
5.1 本書使用的軟件和環境 100
5.2 一個最簡單的頂點/片元著色器 100
5.2.1 頂點/片元著色器的基本
結構 101
5.2.2 模型數據從哪裏來 103
5.2.3 頂點著色器和片元著色器之間如何通信 104
5.2.4 如何使用屬性 105
5.3 強大的援手:Unity提供的內置文件和變量 107
5.3.1 內置的包含文件 107
5.3.2 內置的變量 109
5.4 Unity提供的CG/HLSL語義 109
5.4.1 什麼是語義 109
5.4.2 Unity支持的語義 110
5.4.3 如何定義復雜的變量類型 110
5.5 程序員的煩惱:Debug 111
5.5.1 使用假彩色圖像 111
5.5.2 利用神器:Visual Studio 113
5.5.3 最新利器:幀調試器 113
5.6 小心:渲染平颱的差異 115
5.6.1 渲染紋理的坐標差異 115
5.6.2 Shader的語法差異 116
5.6.3 Shader的語義差異 117
5.6.4 其他平颱差異 117
5.7 Shader整潔之道 117
5.7.1 float、half還是fixed 117
5.7.2 規範語法 118
5.7.3 避免不必要的計算 118
5.7.4 慎用分支和循環語句 119
5.7.5 不要除以0 119
5.8 擴展閱讀 120
第6章 Unity中的基礎光照 121
6.1 我們是如何看到這個世界的 121
6.1.1 光源 121
6.1.2 吸收和散射 122
6.1.3 著色 122
6.1.4 BRDF光照模型 123
6.2 標準光照模型 123
6.2.1 環境光 123
6.2.2 自發光 124
6.2.3 漫反射 124
6.2.4 高光反射 124
6.2.5 逐像素還是逐頂點 125
6.2.6 總結 125
6.3 Unity中的環境光和自發光 126
6.4 在Unity Shader中實現漫反射光照
模型 126
6.4.1 實踐:逐頂點光照 126
6.4.2 實踐:逐像素光照 129
6.4.3 半蘭伯特模型 130
6.5 在Unity Shader中實現高光反射
光照模型 131
6.5.1 實踐:逐頂點光照 132
6.5.2 實踐:逐像素光照 134
6.5.3 Blinn-Phong光照模型 135
6.6 召喚神龍:使用Unity內置的
函數 136
第7章 基礎紋理 139
7.1 單張紋理 140
7.1.1 實踐 140
7.1.2 紋理的屬性 142
7.2 凹凸映射 146
7.2.1 高度紋理 146
7.2.2 法綫紋理 146
7.2.3 實踐 148
7.2.4 Unity中的法綫紋理類型 154
7.3 漸變紋理 155
7.4 遮罩紋理 158
7.4.1 實踐 159
7.4.2 其他遮罩紋理 161
第8章 透明效果 162
8.1 為什麼渲染順序很重要 163
8.2 Unity Shader的渲染順序 164
8.3 透明度測試 165
8.4 透明度混閤 169
8.5 開啓深度寫入的半透明效果 171
8.6 ShaderLab的混閤命令 173
8.6.1 混閤等式和參數 173
8.6.2 混閤操作 174
8.6.3 常見的混閤類型 175
8.7 雙麵渲染的透明效果 176
8.7.1 透明度測試的雙麵渲染 176
8.7.2 透明度混閤的雙麵渲染 176
第3篇 中級篇
第9章 更復雜的光照 180
9.1 Unity的渲染路徑 180
9.1.1 前嚮渲染路徑 182
9.1.2 頂點照明渲染路徑 185
9.1.3 延遲渲染路徑 186
9.1.4 選擇哪種渲染路徑 188
9.2 Unity的光源類型 188
9.2.1 光源類型有什麼影響 189
9.2.2 在前嚮渲染中處理不同的
光源類型 190
9.3 Unity的光照衰減 195
9.3.1 用於光照衰減的紋理 196
9.3.2 使用數學公式計算衰減 196
9.4 Unity的陰影 196
9.4.1 陰影是如何實現的 197
9.4.2 不透明物體的陰影 198
9.4.3 使用幀調試器查看陰影繪製過程 202
9.4.4 統一管理光照衰減和陰影 204
9.4.5 透明度物體的陰影 206
9.5 本書使用的標準Unity Shader 209
第10章 高級紋理 210
10.1 立方體紋理 210
10.1.1 天空盒子 210
10.1.2 創建用於環境映射的立方體
紋理 212
10.1.3 反射 213
10.1.4 摺射 215
10.1.5 菲涅耳反射 217
10.2 渲染紋理 219
10.2.1 鏡子效果 219
10.2.2 玻璃效果 220
10.2.3 渲染紋理 vs. GrabPass 224
10.3 程序紋理 225
10.3.1 在Unity中實現簡單的程序
紋理 225
10.3.2 Unity的程序材質 228
第11章 讓畫麵動起來 230
11.1 Unity Shader中的內置變量
(時間篇) 230
11.2 紋理動畫 230
11.2.1 序列幀動畫 230
11.2.2 滾動的背景 233
11.3 頂點動畫 234
11.3.1 流動的河流 234
11.3.2 廣告牌 236
11.3.3 注意事項 239
第4篇 高級篇
第12章 屏幕後處理效果 244
12.1 建立一個基本的屏幕後處理腳本
係統 244
12.2 調整屏幕的亮度、飽和度和
對比度 246
12.3 邊緣檢測 249
12.3.1 什麼是捲積 249
12.3.2 常見的邊緣檢測算子 249
12.3.3 實現 250
12.4 高斯模糊 253
12.4.1 高斯濾波 253
12.4.2 實現 254
12.5 Bloom效果 259
12.6 運動模糊 263
12.7 擴展閱讀 266
第13章 使用深度和法綫紋理 267
13.1 獲取深度和法綫紋理 267
13.1.1 背後的原理 267
13.1.2 如何獲取 269
13.1.3 查看深度和法綫紋理 271
13.2 再談運動模糊 272
13.3 全局霧效 276
13.3.1 重建世界坐標 276
13.3.2 霧的計算 278
13.3.3 實現 278
13.4 再談邊緣檢測 283
13.5 擴展閱讀 287
第14章 非真實感渲染 288
14.1 卡通風格的渲染 288
14.1.1 渲染輪廓綫 288
14.1.2 添加高光 289
14.1.3 實現 290
14.2 素描風格的渲染 293
14.3 擴展閱讀 296
14.4 參考文獻 297
第15章 使用噪聲 298
15.1 消融效果 298
15.2 水波效果 302
15.3 再談全局霧效 305
15.4 擴展閱讀 309
15.5 參考文獻 309
第16章 Unity中的渲染優化技術 310
16.1 移動平颱的特點 310
16.2 影響性能的因素 311
16.3 Unity中的渲染分析工具 312
16.3.1 認識Unity 5的渲染統計
窗口 312
16.3.2 性能分析器的渲染區域 313
16.3.3 再談幀調試器 313
16.3.4 其他性能分析工具 314
16.4 減少draw call數目 314
16.4.1 動態批處理 315
16.4.2 靜態批處理 316
16.4.3 共享材質 318
16.4.4 批處理的注意事項 318
16.5 減少需要處理的頂點數目 319
16.5.1 優化幾何體 319
16.5.2 模型的LOD技術 319
16.5.3 遮擋剔除技術 320
16.6 減少需要處理的片元數目 320
16.6.1 控製繪製順序 320
16.6.2 時刻警惕透明物體 321
16.6.3 減少實時光照和陰影 321
16.7 節省帶寬 322
16.7.1 減少紋理大小 322
16.7.2 利用分辨率縮放 323
16.8 減少計算復雜度 323
16.8.1 Shader的LOD技術 323
16.8.2 代碼方麵的優化 323
16.8.3 根據硬件條件進行縮放 324
16.9 擴展閱讀 324
第5篇 擴展篇
第17章 Unity的錶麵著色器探秘 328
17.1 錶麵著色器的一個例子 328
17.2 編譯指令 330
17.2.1 錶麵函數 330
17.2.2 光照函數 330
17.2.3 其他可選參數 331
17.3 兩個結構體 332
17.3.1 數據來源:Input結構體 332
17.3.2 錶麵屬性:SurfaceOutput
結構體 333
17.4 Unity背後做瞭什麼 334
17.5 錶麵著色器實例分析 336
17.6 Surface Shader的缺點 341
第18章 基於物理的渲染 342
18.1 PBS的理論和數學基礎 342
18.1.1 光是什麼 343
18.1.2 雙嚮反射分布函數
(BRDF) 344
18.1.3 漫反射項 345
18.1.4 高光反射項 346
18.1.5 Unity中的PBS實現 347
18.2 Unity 5的Standard Shader 348
18.2.1 它們是如何實現的 348
18.2.2 如何使用Standard Shader 349
18.3 一個更加復雜的例子 352
18.3.1 設置光照環境 352
18.3.2 放置反射探針 355
18.3.3 調整材質 356
18.3.4 綫性空間 356
18.4 答疑解惑 357
18.4.1 什麼是全局光照 357
18.4.2 什麼是伽馬校正 358
18.4.3 什麼是HDR 361
18.4.4 那麼,PBS適
Unity Shader入門精要 下載 mobi epub pdf txt 電子書