主页 详情

《Unity 3D ShaderLab开发实战详解》_郭浩瑜编著_13510148_9787115338907

【书名】:《Unity 3D ShaderLab开发实战详解》
【作者】:郭浩瑜编著
【出版社】:北京:人民邮电出版社
【时间】:2014
【页数】:311
【ISBN】:9787115338907
【SS码】:13510148

最新查询

内容简介

第1篇 初识庐山真面目——Unity 3D Shader

第1章Shader(着色器)的概念和在3D游戏中的作用

1.1 Shader的概念

1.1.1虚拟世界中的光明和色彩

1.1.2游戏开发人员的终点

1.1.3 Shader(着色器)简史

1.2 Shader的实例化

1.3 Shader的实现语言

1.3.1 GPU上的编程

1.3.2 Unity中的着色器编程

第2章Unity中Shader(着色器)的形态

2.1 Unity通过ShaderLab来组织Shader

2.1.1关键字Shader

2.1.2使用SubShader组织Shader的不同实现

2.1.3 SubShader的重要标签

2.1.4 SubShader中的Pass块

2.1.5 Pass块的标签及其名字的意义

2.1.6使用FallBack保证Shader的广泛适应性

2.2 Unity的ShaderLab所支持的Shader编程语言

2.3 Unity中Shader的3种形态

2.3.1固定管线

2.3.2可编程Shader

2.3.3 ShaderLab的骄傲:Surface Shader

2.4 Shader的数据接口:属性和uniform变量

2.4.1在Propeties块中定义属性

2.4.2通过图形界面操作属性

2.4.3通过脚本操控属性

2.4.4矩阵:不能在属性块定义的变量

2.4.5在Cg代码中使用属性

第3章Shader(着色器)中用到的各种空间概念

3.1模型空间

3.1.1为什么用模型空间

3.1.2在脚本和Shader中进出模型空间

3.2世界坐标空间

3.2.1统一表达:世界坐标空间

3.2.2在脚本和Shader中进出世界坐标空间

3.3视空间

3.3.1渲染的需要:视空间

3.3.2在脚本和Shader中进出视空间

3.4空间的一块:视锥体

3.5剪切空间

3.5.1投影

3.5.2脚本和Shader中的投影矩阵

第4章 基本的光照模型

4.1光源对物体照明的分类

4.1.1间接照明

4.1.2直接照明

4.2照明的计算方式:光照模型

4.2.1漫反射和Lambert

4.2.2镜面高光和Phong

4.2.3半角向量和BlinnPhong

第2篇 让你的应用更炫彩——Unity中的照明

第5章 第一个被执行的Pass

5.1不同的LightMode被选择的顺序

5.1.1渲染路径和Pass的LightMode标签

5.1.2设计可以检测渲染路径的材质

5.1.3设计便于检测渲染路径的场景

5.1.4 VertexLit渲染路径下Pass的执行

5.1.5 Forward渲染路径下Pass的执行

5.1.6 Deferred渲染路径下Pass的执行

5.1.7不同渲染路径下的Pass执行规则总结

5.2 3个渲染路径之外

5.2.1 LightMode的其他值

5.2.2设计检测用的材质

5.2.3 Always类型的Pass在3种渲染路径下的执行

5.2.4 LightMode的默认值及其在3种渲染路径下的执行

第6章VertexLit渲染路径

6.1顶点照明

6.1.1什么是顶点照明

6.1.2存取光源的变量

6.2顶点照明和Unity存放光源的第一种方式

6.2.1用于调试输出的材质

6.2.2设计用于检测的场景

6.2.3在Vertex Pass中的检测结果

6.2.4无效数据

6.3顶点照明和Unity存放光源的第二种方式

6.3.1用于调试输出的材质

6.3.2设计用于检测的场景

6.3.3在Vertex Pass中的检测结果

6.4顶点照明和Unity存放光源的第三种方式

