Unity ShaderLab 新手寶典

Unity ShaderLab 新手寶典

作者: 唐福幸
出版社: 清華大學
出版在: 2021-03-01
ISBN-13: 9787302571575
ISBN-10: 7302571570
裝訂格式: 平裝
總頁數: 342 頁





內容描述


本書是一部系統講解Unity ShaderLab語言與編程方法的入門教程(包含紙質圖書、Unity美術資源、Shader源代碼)。 本書共分14章,第1、2章,主要為了給讀者普及3D數學相關的基礎知識以及GPU渲染流水線的基本概念,為本書後面的內容提供基礎知識的儲備。第3~11章,主要講解了Shader的語法結構、兩種不同的編寫方式(Vertex Fragment Shader和Surface Shader)、光照模型、後期處理、自定義材質設置面板。這一部分內容是本書的主要部分,讀者朋友們一定要認真閱讀。第12章,主要講解Unity Shader可視化編輯插件——Amplify Shader Editor,方便讀者在編寫Shader之前梳理邏輯或者前期驗證效果的時候使用。第13、14章,通過對不同經典案例的分析和講解,使讀者進一步加深對Unity Shader的理解,並且能夠更加高效地編寫出可以應用於真實項目的Shader效果。 本書主要以3D美術人員的視角進行效果描述和邏輯講解的,因此非常適合毫無程序編寫經驗的3D美術人員作為Unity Shader的入門之選。並且本書同樣也適用於各大培訓機構、高等院校作為Unity Shader課程教材使用。 當然,從事Unity程序開發的朋友也可以閱讀本書,從3D 美術人員的視角開始切入,或許可以幫助你更好的理解Unity Shader,畢竟Shader也是一種視覺效果的設計。


目錄大綱


