注冊(cè) | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁(yè)出版圖書科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)游戲設(shè)計(jì)Unity 3D內(nèi)建著色器源碼剖析

Unity 3D內(nèi)建著色器源碼剖析

Unity 3D內(nèi)建著色器源碼剖析

定 價(jià):¥89.00

作 者: 熊新科 著
出版社: 人民郵電出版社
叢編項(xiàng):
標(biāo) 簽: 暫缺

ISBN: 9787115507044 出版時(shí)間: 2019-08-01 包裝: 平裝
開(kāi)本: 16開(kāi) 頁(yè)數(shù): 334 字?jǐn)?shù):  

內(nèi)容簡(jiǎn)介

  本書既是一本Unity 3D著色器代碼分析教程,也是一本Unity 3D著色器編程參考手冊(cè)。全書共12章,主要內(nèi)容包括:實(shí)時(shí)3D渲染流水線,輻射度、光度和色度學(xué)基本理論,Unity 3D著色器系統(tǒng),著色器工具函數(shù),Unity 3D引擎的多例化技術(shù),前向渲染和延遲渲染,Unity 3D的全局光照和陰影,UnityShadow Library.cginc文件分析,AutoLight.cginc文件分析,基于物理的光照模型,Unity 3D標(biāo)準(zhǔn)著色器和Standard. shader文件分析,片元著色器實(shí)時(shí)繪制圖像實(shí)戰(zhàn)案例。本書適合Unity Shader的游戲開(kāi)發(fā)者、程序員閱讀,也可供相關(guān)專業(yè)人士參考。

作者簡(jiǎn)介

  熊新科,資深游戲開(kāi)發(fā)工程師。2003年進(jìn)入游戲行業(yè),先后參與多項(xiàng)游戲的開(kāi)發(fā)。樂(lè)于分享技術(shù),活躍于各大Unity技術(shù)圈。

圖書目錄