6.4.1 Unity为Vertex Pass准备的光源

6.4.2设计用于检测的场景

6.4.3顶点照明中的点光源

6.4.4计算顶点照明的ShadeVertexLights函数

6.4.5顶点照明中的Pixel光源

6.4.6顶点照明中的平行光

6.4.7顶点照明中的灯光信息小结

6.4.8一个顶点照明的实现例子

第7章Forward渲染路径

7.1 ForwardBase和ForwardAdd

7.1.1设计检测用的场景和材质

7.1.2 ForwardBase和ForwardAdd的表现

7.2 Forward渲染路径下的重要光源

7.2.1设计检测用的材质

7.2.2不存在Pixel光源时的情况

7.2.3存在Pixel平行光时的情况

7.2.4存在Pixel点光源时的情况

7.2.5有多种类型的Pixel光源时的情况

7.2.6 Forward渲染路径下的Pixel光源小结

7.3重要光源在ForwardAdd内的执行

7.3.1设计用来检测Pixel光源的材质

7.3.2设计检测用的场景

7.3.3检测结果:ForwardAdd如何被执行

7.4 ForwardBase和Unity存放光源的第一种方式

7.4.1设计检测用的材质

7.4.2第一种方式内的Vertex点光源

7.4.3第一种方式内的平行光

7.4.4第一种方式内的重要Pixel点光源

7.4.5只有ForwardBase时的情况总结

7.4.6 ForwardAdd对ForwardBase内光源的影响

7.4.7有ForwardAdd时存放光源数据第一种方式的总结

7.5 ForwardAdd和Unity存放光源的第一种方式

7.5.1设计检测用的材质

7.5.2设计检测用的场景

7.5.3 ForwardAdd内的Pixel光源

7.5.4 ForwardAdd内的平行光

7.5.5数组变量unity4LightPos的使用情况分析

7.6 Forward渲染路径和Unity存放光源的第三种方式

7.6.1检测ForwardBase内情况的材质

7.6.2检测结果:第三种方式不包含对ForwardBase有效的数据

7.6.3检测结果:第三种方式不包含对ForwardAdd有效的数据

7.7 Forward渲染路径总结

7.7.1 Forward渲染路径下材质的适应性

7.7.2 Unity如何为Forward渲染路径设置光源

第8章 基于光照贴图的烘焙照明

8.1单光照贴图和VertexLit渲染路径

8.1.1测试烘焙的场景

8.1.2烘焙场景中使用的材质

8.1.3烘焙的前提:静态物体

8.1.4如何在烘焙中使用自发光材质

8.1.5烘焙之后静态物体和非静态物体的实时照明

8.1.6应用光照贴图到VertexLit渲染路径下的材质中

8.1.7通过自己的材质改变实时光源对烘焙后物体的照明

8.2在效果和性能间进行权衡

8.2.1影响全局的Resolution选项

8.2.2影响单个物体的Scale In Lightmap选项

8.3单光照贴图和Forward渲染路径

8.3.1单光照贴图在VertexLit和Forward下面的不同表现

8.3.2准备可应用于烘焙的自发光材质

8.3.3在ForwardBase内计算光照贴图

8.3.4 Forward渲染路径下烘焙之后的实时照明

8.4单光照贴图在Deferred渲染路径下的实时阴影

8.5双光照贴图和Deferred渲染路径

8.5.1全局GI、间接照明以及双光照贴图

8.5.2混合双光照贴图和实时照明

8.5.3观察混合过程

8.5.4双光照贴图的使用限制

8.6双光照贴图和Forward渲染路径

8.7方向光照贴图和Forward渲染路径

8.7.1烘焙后的凹凸问题

8.7.2方向光照贴图(Direction Lightmaps)和凹凸贴图

第9章 基于LightProbes的照明

9.1初识LightProbes

9.1.1 LightProbes照明的优点

9.1.2检测LightProbes照明的场景

9.1.3使用Light Probe Group进行管理

