|
-- 會員 / 註冊 --
|
|
|
|
Unity 3D ShaderLab開發實戰詳解 ( 簡體 字) |
作者:郭浩瑜 | 類別:1. -> 多媒體 -> 遊戲引擎 -> 多媒體 -> 遊戲引擎 -> Unity |
譯者: |
出版社:人民郵電出版社 | 3dWoo書號: 37930 詢問書籍請說出此書號!【缺書】 NT售價: 345 元 |
出版日:4/1/2014 |
頁數:309 |
光碟數:1 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
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 |
序: |
|