目 錄
第 1章 實(shí)時(shí)3D渲染流水線 1
1.1 概述 1
1.2 頂點(diǎn)處理階段 2
1.2.1 頂點(diǎn)的組織方式 2
1.2.2 坐標(biāo)系統(tǒng)和頂點(diǎn)法線的確定方式 3
1.2.3 把頂點(diǎn)從模型空間變換到世界空間 5
1.2.4 把頂點(diǎn)從世界空間變換到觀察空間 9
1.2.5 把頂點(diǎn)從觀察空間變換到裁剪空間 11
1.3 光柵化階段 18
1.3.1 裁剪操作 18
1.3.2 透視除法 18
1.3.3 背面剔除操作 19
1.3.4 視口變換 21
1.3.5 掃描轉(zhuǎn)換 22
1.4 片元處理與輸出合并階段 22
1.4.1 紋理操作 23
1.4.2 輸出合并中的深度值操作 24
1.4.3 輸出合并中的Alpha值操作 26
1.4.4 Unity 3D ShaderLab中的Alpha混合指令及深度測(cè)試指令 27
第 2章 輻射度、光度和色度學(xué)基本理論 30
2.1 輻射度學(xué)基本理論 30
2.1.1 立體角 32
2.1.2 點(diǎn)光源、輻射強(qiáng)度和輻射亮度 33
2.1.3 輻射出射度和輻射入射度 34
2.2 光度學(xué)基本理論 34
2.3 色度學(xué)基本理論 36
2.3.1 什么是顏色 36
2.3.2 顏色的數(shù)字化及CIE1931-RGB顏色模型 37
2.3.3 CIE1931-XYZ顏色模型 40
2.3.4 CIE1931-Yxy顏色模型 40
2.4 伽馬校正和sRGB顏色空間 40
2.4.1 伽馬校正 40
2.4.2 sRGB顏色空間 44
2.4.3 Unity 3D中的伽馬空間和線性空間 45
第3章 Unity 3D著色器系統(tǒng) 47
3.1 從一個(gè)外觀著色器程序談起 47
3.1.1 BasicDiffuse著色器展開(kāi)后的代碼分析 49
3.1.2 外觀著色器的編譯指示符 56
3.1.3 傳給外觀著色器函數(shù)的參數(shù) 58
3.2 直接編寫頂點(diǎn)著色器和片元著色器 59
3.2.1 用Cg語(yǔ)言編寫的包含著色器功能的代碼片段 59
3.2.2 聲明目標(biāo)渲染器 60
3.2.3 著色器的語(yǔ)義 61
3.3 在Cg代碼中訪問(wèn)著色器屬性塊 66
3.3.1 在著色器代碼中聲明材質(zhì)屬性 66
3.3.2 在著色器代碼中聲明對(duì)應(yīng)于材質(zhì)屬性的變量 67
3.4 使用著色器多樣體處理多種情況 67
3.4.1 編譯指示符multi_compile和shader_feature的使用方式與區(qū)別 67
3.4.2 多樣體關(guān)鍵字的使用限制 68
3.4.3 內(nèi)置的multi_compile指示符快捷使用方式 68
3.5 多平臺(tái)著色器代碼的支持 68
3.6 確定著色器編譯器的版本 69
3.6.1 和著色器編譯器版本相關(guān)的宏 69
3.6.2 消除著色器代碼中各平臺(tái)的語(yǔ)義差異性 70
3.6.3 關(guān)閉可忽視的編譯警告 72
3.6.4 Unity 3D Shader的基本數(shù)據(jù)類型 72
3.6.5 消除平臺(tái)差異性 73
3.6.6 統(tǒng)一著色器常量緩沖區(qū)的宏定義 75
3.6.7 HLSL語(yǔ)言中的分支預(yù)測(cè)特性 75
第4章 引擎提供的著色器工具函數(shù)和數(shù)據(jù)結(jié)構(gòu) 78
4.1 UnityShaderVariables.cginc文件中的著色器常量和函數(shù) 78
4.1.1 進(jìn)行變換操作用的矩陣 78
4.1.2 和攝像機(jī)相關(guān)的常量緩沖區(qū) 81
4.1.3 與光照相關(guān)的工具函數(shù)和內(nèi)置光源 83
4.1.4 與陰影相關(guān)的著色器常量緩沖區(qū) 84
4.1.5 與逐幀繪制調(diào)用相關(guān)的著色器常量緩沖區(qū) 86
4.1.6 與霧效果相關(guān)的常量緩沖區(qū) 86
4.1.7 與光照貼圖相關(guān)的常量緩沖區(qū) 87
4.2 UnityCG.cginc文件中的工具函數(shù)和宏 90
4.2.1 數(shù)學(xué)常數(shù) 90
4.2.2 與顏色空間相關(guān)的常數(shù)和工具函數(shù) 90
4.2.3 描述頂點(diǎn)布局格式的結(jié)構(gòu)體 92
4.2.4 用于進(jìn)行空間變換的工具函數(shù) 93
4.2.5 與光照計(jì)算相關(guān)的工具函數(shù) 97
4.2.6 與HDR及光照貼圖顏色編解碼相關(guān)的工具函數(shù) 102
4.2.7 把高精度數(shù)據(jù)編碼到低精度緩沖區(qū)的函數(shù) 107
4.2.8 法線貼圖及其編解碼操作的函數(shù) 110
4.2.9 線性化深度值的工具函數(shù) 113
4.2.10 合并單程立體渲染時(shí)的左右眼圖像到一張紋理的函數(shù) 115
4.2.11 用來(lái)實(shí)現(xiàn)圖像效果的工具函數(shù)和預(yù)定義結(jié)構(gòu)體 117
4.2.12 計(jì)算屏幕坐標(biāo)的工具函數(shù) 118
4.2.13 與陰影處理相關(guān)的工具函數(shù) 121
4.2.14 與霧效果相關(guān)的工具函數(shù)和宏 123
第5章 Unity 3D引擎的多例化技術(shù) 128
5.1 多例化技術(shù)概述 128
5.1.1 不使用GPU多例化技術(shù)繪制多個(gè)相同模型的偽代碼 128
5.1.2 在Direct3D 11中設(shè)置輸入組裝階段的示例偽代碼 128
5.1.3 設(shè)置頂點(diǎn)輸入組裝布局 129
5.1.4 頂點(diǎn)著色器和片元著色器中對(duì)使用GPU多例化技術(shù)的對(duì)應(yīng)設(shè)置 129
5.2 如何在材質(zhì)中啟用多例化技術(shù) 130
5.3 添加逐實(shí)例數(shù)據(jù) 131
5.3.1 在外觀著色器中給材質(zhì)顏色變量增加GPU多例化支持的代碼 131
5.3.2 在C#層改變game object中的多例化材質(zhì)顏色屬性 132
5.4 在頂點(diǎn)著色器和片元著色器中使用多例化技術(shù) 132
5.4.1 在頂點(diǎn)著色器和片元著色器中啟用GPU多例化技術(shù) 132
5.4.2 UNITY_VERTEX_INPUT_INSTANCE_ID宏的定義 133
5.4.3 DEFAULT_UNITY_VERTEX_INPUT_INSTANCE_ID宏的定義 133
5.4.4 UNITY_INSTANCING_BUFFER_START及另外兩個(gè)配套的宏的定義 134
5.4.5 UNITY_INSTANCED_ARRAY_SIZE宏的定義 135
5.4.6 UNITY_SETUP_INSTANCE_ID宏的定義 135
5.4.7 DEFAULT_UNITY_SETUP_INSTANCE_ID和UNITY_TRANSFER_INSTANCE_ID宏的定義 135
5.4.8 著色器常量緩沖區(qū)UnityDrawCallInfo的定義 136
5.4.9 5.4.1節(jié)中展開(kāi)多例化相關(guān)的宏之后的代碼 137
第6章 前向渲染和延遲渲染 139
6.1 前向渲染概述 139
6.2 延遲渲染概述 139
6.3 Unity 3D中的各種渲染途徑 141
6.3.1 Unity 3D的前向渲染途徑細(xì)節(jié) 142
6.3.2 Unity 3D的延遲渲染途徑細(xì)節(jié) 144
第7章 Unity 3D的全局光照和陰影 147
7.1 全局照明和局部照明 147
7.2 引擎提供的光源類型 149
7.2.1 點(diǎn)光源 149
7.2.2 聚光燈光源 150
7.2.3 有向平行光源 150
7.2.4 區(qū)域面光源 150
7.2.5 cookie 151
7.3 使用實(shí)時(shí)模式光源進(jìn)行全局照明 151
7.4 使用烘焙式光照貼圖進(jìn)行全局照明 152
7.5 使用混合光照進(jìn)行全局照明 153
7.5.1 Baked Indirect照明模式 154
7.5.2 Shadowmask照明模式 154
7.5.3 Subtractive照明模式 155
7.6 光探針照明的細(xì)節(jié) 156
7.6.1 光探針照明概述 156
7.6.2 在場(chǎng)景中布置光探針 157
7.6.3 使用光探針 157
7.6.4 光探針代理體 158
7.6.5 反射用光探針 158
7.7 探討基于球諧函數(shù)的全局光照 160
7.7.1 半球空間的光照方程 161
7.7.2 蒙特卡洛積分估算法的定義 161
7.7.3 球諧函數(shù) 163
7.7.4 正交對(duì)偶基函數(shù)和球諧光照 166
7.7.5 Unity 3D中的球諧光照 169
7.8 引擎中的渲染陰影的功能 175
7.8.1 在光源空間中確定產(chǎn)生陰影的區(qū)域 175
7.8.2 在屏幕空間中確定產(chǎn)生陰影的區(qū)域 175
7.8.3 如何啟用陰影 175
7.8.4 透視走樣和層疊式陰影貼圖 177
第8章 UnityShadowLibrary.cginc 文件分析 179
8.1 陰影與全局照明系統(tǒng)的關(guān)系 179
8.2 聚光燈光源生成的陰影 179
8.2.1 啟用SPOT宏 179
8.2.2 UNITY_DECLARE_SHADOWMAP宏的定義 180
8.2.3 SAMPLE_DEPTH_TEXTURE及類似的宏 181
8.2.4 UnitySampleShadowmap函數(shù)版本1 182
8.2.5 UnitySampleShadowmap函數(shù)版本2 183
8.3 點(diǎn)光源生成的陰影 183
8.3.1 從立方體紋理貼圖中取得紋素對(duì)應(yīng)的深度值 183
8.3.2 對(duì)采樣值進(jìn)行混合計(jì)算 184
8.4 預(yù)烘焙的陰影 185
8.4.1 LPPV_SampleProbeOcclusion函數(shù) 185
8.4.2 UnitySampleBakedOcclusion函數(shù)版本1 186
8.4.3 UNITY_SAMPLE_TEX2D_SAMPLER宏的定義 186
8.4.4 UnitySampleBakedOcclusion函數(shù)版本2 187
8.4.5 UnityGetRawBakedOcclusions函數(shù) 187
8.4.6 UnityMixRealtimeAndBakedShadows函數(shù) 188
8.5 陰影的淡化處理 188
8.5.1 UnityComputeShadowFadeDistance函數(shù)和UnityCompute
ShadowFade函數(shù) 188
8.5.2 梯度計(jì)算 189
8.6 計(jì)算深度陰影的偏移值 190
8.6.1 UnityGetReceiverPlaneDepthBias函數(shù) 192
8.6.2 UnityCombineShadowcoordComponents函數(shù) 192
8.7 PCF陰影過(guò)濾的相關(guān)函數(shù) 193
8.7.1 UnitySampleShadowmap_PCF3x3NoHardwareSupport函數(shù) 194
8.7.2 用于進(jìn)行PCF過(guò)濾的輔助函數(shù) 195
8.7.3 執(zhí)行PCF過(guò)濾操作的函數(shù) 199
8.7.4 基于3×3內(nèi)核高斯模糊的PCF過(guò)濾操作 200
第9章 AutoLight.cginc文件分析 203
9.1 DIRECTIONAL宏的定義 203
9.2 有向平行光產(chǎn)生的基于屏幕空間的陰影的相關(guān)函數(shù) 203
9.2.1 啟用UNITY_NO_SCREENSPACE_SHADOWS宏時(shí)TRANSFER_SHADOW宏的定義 203
9.2.2 啟用UNITY_NO_SCREENSPACE_SHADOWS宏時(shí)的unitySampleShadow函數(shù) 204
9.2.3 未啟用UNITY_NO_SCREENSPACE_SHADOWS宏時(shí)TRANSFER_SHADOW宏的定義 204
9.2.4 UNITY_SAMPLE_SCREEN_SHADOW宏和UNITY_DECLARE_SCREENSPACE_ SHADOWMAP宏的定義 205
9.3 Unity 3D 5.6版本后的陰影和光照計(jì)算工具函數(shù) 205
9.3.1 UnityComputeForwardShadows函數(shù) 205
9.3.2 不同編譯條件下的UNITY_SHADOW_COORDS、UNITY_TRANSFER_SHADOW和UNITY_SHADOW_ATTENUATION宏的定義 206
9.3.3 計(jì)算點(diǎn)光源的光亮度衰減的宏 209
9.3.4 計(jì)算聚光燈光源的光亮度衰減的宏 209
9.3.5 計(jì)算有向平行光源的光亮度衰減的宏 211
9.3.6 計(jì)算帶cookie的點(diǎn)光源的光亮度衰減的宏 211
9.3.7 計(jì)算帶cookie的有向平行光源的光亮度衰減的宏 212
第 10章 基于物理的光照模型 213
10.1 漫反射和Lambert光照模型 213
10.2 鏡面反射和Phong光照模型 214
10.3 Blinn-Phong光照模型 215
10.4 基于物理的光照模型的相關(guān)概念 216
10.4.1 光的折射和折射率 216
10.4.2 均勻介質(zhì) 217
10.4.3 散射 217
10.4.4 雙向反射分布函數(shù) 218
10.4.5 菲涅爾反射 220
10.4.6 微表面和Cook-Torrance模型 223
10.4.7 定義菲涅爾方程 225
10.4.8 Cook-Torrance BRDF模型 226
第 11章 Unity 3D標(biāo)準(zhǔn)著色器和 Standard.shader文件分析 227
11.1 標(biāo)準(zhǔn)著色器中的各項(xiàng)材質(zhì)屬性 227
11.1.1 Rendering Mode屬性 227
11.1.2 Albedo屬性 228
11.1.3 Metal屬性 228
11.1.4 Smoothness屬性 229
11.1.5 Normal Map屬性 230
11.1.6 Height Map屬性 230
11.1.7 Occlusion屬性 234
11.1.8 Emission屬性 235
11.1.9 Secondary Map屬性 235
11.1.10 Detail Mask屬性 236
11.2 Standard.shader中的屬性變量 236
11.2.1 Standard.shader代碼段中的屬性變量 236
11.2.2 Standard.shader代碼段中的MetallicSetup函數(shù) 237
11.3 第 一個(gè)SubShader的前向通路 238
11.3.1 前向通路的簡(jiǎn)化版頂點(diǎn)著色器入口函數(shù) 239
11.3.2 前向通路的簡(jiǎn)化版片元著色器入口函數(shù) 247
11.3.3 前向通路的簡(jiǎn)化版著色器流程 254
11.3.4 前向通路的標(biāo)準(zhǔn)版頂點(diǎn)著色器入口函數(shù) 255
11.3.5 前向通路的標(biāo)準(zhǔn)版片元著色器入口函數(shù) 258
11.3.6 前向通路的標(biāo)準(zhǔn)版著色器流程 263
11.4 第 一個(gè)SubShader的FORWARD_DELTA通路 263
11.4.1 FORWARD_DELTA通路的簡(jiǎn)化版頂點(diǎn)著色器入口函數(shù) 263
11.4.2 FORWARD_DELTA通路的簡(jiǎn)化版片元著色器入口函數(shù) 265
11.4.3 FORWARD_DELTA通路的簡(jiǎn)化版著色器流程 267
11.4.4 FORWARD_DELTA通路的標(biāo)準(zhǔn)版頂點(diǎn)著色器入口函數(shù) 268
11.4.5 FORWARD_DELTA通路的標(biāo)準(zhǔn)版片元著色器入口函數(shù) 270
11.4.6 FORWARD_DELTA通路的標(biāo)準(zhǔn)版著色器流程 271
11.5 第 一個(gè)SubShader的ShadowCaster通路 272
11.5.1 ShadowCaster通路的編譯指示符以及著色器變量和宏 273
11.5.2 ShadowCaster通路的頂點(diǎn)著色器入口函數(shù) 275
11.5.3 ShadowCaster通路的片元著色器入口函數(shù) 278
11.6 第 一個(gè)SubShader的延遲通路 281
11.6.1 延遲通路的頂點(diǎn)著色器入口函數(shù) 281
11.6.2 延遲通路的片元著色器入口函數(shù) 282
11.7 第 一個(gè)SubShader的元渲染通路 284
11.7.1 元渲染通路的頂點(diǎn)著色器入口函數(shù) 284
11.7.2 元渲染通路的片元著色器入口函數(shù) 285
11.8 UnityStandardInput.cginc的結(jié)構(gòu)體、著色器變量、宏和函數(shù) 286
11.8.1 文件中預(yù)定義的宏 286
11.8.2 VertexInput結(jié)構(gòu)體 287
11.8.3 TexCoords函數(shù) 287
11.8.4 DetailMask函數(shù) 288
11.8.5 Albedo函數(shù) 288
11.8.6 Alpha函數(shù) 289
11.8.7 Occlusion函數(shù) 289
11.8.8 MetallicGloss函數(shù) 289
11.8.9 Emission函數(shù) 290
11.8.10 NormalInTangentSpace函數(shù) 290
11.8.11 Parallax函數(shù) 291
11.9 UnityStandardUtils.cginc的結(jié)構(gòu)體、著色器變量、宏和函數(shù) 292
11.9.1 PreMultiplyAlpha函數(shù) 292
11.9.2 OneMinusReflectivityFrom Metallic函數(shù) 292
11.9.3 DiffuseAndSpecularFrom Metallic函數(shù) 293
11.9.4 LerpWhiteTo函數(shù) 293
11.9.5 LerpOneTo函數(shù) 293
11.9.6 ParallaxOffset1Step函數(shù) 294
11.9.7 UnpackScaleNormalRGorAG函數(shù) 294
11.9.8 UnpackScaleNormal函數(shù) 295
11.9.9 BlendNormals函數(shù) 295
11.9.10 CreateTangentToWorldPer Vertex函數(shù) 295
11.9.11 ShadeSHPerVertex函數(shù) 295
11.9.12 ShadeSHPerPixel函數(shù) 296
11.9.13 BoxProjectedCubemap Direction函數(shù) 296
11.10 UnityImageBasedLighting.cginc的結(jié)構(gòu)體、著色器變量、宏和函數(shù) 299
11.10.1 Unity_GlossyEnvironmentData結(jié)構(gòu)體 299
11.10.2 UnityGlossyEnvironmentSetup 函數(shù) 300
11.10.3 Unity_GlossyEnvironment函數(shù) 300
11.10.4 perceptualRoughnessTo MipmapLevel函數(shù) 301
11.11 UnityGlobalIllumination.cginc的結(jié)構(gòu)體、著色器變量、宏和函數(shù) 301
11.11.1 ResetUnityLight函數(shù) 301
11.11.2 SubtractMainLightWithReal timeAttenuationFromLightmap函數(shù) 302
11.11.3 UnityGI_Base函數(shù) 302
11.11.4 UnityGI_IndirectSpecular函數(shù) 304
11.11.5 UnityGlobalIllumination函數(shù)版本1 305
11.11.6 UnityGlobalIllumination函數(shù)版本2 305
11.12 UnityStandardBRDF.cginc的結(jié)構(gòu)體、著色器變量、宏和函數(shù) 305
11.12.1 PerceptualRoughnessTo Roughness函數(shù) 306
11.12.2 RoughnessToPerceptual Roughness函數(shù) 306
11.12.3 SmoothnessToRoughness函數(shù) 306
11.12.4 SmoothnessToPerceptual Roughness函數(shù) 306
11.12.5 Pow4函數(shù)的4個(gè)不同版本 307
11.12.6 Pow5函數(shù)的4個(gè)不同版本 307
11.12.7 FresnelTerm函數(shù) 307
11.12.8 FresnelLerp函數(shù) 308
11.12.9 FresnelLerpFast函數(shù) 308
11.12.10 DisneyDiffuse函數(shù) 308
11.12.11 SmithJointGGXVisibilityTerm函數(shù) 309
11.12.12 GGXTerm函數(shù) 309
11.12.13 BRDF3_Indirect函數(shù) 310
11.12.14 BRDF3_Direct函數(shù) 310
11.12.15 BRDF3_Unity_PBS函數(shù) 311
11.12.16 BRDF2_Unity_PBS函數(shù) 311
11.12.17 BRDF1_Unity_PBS函數(shù) 313
11.13 UnityGBuffer.cginc的結(jié)構(gòu)體、著色器變量、宏和函數(shù) 314
11.13.1 UnityStandardData結(jié)構(gòu)體 314
11.13.2 UnityStandardDataToGbuffer函數(shù) 315
11.14 UnityMetaPass.cginc的結(jié)構(gòu)體、著色器變量、宏和函數(shù) 315
11.14.1 UnityMetaPass常量緩沖區(qū) 315
11.14.2 UnityMetaInput結(jié)構(gòu)體 315
11.14.3 UnityMetaVertexPosition函數(shù) 316
11.14.4 UnityMetaFragment函數(shù) 316
第 12章 實(shí)戰(zhàn)—在片元著色器用算法實(shí)時(shí)繪制圖像 318
12.1 搭建繪圖環(huán)境 319
12.2 設(shè)計(jì)繪制場(chǎng)景的著色器 320
12.2.1 頂點(diǎn)著色器所需的數(shù)據(jù)結(jié)構(gòu)和實(shí)現(xiàn) 320
12.2.2 判斷某點(diǎn)是否在三角形內(nèi) 321
12.2.3 基于距離場(chǎng)判定片元的顏色 322
12.2.4 定義五角星幾何體數(shù)據(jù) 326
12.2.5 判斷某點(diǎn)是否在圓及矩形內(nèi) 328
12.2.6 定義和繪制場(chǎng)景中的幾何體 331

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)