9.1.4烘焙场景光照信息到LightProbes中

9.1.5对比Light Probes照明和实时照明

9.2放置LightProbes的注意事项

9.2.1必须形成一个体积

9.2.2单个Light Probe必须处于采样光源的照射范围

9.3动态更新LightProbes

9.3.1跟新数据的注意事项

9.3.2更改不同通道的Coeffcient

9.4照明采样的Archor Override

9.4.1基于线性插值的采样

9.4.2改变默认的插值位置

9.5 LightProbes照明和阴影

9.5.1 LightProbes和光照贴图的异同

9.5.2烘焙阴影时可能会犯的错误

9.5.3将静态物体的阴影烘焙到Light Probe上

9.5.4 LightProbes照明和实时阴影的混合

9.6烘焙一个色彩丰富的场景

9.7在自己的材质中使用LightProbes

9.7.1为Forward渲染路径的材质计算LightProbes

9.7.2使用ShadeSH9函数

9.7.3在一个Surface Shader中进行计算

第3篇 使应用更逼真——Shadows(阴影)

第10章 平面阴影

10.1平行光对平面的投影

10.1.1对平行光投影的考虑

10.1.2进出阴影接受平面的矩阵

10.1.3使用三角形相似计算阴影

10.2点光源对平面的投影

10.3阴影的淡出

10.3.1有效利用计算平面阴影过程中的数据

10.3.2潜在的问题

第11章 球体阴影

11.1平行光对球体的投影

11.1.1投影球体的信息

11.1.2使用相似三角形计算投影

11.2阴影的淡入/淡出

11.3点光源对球体的投影

第12章 体积阴影

12.1将顶点沿某一方向挤出

12.1.1在Vertex函数中操作

12.1.2判断顶点是向光还是背光

12.2从Volumes中找到阴影区域

12.2.1两次挤出

12.2.2计算出阴影区域

12.2.3渲染阴影

12.2.4需要注意的问题

第13章 阴影映射

13.1灯光空间和相机空间

13.1.1观察两个空间

13.1.2两个视角的Z深度

13.1.3渲染Z深度的材质

13.2投射Z深度

13.2.1准备灯光视角的投影矩阵

13.2.2在材质中计算投影后的Z深度

13.3比较Z深度

13.3.1比较Z深度的材质

13.3.2 Z精度引起的问题

13.3.3增加Z的精度

13.3.4对Z值进行偏移

第14章 内置的阴影

14.1投射阴影

14.1.1使用ShadowCaster投射阴影

14.1.2 ShadowCaster里都做了什么

14.1.3写一个自己的ShadowCaster

14.1.4改变ShadowCaster的行为

14.1.5阴影和FallBack机制

14.2接受阴影

14.3 Surface Shader和阴影

14.3.1 Surface Shader的阴影和Fallback

14.3.2 Surface Shader里的灯光参数和阴影

14.3.3 Surface Shader对Forward渲染路径下阴影的支持

第4篇Unity中的各种Shader

第15章Pass的通用指令开关

15.1使用LOD在运行时决定材质

15.1.1材质的LOD

15.1.2运行时设定单个材质的LOD

15.1.3设定全局所有材质的LOD

15.1.4 Unity内置的LOD层级

15.2渲染队列

15.2.1标签队列和渲染顺序

15.2.2渲染队列和ZTest判断

15.2.3 Unity中内置的渲染队列

15.3透明的产生

15.3.1 Alpha检测和8种比较条件

15.3.2动态生成A1phaTest的材质

15.3.3动态生成Shader的内容

15.3.4结合AlphaTest和Blend操作

15.4混合操作

15.4.1什么是混合(Blend)操作

15.4.2动态生成测试用的材质

15.4.3生成Shader的代码

15.4.4检测不同的混合操作

15.4.5 BlendOp选项

15.4.6动态生成带BlendOp选项的材质

15.4.7生成Shader的代码