作者簡介
內容簡介
彩插
前言
第1章3D數學基礎
1.1坐標與坐標系
1.1.1坐標及坐標系的概念
1.1.2 3D中的坐標系
1.1.3左右手坐標系
1.2向量
1.2.1向量的幾種表示方法
1.2.2向量的計算方法
1.2.3相反向量
1.2.4向量的模
1.2.5標準化向量
1.3向量運算
1.3.1向量的加法運算
1.3.2向量的減法運算
1.3.3向量的縮放
1.3. 4向量的點積運算
1.3.5向量的叉積運算
1.3.6向量的運算法則
1.4矩陣
1.4.1矩陣的表示方法
1.4.2方陣和單位矩陣
1.4.3轉置矩陣
1.5矩陣運算
1.5.1標量與矩陣相乘
1.5.2矩陣之間的乘法
1.5.3矩陣與向量相乘
1.5.4矩陣的運算法則
1.6使用矩陣進行變換
1.6.1矩陣變換向量的原理
1.6.2旋轉矩陣
1.6.3縮放矩陣
1.6.4平移矩陣
1.7矩陣的深入講解
1.7.1矩陣的行列式
1.7.2餘子式和代數餘子式
1.7.3通過代數餘子式計算行列式
1.7.4逆矩陣
1.7.5正交矩陣
1.7.6逆矩陣的運算法則
第2章渲染流水線與Shader概念
2.1渲染流水線概念
2.2 3D圖形渲染完整流水線
2.3空間變換
2.3.1模型空間與世界空間
2.3.2攝像機空間
2.3.3裁切空間
2.3.4屏幕空間
2.3.5多個坐標空間存在的意義
2.4現代GPU渲染流水線
2.5 Shader概念
2.5.1什麼是Shader
2.5.2 Shader和材質的關係與區別
第3章ShaderLab語法基礎
3.1 Shader的組織結構
3.2 Shader的名稱
3.3 Properties
3.3.1數值類屬性
3.3.2顏色和向量類屬性
3.3.3紋理貼圖類屬性
3.3.4所有類型屬性匯總
3.4 SubShader
3.4.1 SubShader的標籤
3.4.2 Pass的渲染狀態
3.5 Fallback
第4章頂點-片段著色器基礎
4.1 Shader編碼工具
4.2創建和使用Shader
4.3 Shader的編寫方式
4.4 CG語法基礎
4.4.1編譯指令
4.4.2著色器函數
4.4.3語義
4.4.4在CG中調用屬性變量
4.4.5結構體
第5章Unity的包含文件
5.1包含文件的使用語法
5.2 UnityCG.cginc
5.2.1頂點著色器輸入結構體
5.2.2頂點變換函數
5.2.3向量變換函數
5.2.4燈光輔助函數
5.2.5視角向量函數
5.2.6其他輔助函數和宏
5.3 UnityShaderVariables.cginc
5.3.1空間變換矩陣
5.3.2時間變量
5.4其他包含文件
5.5使用包含文件簡化Shader
第6章Shader中的光照模型
6.1 Lambert光照模型
6.1.1 Lambert光照模型理論
6.1.2在Shader中獲取燈光變量
6.1.3基於Lambert光照模型的Shader
6.2 CG標準庫函數
6.3 Half-Lambert光照模型
6.4 Phong光照模型
6.4.1 Phong光照模型理論
6.4.2在Shader中獲取環境光變量
6.4.3基於Phong光照模型的Shader
6.5逐像素光照
6.6 Blinn-Phong光照模型
6.6.1 Blinn-Phong光照模型理論
6.6 .2 Blinn-Phong光照模型的Shader
6.7燈光陰影
6.7.1渲染路徑
6.7.2 Pass標籤
6.7.3內置的multi_compile
6.7.4實現陰影效果
第7章透明效果
7.1不透明物體的渲染順序
7.2透明物體的渲染順序
7.3混合透明效果
7.3.1混合指令
7.3.2混合係數
7.3.3混合操作
7.3.4混合透明的使用方法
7.3.5混合透明效果
7.3.6半透明物體的雙面渲染
7.4透明測試效果
7.4. 1透明測試的使用方法
7.4.2透明測試效果
7.4.3透明測試抗鋸齒
7.5模板測試
7.5.1模板測試的計算流程
7.5.2模板測試的使用語法
7.5.3比較方法
7.5.4模板操作
7.5.5延遲渲染路徑中的模板測試
7.5.6模板測試透明效果
第8章表面著色器的基礎概念
8.1為什麼不先學習表面著色器
8.2表面著色器的組織結構
8.3編譯指令中的可選參數
8.3 .1透明效果相關指令
8.3.2陰影和細分相關指令
8.3.3代碼生成選項
8.3.4其他選項
8.4表面函數的語法結構
8.4.1表面函數輸入結構體
8.4.2表面函數輸出結構體
第9章編寫表面著色器
9.1最簡單的表面著色器
9.2在表面著色器中使用法線貼圖
9.3表面著色器中的其他函數
9.3.1頂點修改函數
9.3.2自定義光照函數
9.3.3最終顏色修改函數
9.4曲面細分函數
9.4.1固定數量的曲面細分
9.4.2基於邊長的曲面細分
9.4.3視錐剔除曲面細分
9.4.4基於距離的曲面細分
9.4.5 Phong曲面細分
9.5透明效果
9.5.1混合透明效果
9.5.2透明測試效果
第10章Image Effec
10.1 GrabPass
10.1.1語法結構
10.1.2 GrabPass Shader
10.1.3測試效果
10.2 C#基礎語法
10.2.1 C#腳本的基本結構
10.2.2 Properties
10.2.3 C#中的常用函數
10.2.4基於Shader資源創建材質
10.2.5通過腳本往Material中傳遞變量
10.2.6 C#中的數學函數
10.2.7其他功能
10.3 Post-Processing
10.3.1後期處理的工作流程
10.3.2後期處理Shader
10.3.3後期處理腳本
10.4後期處理堆棧
10.4.1安裝Post Processing包
10.4.2設置Layer和Volume
10.4.3編寫Shader
10.4.4編寫C#腳本
第11章自定義材質面板
11.1不同類型的DrawerClass
11.1.1 Toggle
11.1.2 Enum
11.1.3 KeywordEnum
11.1.4在編譯指令中定義關鍵詞
11.1.5 PowerSlider
11.1.6 IntRange
11.2屬性的特性和Drawer
11.3裝飾性PropertyDrawer
11.3.1 SpaceDecorator
11.3.2 Header Decorator
11.4完整PropertyDrawer示例
第12章Amplify Shader Editor
12.1相同功能的其他插件
12.1.1 Shader Forge
12.1.2 ShaderGraph
12.2 ASE的使用流程
12.3 Shader屬性設置
12.3.1 General
12.3.2 Blend Mode
12.3.3 Stencil Buffer
12.3.4 Tessellation
12.3.5 Output
12.4常用節點
12.4.1常數和屬性類節點
12.4.2紋理和坐標類節點
12.4.3數學運算類節點
12.4.4向量運算相關節點
12.4. 5圖像處理相關節點
12.4.6攝像機和屏幕相關節點
12.4.7頂點數據類節點
12.4.8表面數據類節點
12.4.9時間節點
12.5使用ASE創建標準Shader
12.5.1 Albedo
12.5.2 Normal
12.5.3 Emission
12.5.4 Specular
12.5.5 Ambient Occlusion
12.5.6 Texture Coordinate
12.5.7屬性排序及最終效果
第13章初級案例
13.1流光效果
13.1.1實現邏輯
13.1.2使用ASE實現效果
13.1.3測試Shader效果
13.1.4編寫Shader
13.1 .5使用擴展
13.2描邊效果
13.2.1實現邏輯
13.2.2編寫Shader
13.2.3效果測試
13.3遮擋半透效果
13.3.1實現邏輯
13.3.2編寫Shader
13.3.3效果測試
13.4 Tri-Planar Mapping效果
13.4 .1實現邏輯
13.4.2使用ASE實現效果
13.4.3編寫Shader
13.4.4測試Shader效果
13.5 MatCap效果
13.5.1實現邏輯
13.5.2使用ASE實現效果
13.5.3編寫Shader
13.5.4測試Shader效果
13.6物體切割效果
13.6.1實現邏輯
13.6.2使用ASE實現效果
13.6.3 C#腳本
13.6.4測試效果
13.6.5編寫Shader
第14章進階案例
14.1消融效果
14.1.1實現邏輯
14.1.2資源準備
14.1.3使用ASE實現效果
14.1.4使用擴展
14.1.5編寫Shader
14.2動態液體效果
14.2.1實現邏輯
14.2.2模型準備
14.2.3使用ASE實現效果
14.2.4測試Shader
14.2.5編寫Shader
14.3 Billboard效果
14.3.1實現邏輯
14.3.2使用ASE實現雪花效果
14.3.3測試Shader
14.3.4編寫Shader
14.4序列幀動畫
14.4.1實現邏輯
14.4.2使用ASE實現效果
14.4.3測試Shader
14.4.4編寫Shader
14.5卡通風格效果
14.5.1資源準備
14.5.2使用ASE實現效果
14.5. 3編寫Shader
14.6夜視儀後期處理
14.6.1 Shader講解
14.6.2完整Shader代碼
14.6.3 C#腳本講解
14.6.4完整腳本代碼
14.6.5測試最終效果
14.6.6使用ASE編輯後期處理Shader
寫在最後
參考文獻


作者介紹


唐福幸資深3D美術師,從事3D行業已有六年,先後在多家公司擔任3D美術主管、3D技術美術師,擅長一切從零開始:開創團隊、制定流程、人員培訓、效果把控。
樂於鑽研技術,並與人溝通分享。能夠熟練使用Maya、ZBrush、Substance Painter、Substance Designer、Unity、Unreal等30餘款3D專業軟件,目前在有車以後公司擔任“高級技術美術師”。




相關書籍

GPU Pro: Advanced Rendering Techniques (Hardcover)

作者 Wolfgang Engel

2021-03-01

Unity 2017 從入門到精通

作者 Unity公司

2021-03-01

VR新未來

作者 周錫冰

2021-03-01