图书介绍

Unity 3D ShaderLab开发实战详解PDF|Epub|txt|kindle电子书版本网盘下载

Unity 3D ShaderLab开发实战详解
  • 郭浩瑜编著 著
  • 出版社: 北京:人民邮电出版社
  • ISBN:9787115338907
  • 出版时间:2014
  • 标注页数:311页
  • 文件大小:147MB
  • 文件页数:340页
  • 主题词:游戏程序-程序设计

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

Unity 3D ShaderLab开发实战详解PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

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

第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来组织Shader4

2.1.1关键字Shader4

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可编程Shader7

2.3.3 ShaderLab的骄傲:Surface Shader8

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

2.4.1在Propeties块中定义属性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漫反射和Lambert14

4.2.2镜面高光和Phong15

4.2.3半角向量和BlinnPhong16

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

第5章 第一个被执行的Pass18

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和ForwardAdd37

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数组变量unity4LightPos的使用情况分析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初识LightProbes74

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动态更新LightProbes78

9.3.1跟新数据的注意事项78

9.3.2更改不同通道的Coeffcient78

9.4照明采样的Archor Override79

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在自己的材质中使用LightProbes83

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

9.7.2使用ShadeSH9函数84

9.7.3在一个Surface Shader中进行计算85

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

第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写一个自己的ShadowCaster108

14.1.4改变ShadowCaster的行为109

14.1.5阴影和FallBack机制110

14.2接受阴影111

14.3 Surface Shader和阴影112

14.3.1 Surface Shader的阴影和Fallback112

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

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

第4篇Unity中的各种Shader116

第15章Pass的通用指令开关116

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

15.1.1材质的LOD116

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

15.1.3设定全局所有材质的LOD117

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动态生成A1phaTest的材质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检测ColorMask128

15.5.3一个使用ColorMask的例子129

15.6 ZTest(深度测试)130

15.6.1存取场景的ZTest130

15.6.2 RenderType标签和生成ZTest的关联130

15.6.3内置RenderType的值131

15.6.4 Forward渲染路径下的ZTest131

15.6.5 Deferred渲染路径下的ZTest132

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如何使用GrabPass140

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

15.11 Fog(雾效)142

15.11.1 Fog和Unity的3种实现142

15.11.2材质中对Fog的控制142

15.11.3实现自己的Fog143

第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使用ColorMaterial148

16.2.2使用Bind148

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

16.4嵌套Cg代码149

第17章Surface Shader151

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 Shader157

17.3.1 Cg代码完全体157

17.3.2最简形式的等价Cg代码158

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

17.3.4一个检测生成的ForwardBase场景164

17.3.5自动生成的ForwardAdd165

17.3.6参数noambient和novertexlights168

17.3.7参数approxvi ew和halfasview168

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

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

17.4 Deferred渲染路径下的Surface Shader174

17.4.1自动生成的PrePassBase和PrePassFinal174

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基于不同构想的Wrap226

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个Shader245

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和ResetReplacementShader251

第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计算的Occlusion286

第29章 投影288

29.1 Unity的Projector288

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模拟GUITexture293

29.3模拟粒子的广告牌效果294

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

29.3.2保持旋转角度295

第5篇Shader的组织和优化298

第30章Shader的组织和复用298

30.1 cginc文件298

30.1.1 Unity的Unity CGcginc文件298

30.1.2定义自己的cginc文件298

30.1.3使用自定义的cginc文件299

30.2通过U sePass来复用300

30.2.1定义自己要复用的Pass300

30.2.2复用这些Pass301

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对DX 11支持所带来的问题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 Call305

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

热门推荐