15.4.8检测BlendOp操作

15.5使用通道遮罩(ColorMask)

15.5.1 ColorMask的作用

15.5.2检测ColorMask

15.5.3一个使用ColorMask的例子

15.6 ZTest(深度测试)

15.6.1存取场景的ZTest

15.6.2 RenderType标签和生成ZTest的关联

15.6.3内置RenderType的值

15.6.4 Forward渲染路径下的ZTest

15.6.5 Deferred渲染路径下的ZTest

15.7对Z深度的偏移

15.7.1干预正常ZTest的手段

15.7.2动态改变Offset的参数

15.7.3观察Offset在不同应用条件下的表现

15.8面的剔除操作

15.9自动贴图坐标的生成

15.9.1 ObjectLinear和等价的Cg代码

15.9.2 EyeLinear和等价的Cg代码

15.9.3 SphereMap和等价的Cg代码

15.9.4 CubeReflect和等价的Cg代码

15.9.5 CubeNormal和等价的Cg代码

15.10抓屏操作

15.10.1如何使用GrabPass

15.10.2一个模拟曲面反射的例子

15.11 Fog(雾效)

15.11.1 Fog和Unity的3种实现

15.11.2材质中对Fog的控制

15.11.3实现自己的Fog

第16章 固定管线

16.1 Unity中固定管线的基本形态

16.1.1基本形态

16.1.2与照明相关的Material块

16.1.3处理纹理的SetTexture块

16.1.4基本形态的另一种写法

16.1.5 Combine语句

16.2使用顶点色

16.2.1使用ColorMaterial

16.2.2使用Bind

16.3在固定管线中使用光照贴图

16.4嵌套Cg代码

第17章Surface Shader

17.1 Surface Shader的适应性

17.1.1一个分析策略

17.1.2 VertexLit渲染路径的检测材质

17.1.3 Forward渲染路径的检测材质

17.1.4测试用的场景

17.1.5检测结果:不独立支持VertexLit渲染路径

17.1.6检测结果:对Forward渲染路径的有条件支持

17.2 Surface Shader和Deferred渲染路径

17.2.1设计检测的策略和材质

17.2.2检测结果:Surface Shader对Deferred渲染路径的支持条件

17.3 Forward渲染路径下的Surface Shader

17.3.1 Cg代码完全体

17.3.2最简形式的等价Cg代码

17.3.3 Cg代码对光照贴图的支持

17.3.4一个检测生成的ForwardBase场景

17.3.5自动生成的ForwardAdd

17.3.6参数noambient和novertexlights

17.3.7参数approxvi ew和halfasview

17.3.8 Forward渲染路径下的透明和混合模式参数

17.3.9加强Forward渲染路径下效果的参数

17.4 Deferred渲染路径下的Surface Shader

17.4.1自动生成的PrePassBase和PrePassFinal

17.4.2 PrePassBase都做了什么

17.4.3_ LightBuffer里面的东西

17.4.4计算LightBuffer所使用的材质

17.4.5 PrePassFinal的工作

17.4.6 FallBack和Surface Shader的阴影

17.4.7精简用的参数

17.4.8 Vertex、finalcolor函数和addshadow选项

17.4.9 Deferred模式下的材质透明

17.4.10 decal参数

第18章 凹凸材质

18.1切空间

18.2凹凸贴图

18.2.1计算到切空间的矩阵

18.2.2 Unity中法线贴图的压缩格式

18.2.3使用切空间矩阵的另一种方法

18.2.4 Unity对切空间计算的支持

18.2.5解压缩法线贴图的函数

18.2.6在切空间中计算高光

18.2.7 Surface Shader和切空间

18.3 Parallax Mapping(视差映射)

18.3.1 Parallax Mapping及其别名

18.3.2一个使用灰度图来偏移UV的材质

18.3.3结合法线贴图

18.3.4用视角来决定UV偏移

18.3.5一个完整的实现

