UNITY 3D SHABERLAB开发实战详解 第2版PDF电子书下载
- 电子书积分:12 积分如何计算积分?
- 作 者:郭浩瑜编著
- 出 版 社:北京:人民邮电出版社
- 出版年份:2015
- ISBN:9787115386243
- 页数:323 页
第1篇初识庐山真面目——Unity 3D Shader 2
第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
3.5.3 验证NDC 14
3.6 NDC之后 14
3.6.1 NDC之后发生的事情 14
第4章 基本的光照模型 16
4.1 光源对物体照明的分类 16
4.1.1 间接照明 16
4.1.2 直接照明 16
4.2 照明的计算方式:光照模型 16
4.2.1 漫反射和Lambert 16
4.2.2 镜面高光和Phong 17
4.2.3 半角向量和BlinnPhong 18
第2篇让你的应用更炫彩——Unity中的照明 20
第5章 第一个被执行的Pass 20
5.1 不同的LightMode被选择的顺序 20
5.1.1 渲染路径和Pass的LightMode标签 20
5.1.2 设计可以检测渲染路径的材质 20
5.1.3 设计便于检测渲染路径的场景 23
5.1.4 VertexLit渲染路径下Pass的执行 23
5.1.5 Forward渲染路径下Pass的执行 23
5.1.6 Deferred渲染路径下Pass的执行 23
5.1.7 不同渲染路径下的Pass执行规则总结 24
5.2 3个渲染路径之外 24
5.2.1 LightMode的其他值 24
5.2.2 设计检测用的材质 24
5.2.3 Always类型的Pass在3种渲染路径下的执行 26
5.2.4 LightMode的默认值及其在3种渲染路径下的执行 27
第6章 VertexLit渲染路径 28
6.1 顶点照明 28
6.1.1 什么是顶点照明 28
6.1.2 存取光源的变量 28
6.2 顶点照明和Unity存放光源的第一种方式 29
6.2.1 用于调试输出的材质 29
6.2.2 设计用于检测的场景 29
6.2.3 在Vertex Pass中的检测结果 30
6.2.4 无效数据 30
6.3 顶点照明和Unity存放光源的第二种方式 31
6.3.1 用于调试输出的材质 31
6.3.2 设计用于检测的场景 32
6.3.3 在VertexPass中的检测结果 32
6.4 顶点照明和Unity存放光源的第三种方式 33
6.4.1 Unity为Vertex Pass准备的光源 33
6.4.2 设计用于检测的场景 33
6.4.3 顶点照明中的点光源 33
6.4.4 计算顶点照明的ShadeVertexLights函数 34
6.4.5 顶点照明中的Pixel光源 34
6.4.6 顶点照明中的平行光 35
6.4.7 顶点照明中的灯光信息小结 37
6.4.8 一个顶点照明的实现例子 37
第7章 Forward渲染路径 39
7.1 渲染物体——ForwardBase和ForwardAdd 39
7.1.1 设计检测用的场景和材质 39
7.1.2 ForwardBase和ForwardAdd的表现 41
7.2 Forward渲染路径下的重要光源 41
7.2.1 设计检测用的材质 41
7.2.2 不存在Pixel光源时的情况 42
7.2.3 存在Pixel平行光时的情况 42
7.2.4 存在Pixel点光源时的情况 42
7.2.5 有多种类型的Pixel光源时的情况 43
7.2.6 Forward渲染路径下的Pixel光源小结 43
7.3 重要光源在ForwardAdd内的执行 43
7.3.1 设计用来检测Pixel光源的材质 43
7.3.2 设计检测用的场景 46
7.3.3 检测结果:ForwardAdd如何被执行 46
7.4 ForwardBase和Unity存放光源的第一种方式 47
7.4.1 设计检测用的材质 47
7.4.2 第一种方式内的Vertex点光源 48
7.4.3 第一种方式内的平行光 48
7.4.4 第一种方式内的重要Pixel点光源 48
7.4.5 只有ForwardBase时的情况总结 49
7.4.6 ForwardAdd对ForwardBase内光源的影响 49
7.4.7 有ForwardAdd时存放光源数据第一种方式的总结 51
7.5 ForwardAdd和Unity存放光源的第一种方式 51
7.5.1 设计检测用的材质 51
7.5.2 设计检测用的场景 52
7.5.3 ForwardAdd内的Pixel光源 52
7.5.4 ForwardAdd内的平行光 53
7.5.5 数组变量unity_4LightPos的使用情况分析 53
7.6 Forward渲染路径和Unity存放光源的第三种方式 53
7.6.1 检测ForwardBase内情况的材质 53
7.6.2 检测结果:第三种方式不包含对ForwardBase有效的数据 54
7.6.3 检测结果:第三种方式不包含对ForwardAdd有效的数据 54
7.7 Forward渲染路径总结 55
7.7.1 Forward渲染路径下材质的适应性 55
7.7.2 Unity如何为Forward渲染路径设置光源 55
第8章 基于光照贴图的烘焙照明 56
8.1 单光照贴图和VertexLit渲染路径 56
8.1.1 测试烘焙的场景 56
8.1.2 烘焙场景中使用的材质 57
8.1.3 烘焙的前提:静态物体 57
8.1.4 如何在烘焙中使用自发光材质 57
8.1.5 烘焙之后静态物体和非静态物体的实时照明 59
8.1.6 应用光照贴图到VertexLit渲染路径下的材质中 59
8.1.7 通过自己的材质改变实时光源对烘焙后物体的照明 61
8.2 在效果和性能间进行权衡 62
8.2.1 影响全局的Resolution选项 62
8.2.2 影响单个物体的Scale In Lightmap选项 63
8.3 单光照贴图和Forward渲染路径 64
8.3.1 单光照贴图在VertexLit和Forward下面的不同表现 64
8.3.2 准备可应用于烘焙的自发光材质 64
8.3.3 在ForwardBase内计算光照贴图 66
8.3.4 Forward渲染路径下烘焙之后的实时照明 67
8.4 单光照贴图在Deferred渲染路径下的实时阴影 69
8.5 双光照贴图和Deferred渲染路径 69
8.5.1 全局GI、间接照明以及双光照贴图 69
8.5.2 混合双光照贴图和实时照明 69
8.5.3 观察混合过程 71
8.5.4 双光照贴图的使用限制 72
8.6 双光照贴图和Forward渲染路径 73
8.7 方向光照贴图和Forward渲染路径 73
8.7.1 烘焙后的凹凸问题 73
8.7.2 方向光照贴图(Direction Lightmaps)和凹凸贴图 74
第9章 基于LightProbes的照明 76
9.1 初识LightProbes 76
9.1.1 LightProbes照明的优点 76
9.1.2 检测LightProbes照明的场景 76
9.1.3 使用Light Probe Group进行管理 78
9.1.4 烘焙场景光照信息到LightProbes中 78
9.1.5 对比Light Probes照明和实时照明 79
9.2 放置LightProbes的注意事项 79
9.2.1 必须形成一个体积 79
9.2.2 单个Light Probe必须处于采样光源的照射范围 79
9.3 动态更新LightProbes 80
9.3.1 跟新数据的注意事项 80
9.3.2 更改不同通道的Coefficient 80
9.4 照明采样的Archor Override 81
9.4.1 基于线性插值的采样 81
9.4.2 改变默认的插值位置 81
9.5 LightProbes照明和阴影 82
9.5.1 LightProbes和光照贴图的异同 82
9.5.2 烘焙阴影时可能会犯的错误 82
9.5.3 将静态物体的阴影烘焙到Light Probe上 83
9.5.4 LightProbes照明和实时阴影的混合 84
9.6 烘焙一个色彩丰富的场景 84
9.7 在自己的材质中使用LightProbes 85
9.7.1 为Forward渲染路径的材质计算LightProbes 86
9.7.2 使用ShadeSH9函数 87
9.7.3 在一个Surface Shader中进行计算 87
第3篇使应用更逼真——Shadows(阴影) 90
第10章 平面阴影 90
10.1 平行光对平面的投影 90
10.1.1 对平行光投影的考虑 90
10.1.2 进出阴影接受平面的矩阵 90
10.1.3 使用三角形相似计算阴影 91
10.2 点光源对平面的投影 92
10.3 阴影的淡出 93
10.3.1 有效利用计算平面阴影过程中的数据 93
10.3.2 潜在的问题 93
第11章 球体阴影 94
11.1 平行光对球体的投影 94
11.1.1 投影球体的信息 94
11.1.2 使用相似三角形计算投影 94
11.2 阴影的淡入/淡出 95
11.3 点光源对球体的投影 96
第12章 体积阴影 97
12.1 将顶点沿某一方向挤出 97
12.1.1 在Vertex函数中操作 97
12.1.2 判断顶点是向光还是背光 97
12.2 从Volumes中找到阴影区域 98
12.2.1 两次挤出 98
12.2.2 计算出阴影区域 99
12.2.3 渲染阴影 99
12.2.4 需要注意的问题 100
第13章 阴影映射 101
13.1 灯光空间和相机空间 101
13.1.1 观察两个空间 101
13.1.2 两个视角的Z深度 101
13.1.3 渲染Z深度的材质 101
13.2 投射Z深度 102
13.2.1 准备灯光视角的投影矩阵 102
13.2.2 在材质中计算投影后的Z深度 103
13.3 比较Z深度 105
13.3.1 比较Z深度的材质 105
13.3.2 Z精度引起的问题 106
13.3.3 增加Z的精度 106
13.3.4 对Z值进行偏移 107
第14章 内置的阴影 109
14.1 投射阴影 109
14.1.1 使用ShadowCaster投射阴影 109
14.1.2 ShadowCaster里都做了什么 110
14.1.3 写一个自己的ShadowCaster 110
14.1.4 改变ShadowCaster的行为 111
14.1.5 阴影和FallBack机制 112
14.2 接受阴影 113
14.3 Surface Shader和阴影 114
14.3.1 Surface Shader的阴影和Fallback 114
14.3.2 Surface Shader里的灯光参数和阴影 114
14.3.3 Surface Shader对Forward渲染路径下阴影的支持 114
第4篇Unity中的各种Shader 118
第15章 Pass的通用指令开关 118
15.1 使用LOD在运行时决定材质 118
15.1.1 材质的LOD 118
15.1.2 运行时设定单个材质的LOD 118
15.1.3 设定全局所有材质的LOD 119
15.1.4 Unity内置的LOD层级 120
15.2 渲染队列 120
15.2.1 标签队列和渲染顺序 120
15.2.2 渲染队列和ZTest判断 122
15.2.3 Unity中内置的渲染队列 122
15.2.4 一个利用渲染队列的例子 122
15.3 透明的产生 122
15.3.1 Alpha检测和8种比较条件 122
15.3.2 动态生成AlphaTest的材质 122
15.3.3 动态生成Shader的内容 124
15.3.4 结合AlphaTest和Blend操作 124
15.4 混合操作 125
15.4.1 什么是混合(Blend)操作 125
15.4.2 动态生成测试用的材质 125
15.4.3 生成Shader的代码 127
15.4.4 检测不同的混合操作 127
15.4.5 BlendOp选项 128
15.4.6 动态生成带BlendOp选项的材质 128
15.4.7 生成Shader的代码 129
15.4.8 检测BlendOp操作 130
15.4.9 两个使用Blend生成的效果 130
15.5 使用通道遮罩(ColorMask) 132
15.5.1 ColorMask的作用 132
15.5.2 检测ColorMask 132
15.5.3 一个使用ColorMask的例子 133
15.6 ZTest(深度测试) 134
15.6.1 存取场景的ZTest 134
15.6.2 RenderType标签和生成ZTest的关联 134
15.6.3 内置RenderType的值 135
15.6.4 Forward渲染路径下的ZTest 136
15.6.5 Deferred渲染路径下的ZTest 137
15.7 对Z深度的偏移 138
15.7.1 干预正常ZTest的手段 138
15.7.2 动态改变Offset的参数 138
15.7.3 观察Offset在不同应用条件下的表现 139
15.8 面的剔除操作 140
15.9 自动贴图坐标的生成 140
15.9.1 ObjectLinear和等价的Cg代码 141
15.9.2 EyeLinear和等价的Cg代码 142
15.9.3 SphereMap和等价的Cg代码 142
15.9.4 CubeReflect和等价的Cg代码 143
15.9.5 CubeNormal和等价的Cg代码 143
15.10 抓屏操作 144
15.10.1 如何使用GrabPass 144
15.10.2 一个模拟曲面反射的例子 145
15.11 Fog(雾效) 146
15.11.1 Fog和Unity的3种实现 146
15.11.2 材质中对Fog的控制 146
15.11.3 实现自己的Fog 147
15.12 Stencil(蒙版) 149
15.12.1 Stencil测试、Z深度和Alpha测试 149
15.12.2 使用Stencil测试改变渲染结果 149
15.12.3 综合使用Stencil和Queue 150
第16章 固定管线 152
16.1 Unity中固定管线的基本形态 152
16.1.1 固定管线基本形态 152
16.1.2 与照明相关的Material块 153
16.1.3 处理纹理的SetTexture块 153
16.1.4 基本形态的另一种写法 153
16.1.5 Combine语句 153
16.2 使用顶点色 154
16.2.1 使用ColorMaterial 154
16.2.2 使用Bind 154
16.3 在固定管线中使用光照贴图 155
16.4 嵌套Cg代码 155
第17章 Surface Shader 157
17.1 Surface Shader的适应性 157
17.1.1 一个分析策略 157
17.1.2 VertexLit渲染路径的检测材质 157
17.1.3 Forward渲染路径的检测材质 158
17.1.4 测试用的场景 159
17.1.5 检测结果:不独立支持VertexLit渲染路径 159
17.1.6 检测结果:对Forward渲染路径的有条件支持 159
17.2 Surface Shader和Deferred渲染路径 160
17.2.1 设计检测的策略和材质 160
17.2.2 检测结果:Surface Shader对Deferred渲染路径的支持条件 162
17.3 Forward渲染路径下的Surface Shader 163
17.3.1 Cg代码完全体 163
17.3.2 最简形式的等价Cg代码 164
17.3.3 Cg代码对光照贴图的支持 169
17.3.4 一个检测生成的ForwardBase场景 170
17.3.5 自动生成的ForwardAdd 171
17.3.6 参数noambient和novertexlights 174
17.3.7 参数approxview和halfasview 174
17.3.8 Forward渲染路径下的透明和混合模式参数 175
17.3.9 加强Forward渲染路径下效果的参数 177
17.4 Deferred渲染路径下的Surface Shader 180
17.4.1 自动生成的PrePassBase和PrePassFinal 180
17.4.2 PrePassBase都做了什么 183
17.4.3 LightBuffer里面的东西 185
17.4.4 计算LightBuffer所使用的材质 186
17.4.5 PrePassFinal的工作 191
17.4.6 FallBack和Surface Shader的阴影 192
17.4.7 精简用的参数 193
17.4.8 Vertex、finalcolor函数和addshadow选项 194
17.4.9 Deferred模式下的材质透明 194
17.4.10 decal参数 195
第18章 凹凸材质 196
18.1 切空间 196
18.2 凹凸贴图 196
18.2.1 计算到切空间的矩阵 196
18.2.2 Unity中法线贴图的压缩格式 197
18.2.3 使用切空间矩阵的另一种方法 197
18.2.4 Unity对切空间计算的支持 198
18.2.5 解压缩法线贴图的函数 199
18.2.6 在切空间中计算高光 199
18.2.7 Surface Shader和切空间 200
18.3 Parallax Mapping(视差映射) 200
18.3.1 Parallax Mapping及其别名 200
18.3.2 一个使用灰度图来偏移UV的材质 201
18.3.3 结合法线贴图 202
18.3.4 用视角来决定UV偏移 203
18.3.5 一个完整的实现 203
18.4 Relief Mapping(地势映射) 204
18.4.1 Parallax Mapping的极限和Relief Mapping的面世 204
18.4.2 Relief Mapping的算法 205
18.4.3 一个完整的实现 206
第19章 卡通材质 209
19.1 描边 209
19.1.1 沿法线挤出轮廓 209
19.1.2 容易产生的问题 210
19.1.3 在视空间中挤出 211
19.1.4 顶点位置的另一个含义 212
19.1.5 调和法线和顶点方向 213
19.1.6 判断顶点的指向 213
19.1.7 不仅仅是轮廓 214
19.1.8 通过Z偏移来描边 216
19.2 卡通着色 217
19.2.1 对光照进行离散化 217
19.2.2 使用2D贴图重新映射光照 219
第20章 镜面材质 221
20.1 镜像一个相机 221
20.1.1 镜子里的世界和我的计划 221
20.1.2 在脚本中对位置和角度进行镜像 221
20.2 使用镜像相机来渲染、投影 222
20.2.1 镜面材质的工作:采样被投影的渲染结果 222
20.2.2 脚本的工作:渲染镜像相机和设置投影矩阵 223
20.3 镜像相机的近剪切平面和倾斜矩阵 224
20.3.1 调节近剪切平面 224
20.3.2 使用倾斜矩阵微调视锥体 224
第21章 透明和半透明材质 225
21.1 什么是半透明材质 225
21.2 用简单来表达复杂 225
21.3 透明材质 226
第22章 体积雾 229
22.1 距离的表达:相对于背景的体积雾 229
22.1.1 需要计算的东西 229
22.1.2 使用一个Pass来完成所有的计算 229
22.1.3 黑色的雾效 230
22.2 厚度的表达:物体形体的体积雾 231
22.2.1 必须计算的两个数据 231
22.2.2 在Unity中使用一个Pass来完成所有计算 231
第23章 Wrap Model新解 234
23.1 一个可调节的Wrap光照模型 234
23.2 另一种实现途径 234
23.2.1 基于不同构想的Wrap 234
23.2.2 实现这种构想 235
23.2.3 进一步的变通 235
第24章 面积光 236
24.1 线光源 236
24.1.1 点、线、面 236
24.1.2 如何理解一个线光源 236
24.1.3 通过脚本传递线光源的几何信息 236
24.1.4 计算线光源的照明 237
24.1.5 线光源的辐射方向 238
24.1.6 线光源的衰减 238
24.2 面积光源 239
24.2.1 面积光和线光源的不同 239
24.2.2 通过脚本设定面积光的几何特性 239
24.2.3 计算面积光 240
24.2.4 和默认照明的整合 242
第25章 体积光 243
25.1 体积光和体积阴影 243
25.1.1 什么是体积光 243
25.1.2 体积光和体积阴影的关系 243
25.2 实现体积光 243
25.2.1 在Shader中表现体积光 243
25.2.2 脚本的帮助 244
第26章 材质替代渲染 246
26.1 相机(Camera)和渲染消息 246
26.1.1 相机的渲染消息发送顺序 246
26.1.2 物体的渲染消息发送顺序 247
26.1.3 相机和物体的渲染消息先后顺序 248
26.1.4 存在两个相机时的渲染消息 248
26.1.5 最后能改变Cull操作结果的地方 249
26.1.6 最后能设置材质数据的地方 249
26.2 相机(Camera)的渲染方法 250
26.2.1 Render方法 250
26.2.2 RenderWithShader方法 251
26.3 如何使用RenderWithShader方法 253
26.3.1 标签值不同的5个Shader 253
26.3.2 调用RenderWithShader方法的脚本 254
26.3.3 替换用的5个材质 255
26.3.4 检测RenderWithShader方法的效果 256
26.3.5 使用SubShader组织替代材质 257
26.3.6 如何设置替代材质的属性 257
26.3.7 将结果输出到屏幕上 258
26.4 SetReplacementShader和ResetReplacementShader 259
第27章 后期效果 260
27.1 Graphics的两个方法 260
27.1.1 与相机渲染方法的不同之处 260
27.1.2 Blit方法的简单示例 260
27.1.3 使用BlitMultiTap方法进行多重采样 262
27.2 一个简单的调色 265
27.2.1 调色用的脚本 265
27.2.2 调色用的材质 266
27.2.3 更高效的做法 267
27.3 景深 269
27.3.1 用于模糊图像的材质 269
27.3.2 进行纵横两次模糊操作 270
27.3.3 进行混合操作的脚本 271
27.3.4 进行混合操作的材质 271
27.3.5 提供一个可调节参数 272
27.4 轮廓检测 273
27.4.1 用脚本索要场景的Z深度和法线 273
27.4.2 在材质中进行边缘检测 273
27.5 扭曲 275
27.5.1 通过UV操作扭曲图像 275
27.5.2 限定扭曲的区域 276
27.5.3 使用物体来做遮罩 276
27.6 运动模糊 279
27.6.1 如何记录运动轨迹 279
27.6.2 实现运动模糊的材质 279
27.6.3 用于完成整个过程的脚本 280
27.6.4 通过Alpha和帧的混合操作实现运动模糊 281
27.7 噪波 281
27.7.1 根据Z深度来混合噪波 282
27.7.2 根据明暗程度来混合噪波 282
27.8 色彩的溢出 283
27.8.1 色彩溢出的算法考量 284
27.8.2 实现色彩溢出的采样计算 284
第28章 地形 286
28.1 地表的材质 286
28.1.1 地面纹理的控制贴图 286
28.1.2 如何自定义地表材质 287
28.1.3 如何使用更多的纹理贴图 288
28.2 花草的材质 288
28.2.1 非Billboard类型花草的材质 289
28.2.2 Terrain引擎传入的数据 290
28.2.3 Billboard类型花草的材质 290
28.2.4 自定义Detail Mesh的材质 291
28.3 树木的材质 291
28.3.1 树木的2D Billboard材质 291
28.3.2 3D形态树木的材质 292
28.3.3 应用Unity计算的Occlusion 294
第29章 投影 296
29.1 Unity的Projector 296
29.1.1 Projector中的材质被执行的顺序 296
29.1.2 如何写Projector使用的材质 296
29.1.3 控制投影淡进淡出的矩阵 297
29.2 实现自己的投影 298
29.2.1 设定投影矩阵的脚本 298
29.2.2 采样投影的材质 299
29.2.3 直接投影到屏幕上 300
29.2.4 模拟GUITexture 301
29.3 模拟粒子的广告牌效果 302
29.3.1 使用材质将物体面向相机 302
29.3.2 保持旋转角度 303
第30章 分割(Clip)一个物体 305
30.1 分割一个物体的思路 305
30.1.1 我们需要什么样的信息 305
30.1.2 脚本的帮助 305
30.1.3 在Shader中剪切一个物体 305
第5篇Shader的组织和优化 308
第31章 Shader的组织和复用 308
31.1 cginc文件 308
31.1.1 Unity的UnityCG.cginc文件 308
31.1.2 定义自己的cginc文件 308
31.1.3 使用自定义的cginc文件 309
31.2 通过UsePass来复用 310
31.2.1 定义自己要复用的Pass 310
31.2.2 复用这些Pass 311
31.3 定义自己的Shader关键字 311
31.3.1 使用关键字改变Shader的行为 311
31.3.2 定义自己的Shader关键字 311
31.4 使用multi_compilee编译Shader的多个版本 312
31.4.1 使用multi_compile实现多次编译 312
31.4.2 在脚本中选择Shader的版本 312
31.4.3 使用自定义的材质编辑器 313
31.4.4 关于MaterialEditor 314
31.5 Unity对DX11支持所带来的问题 314
第32章 你必须知道的渲染概念 316
32.1 逐顶点计算和逐像素计算 316
32.1.1 逐顶点计算 316
32.1.2 逐像素计算 316
32.1.3 如何在这两个概念中取舍 316
32.2 Draw Call的指标意义 316
32.2.1 Draw Call的概念 316
32.2.2 正确理解Draw Call对你开发应用的意义 316
32.2.3 Batching的概念和Unity为优化Draw Call所做的工作 317
32.2.4 优化Draw Call 317
32.3 利用渲染队列的技巧 317
32.3.1 渲染队列的概念 317
32.3.2 设置RenderQueue的技巧 317
第33章 基于渲染路径的优化 318
33.1 VertexLit渲染路径下的优化 318
33.1.1 VertexLit渲染路径的特点 318
33.1.2 合理的光照计算 318
33.2 Forward渲染路径下的优化 318
33.2.1 Forward渲染路径的特点 318
33.2.2 合理的光照计算 318
33.3 Deferred渲染路径下的优化 319
33.3.1 Deferred渲染路径的特点 319
33.3.2 合理的灯光布局 319
第34章 移动平台上的优化 320
34.1 移动平台的特点 320
34.2 一些指令的运算速度概念 320
34.3 几何复杂度的考量 320
34.4 贴图的问题 321
34.5 数据类型的使用方式 321
34.6 变量的使用 322
34.7 慎用后期效果 322
34.8 慎用透明效果 322
附录 相关资源 323
- 《Maya 2018完全实战技术手册》来阳编著 2019
- 《高等数学试题与详解》西安电子科技大学高等数学教学团队 2019
- 《区块链DAPP开发入门、代码实现、场景应用》李万胜著 2019
- 《Python3从入门到实战》董洪伟 2019
- 《大数据Hadoop 3.X分布式处理实战》吴章勇,杨强 2020
- 《星空摄影后期实战》阿五在路上著 2020
- 《高含硫气藏开发腐蚀控制技术与实践》唐永帆,张强 2018
- 《半小时漫画股票实战法》财经杂质著 2019
- 《深度学习与飞桨PaddlePaddle Fluid实战》于祥 2019
- 《数字插画实战 人像创作30例》王鲁光著 2019
- 《市政工程基础》杨岚编著 2009
- 《家畜百宝 猪、牛、羊、鸡的综合利用》山西省商业厅组织技术处编著 1959
- 《《道德经》200句》崇贤书院编著 2018
- 《高级英语阅读与听说教程》刘秀梅编著 2019
- 《计算机网络与通信基础》谢雨飞,田启川编著 2019
- 《看图自学吉他弹唱教程》陈飞编著 2019
- 《法语词汇认知联想记忆法》刘莲编著 2020
- 《培智学校义务教育实验教科书教师教学用书 生活适应 二年级 上》人民教育出版社,课程教材研究所,特殊教育课程教材研究中心编著 2019
- 《国家社科基金项目申报规范 技巧与案例 第3版 2020》文传浩,夏宇编著 2019
- 《流体力学》张扬军,彭杰,诸葛伟林编著 2019
- 《指向核心素养 北京十一学校名师教学设计 英语 七年级 上 配人教版》周志英总主编 2019
- 《办好人民满意的教育 全国教育满意度调查报告》(中国)中国教育科学研究院 2019
- 《北京生态环境保护》《北京环境保护丛书》编委会编著 2018
- 《人民院士》吴娜著 2019
- 《指向核心素养 北京十一学校名师教学设计 英语 九年级 上 配人教版》周志英总主编 2019
- 《中国人民的心》杨朔著;夕琳编 2019
- 《高等院校旅游专业系列教材 旅游企业岗位培训系列教材 新编北京导游英语》杨昆,鄢莉,谭明华 2019
- 《中华人民共和国成立70周年优秀文学作品精选 短篇小说卷 上 全2册》贺邵俊主编 2019
- 《指向核心素养 北京十一学校名师教学设计 数学 九年级 上 配人教版》周志英总主编 2019
- 《中华人民共和国成立70周年优秀文学作品精选 中篇小说卷 下 全3册》洪治纲主编 2019