18.4 Relief Mapping(地势映射)

18.4.1 Parallax Mapping的极限和Relief Mapping的面世

18.4.2 Relief Mapping的算法

18.4.3一个完整的实现

第19章 卡通材质

19.1描边

19.1.1沿法线挤出轮廓

19.1.2容易产生的问题

19.1.3在视空间中挤出

19.1.4顶点位置的另一个含义

19.1.5调和法线和顶点方向

19.1.6判断顶点的指向

19.1.7不仅仅是轮廓

19.1.8通过Z偏移来描边

19.2卡通着色

19.2.1对光照进行离散化

19.2.2使用2D贴图重新映射光照

第20章 镜面材质

20.1镜像一个相机

20.1.1镜子里的世界和我的计划

20.1.2在脚本中对位置和角度进行镜像

20.2使用镜像相机来渲染、投影

20.2.1镜面材质的工作:采样被投影的渲染结果

20.2.2脚本的工作:渲染镜像相机和设置投影矩阵

20.3镜像相机的近剪切平面和倾斜矩阵

20.3.1调节近剪切平面

20.3.2使用倾斜矩阵微调视锥体

第21章 半透明材质

21.1什么是半透明材质

21.2用简单来表达复杂

第22章 体积雾

22.1距离的表达:相对于背景的体积雾

22.1.1需要计算的东西

22.1.2使用一个Pass来完成所有的计算

22.1.3黑色的雾效

22.2厚度的表达:物体形体的体积雾

22.2.1必须计算的两个数据

22.2.2在Unity中使用一个Pass来完成所有计算

第23章Wrap Model新解

23.1一个可调节的Wrap光照模型

23.2另一种实现途径

23.2.1基于不同构想的Wrap

23.2.2实现这种构想

23.2.3进一步的变通

第24章 面积光

24.1线光源

24.1.1点,线,面

24.1.2如何理解一个线光源

24.1.3通过脚本传递线光源的几何信息

24.1.4计算线光源的照明

24.1.5线光源的辐射方向

24.1.6线光源的衰减

24.2面积光源

24.2.1面积光和线光源的不同

24.2.2通过脚本设定面积光的几何特性

24.2.3计算面积光

24.2.4和默认照明的整合

第25章 体积光

25.1体积光和体积阴影

25.1.1什么是体积光

25.1.2体积光和体积阴影的关系

25.2实现体积光

25.2.1在Shader中表现体积光

25.2.2脚本的帮助

第26章 材质替代渲染

26.1相机(Camera)和渲染消息

26.1.1相机的渲染消息发送顺序

26.1.2物体的渲染消息发送顺序

26.1.3相机和物体的渲染消息先后顺序

26.1.4存在两个相机时的渲染消息

26.1.5最后能改变Cull操作结果的地方

26.1.6最后能设置材质数据的地方

26.2相机(Camera)的渲染方法

26.2.1 Render方法

26.2.2 RenderWithShader方法

26.3如何使用RenderWithShader方法

26.3.1标签值不同的5个Shader

26.3.2调用RenderWithShader方法的脚本

26.3.3替换用的5个材质

26.3.4检测RenderWithShader方法的效果

26.3.5使用SubShader组织替代材质

26.3.6如何设置替代材质的属性

26.3.7将结果输出到屏幕上

26.4 SetReplacementShader和ResetReplacementShader

第27章 后期效果

27.1 Graphics的两个方法

27.1.1与相机渲染方法的不同之处

27.1.2 Blit方法的简单示例

27.1.3使用BlitMultiTap方法进行多重采样

27.2一个简单的调色

27.2.1调色用的脚本

27.2.2调色用的材质

27.2.3更高效的做法

27.3景深

27.3.1用于模糊图像的材质

27.3.2进行纵横两次模糊操作

27.3.3进行混合操作的脚本

27.3.4进行混合操作的材质

27.3.5提供一个可调节参数

27.4轮廓检测

27.4.1用脚本索要场景的Z深度和法线

27.4.2在材质中进行边缘检测

27.5扭曲

27.5.1通过UV操作扭曲图像

27.5.2限定扭曲的区域

27.5.3使用物体来做遮罩

27.6运动模糊

27.6.1如何记录运动轨迹

27.6.2实现运动模糊的材质

27.6.3用于完成整个过程的脚本

27.6.4通过Alpha和帧的混合操作实现运动模糊

27.7噪波

27.7.1根据Z深度来混合噪波

27.7.2根据明暗程度来混合噪波

27.8色彩的溢出

27.8.1色彩溢出的算法考量

27.8.2实现色彩溢出的采样计算

第28章 地形

28.1地表的材质

28.1.1地面纹理的控制贴图

28.1.2如何自定义地表材质

28.1.3如何使用更多的纹理贴图

28.2花草的材质

28.2.1非Billboard类型花草的材质

28.2.2 Terrain引擎传入的数据

28.2.3 Billboard类型花草的材质

28.2.4自定义Detail Mesh的材质

28.3树木的材质

28.3.1树木的2D Billboard材质

28.3.2 3D形态树木的材质

28.3.3应用Unity计算的Occlusion

第29章 投影

29.1 Unity的Projector

29.1.1 Projector中的材质被执行的顺序

29.1.2如何写Projector使用的材质

29.1.3控制投影淡进淡出的矩阵

29.2实现自己的投影

29.2.1设定投影矩阵的脚本

29.2.2采样投影的材质

29.2.3直接投影到屏幕上

29.2.4模拟GUITexture

29.3模拟粒子的广告牌效果

29.3.1使用材质将物体面向相机

29.3.2保持旋转角度

第5篇Shader的组织和优化

第30章Shader的组织和复用

30.1 cginc文件

30.1.1 Unity的Unity CGcginc文件

30.1.2定义自己的cginc文件

30.1.3使用自定义的cginc文件

30.2通过U sePass来复用

30.2.1定义自己要复用的Pass

30.2.2复用这些Pass

30.3定义自己的Shader关键字

30.3.1使用关键字改变Shader的行为

30.3.2定义自己的Shader关键字

30.4使用multi_ compile编译Shader的多个版本

30.4.1使用multi_ compile实现多次编译

30.4.2在脚本中选择Shader的版本

30.5 Unity对DX 11支持所带来的问题

第31章 你必须知道的渲染概念

31.1逐顶点计算和逐像素计算

31.1.1逐顶点计算

31.1.2逐像素计算

31.1.3如何在这两个概念中取舍

31.2 Draw Call的指标意义

31.2.1 Draw Call的概念

31.2.2正确理解Draw Call对你开发应用的意义

31.2.3 Batching的概念和Unity为优化Draw Call所做的工作

31.2.4优化Draw Call

31.3利用渲染队列的技巧

31.3.1渲染队列的概念

31.3.2设置Render Queue的技巧

第32章 基于渲染路径的优化

32.1 VertexLit渲染路径下的优化

32.1.1 VertexLit渲染路径的特点

32.1.2合理的光照计算

32.2 Forward渲染路径下的优化

32.2.1 Forward渲染路径的特点

32.2.2合理的光照计算

32.3 Deferred渲染路径下的优化

32.3.1 Deferred渲染路径的特点

32.3.2合理的灯光布局

第33章 移动平台上的优化

33.1移动平台的特点

33.2一些指令的运算速度概念

33.3几何复杂度的考量

33.4贴图的问题

33.5数据类型的使用方式

33.6变量的使用

33.7慎用后期效果

33.8慎用透明效果

附录 相关资源


书查询(www.shuchaxun.com)本网页唯一编码:
e3ff24b9e739897a5876441a147b41b0#97f0727ba94041fc4bb2fe4e96710a5c#155600060#13510148_UNITY 3D SHABERLAB开发实战详解.zip