unity 3d shaderlab开发实战详解 第3版 编程语言 郭浩瑜,张鹤 新华正版
¥
37.1
4.7折
¥
79
全新
库存67件
作者郭浩瑜,张鹤
出版社人民邮电出版社
ISBN9787115505408
出版时间2019-11
版次3
装帧平装
开本16
页数251页
字数427千字
定价79元
货号304_9787115505408
上书时间2024-12-22
商品详情
- 品相描述:全新
-
正版特价新书
- 商品描述
-
目录:
篇 初识庐山真面目—unity 3d着器
章 着器的概念和渲染流水线 2
1.1 着器的概念 2
1.1.1 虚拟世界中的光明和彩 2
1.1.2 游戏开发人员的 2
1.1.3 着器简史 2
1.1.4 着器的实例化 3
1.1.5 着器的实现语言 3
1.1.6 unity中的着器编程 4
1.2 渲染流水线 4
1.2.1 渲染流水线简介 4
1.2.2 渲染流水线阶段 5
1.3 渲染流水线执行阶段 6
1.3.1 输入装配阶段 6
1.3.2 顶点着器 8
1.3.3 细化阶段 8
1.3.4 几何着器 9
1.3.5 流输出阶段 10
1.3.6 片元着器 10
1.3.7 输出合并阶段 11
1.4 其他一些细节 11
1.4.1 延迟渲染和前向渲染 11
1.4.2 批次合并渲染 13
第2章 渲染和图形存储器 14
2.1 渲染 14
2.1.1 立即模式渲染 14
2.1.2 基于区块的(延迟)渲染 16
2.2 图形存储器 18
2.2.1 gpu的存储系统层次体系 19
2.2.2 数据结构 20
2.2.3 渲染所需的数据结构 23
2.2.4 合并批次渲染回顾 23
第3章 unity中着器的形态 25
3.1 unity通过shaderlab来组织着器 25
3.1.1 关键字shader 25
3.1.2 使用子着器组织着器的不同实现 25
3.1.3 子着器的重要标签 25
3.1.4 子着器中的pass块 26
3.1.5 pass块的标签及其名字的意义 26
3.1.6 使用fallback语句保证着器的广泛适应 27
3.2 unity支持的着器编程语言 27
3.3 unity中着器的3种形态 27
3.3.1 固定流水线 27
3.3.2 可编程着器 28
3.3.3 shaderlab中的表面着器 29
3.4 着器的数据接—属和uniform变量 31
3.4.1 在properties块中定义属 31
3.4.2 通过图形界面作属 31
3.4.3 通过脚本控属 31
3.4.4 矩阵—不能在属块中定义的变量 32
3.4.5 在cg代码中使用属 32
第4章 着器中用到的各种空间概念 33
4.1 模型空间 33
4.1.1 为什么用模型空间 33
4.1.2 在脚本和着器中进出模型空间 33
4.2 世界坐标空间 33
4.2.1 统一的坐标空间—世界坐标空间 33
4.2.2 在脚本和着器中进出世界坐标空间 34
4.3 视空间 34
4.3.1 渲染的需要—视空间 34
4.3.2 在脚本和着器中进出视空间 34
4.4 空间的一块—视锥体 34
4.5 剪切空间 35
4.5.1 投影 35
4.5.2 脚本和着器中的投影矩阵 35
4.5.3 验证ndc 35
4.6 ndc之后 36
第5章 基本的光照模型 37
5.1 光源对物体照明的分类 37
5.1.1 间接照明 37
5.1.2 直接照明 37
5.2 亮度的计算方式—光照模型 37
5.2.1 漫反和lambert 37
5.2.2 镜面高光和phong 38
5.2.3 半角向量和blinnphong 38
第2篇 让应用更炫彩—unity中的照明
第6章 个执行的通道 42
6.1 不同的lightmode被选择的顺序 42
6.1.1 渲染路径和通道的lightmode标签 42
6.1.2 设计可以检测渲染路径的材质 42
6.1.3 设计便于检测渲染路径的场景 43
6.1.4 观察那些渲染的通道 43
6.2 3个渲染路径之外的处理方式 45
6.2.1 lightmode的其他值 45
6.2.2 设计检测用的材质 45
第7章 前向渲染路径 47
7.1 渲染物体—forwardbase和forwardadd 47
7.1.1 设计检测用的场景和材质 47
7.1.2 forwardbase和forwardadd的表现 48
7.2 前向渲染路径下的光源 48
7.2.1 设计检测用的材质 48
7.2.2 光源的情况 48
7.2.3 unity如何为前向渲染路径设置光源 49
第8章 基于光照贴图的烘焙照明 50
8.1 烘焙的维度和属矩阵 50
8.2 光照贴图 50
8.2.1 测试烘焙的场景 51
8.2.2 烘焙之后的场景 52
8.2.3 双光照贴图 52
8.3 在效果和能间进行权衡 52
8.3.1 影响全局的resolution选项 53
8.3.2 单个物体的选项 53
第9章 柔和的低频照明 55
9.1 初识光照探头 55
9.1.1 光照探头照明的优点 55
9.1.2 检测光照探头照明的场景 55
9.1.3 使用光照探头组进行管理 57
9.1.4 烘焙场景光照信息到光照探头中 57
9.1.5 对比光照探头照明和实时照明 58
9.2 放置光照探头的注意事项 59
9.2.1 必须形成一个体积 59
9.2.2 单个光照探头必须处于采样光源的照范围 59
9.3 照明采样的anchor override 59
9.3.1 动态更新光照探头 59
9.3.2 基于线插值的采样 59
9.3.3 改变默认的插值位置 59
9.4 光照探头照明和阴影 60
9.4.1 光照探头和光照贴图的异同 60
9.4.2 烘焙阴影时可能会犯的错误 61
9.4.3 将静态物体的阴影烘焙到光照探头上 61
9.4.4 光照探头照明和实时阴影的混合 62
9.5 烘焙一个彩丰富的场景 62
9.6 在自己的材质中使用光照探头 63
9.6.1 为前向渲染路径中的材质计算光照探头 63
9.6.2 使用shadesh9函数 64
9.6.3 在一个表面着器中进行计算 65
9.7 lppv的设计目的 66
9.7.1 lppv是什么 66
9.7.2 照明的场景 66
第3篇 使应用更逼真—阴影
0章 面阴影 70
10.1 行光对面的投影 70
10.1.1 对行光投影的虑 70
10.1.2 进出阴影接受面的矩阵 70
10.1.3 使用三角形相似计算阴影 71
10.2 点光源对面的投影 72
10.3 阴影的淡出 73
10.3.1 有效利用面阴影计算过程中的数据 73
10.3.2 潜在的问题 74
1章 球体阴影 75
11.1 行光对球体的投影 75
11.1.1 投影球体的信息 75
11.1.2 使用相似三角形计算投影 75
11.2 阴影的淡入/淡出 76
11.3 点光源对球体的投影 77
2章 体积阴影 78
12.1 将顶点沿某一方向挤出 78
12.1.1 在vertex函数中作 78
12.1.2 判断顶点是向光还是背光 79
12.2 从体积中找到阴影区域 79
12.2.1 两次挤出 79
12.2.2 计算出阴影区域 80
12.2.3 渲染阴影 80
12.2.4 需要注意的问题 80
3章 阴影映 82
13.1 灯光空间和相机空间 82
13.1.1 观察两个空间 82
13.1.2 两个视角的z深度 82
13.1.3 渲染z深度的材质 83
13.2 投z深度 83
13.2.1 准备灯光视角的投影矩阵 83
13.2.2 在材质中计算投影后的z深度 84
13.3 比较z深度 85
13.3.1 比较z深度的材质 85
13.3.2 z深度的精度引起的问题 87
13.3.3 提高z深度的精度 87
13.3.4 对z深度值进行偏移 88
4章 内置的阴影 89
14.1 unity实时阴影的 89
14.1.1 基本 89
14.1.2 软阴影 89
14.2 投阴影 90
14.2.1 使用shadowcaster投阴影 90
14.2.2 在shadowcaster里都做了什么 91
14.2.3 写一个自己的shadowcaster 91
14.2.4 改变shadowcaster的行为 92
14.2.5 阴影和fallback机制 92
14.3 接受阴影 94
14.4 表面着器和阴影 94
14.4.1 表面着器的阴影和fallback 94
14.4.2 表面着器里的灯光参数和阴影 95
14.4.3 表面着器对前向渲染路径下阴影的支持 95
14.5 阴影的批处理 96
14.5.1 批处理阴影的好处 96
14.5.2 简单的caster 97
14.5.3 静态阴影的批处理 98
14.5.4 动态阴影的批处理 100
第4篇 unity中的各种着器
5章 通道的通用指令开关 104
15.1 使用lod在运行时决定材质 104
15.1.1 材质的lod 104
15.1.2 在运行时设定单个材质的lod 104
15.1.3 设定全局所有材质的lod 105
15.2 渲染队列 106
15.2.1 标签队列和渲染顺序 106
15.2.2 渲染队列和ztest判断 107
15.2.3 unity中内置的渲染队列 107
15.2.4 一个利用渲染队列的例子 107
15.3 透明的产生 108
15.3.1 alpha检测和8种比较条件 108
15.3.2 生成着器的内容 108
15.3.3 结合alphatest和blend作 109
15.4 混合作及其应用 110
15.4.1 混合作 110
15.4.2 生成着器的代码 110
15.4.3 检测不同的混合作 110
15.4.4 blendop选项 111
15.4.5 检测blendop作 112
15.4.6 两个使用blend生成的效果 112
15.5 使用colormask 114
15.5.1 colormask的作用 114
15.5.2 检测colormask 114
15.5.3 一个使用colormask的例子 115
15.6 深度测试 116
15.6.1 存取场景的深度测试 116
15.6.2 rendertype标签和与生成深度测试的关联 116
15.6.3 内置rendertype的值 117
15.6.4 前向渲染路径下的深度测试 117
15.7 z深度的偏移量 118
15.7.1 干预正常深度测试的手段 118
15.7.2 观察偏移量在不同应用条件下的表现 118
15.8 面的剔除作 118
15.9 自动生成贴图的坐标 119
15.9.1 objectlinear和等价的cg代码 119
15.9.2 eyelinear和等价的cg代码 120
15.9.3 spheremap和等价的cg代码 121
15.9.4 cubereflect和等价的cg代码 122
15.9.5 cubenormal和等价的cg代码 122
15.10 抓屏作 123
15.10.1 如何使用grabpass 123
15.10.2 一个模拟曲面反的例子 124
15.11 雾效 124
15.11.1 雾效和unity的3种实现 124
15.11.2 材质中对雾效的控制 125
15.11.3 实现自己的雾效 126
15.12 蒙版 128
15.12.1 蒙版测试、z深度和alpha测试 128
15.12.2 使用蒙版测试改变渲染结果 128
15.12.3 综合使用蒙版和队列 128
6章 固定流水线 130
16.1 unity中的固定流水线 130
16.1.1 固定流水线基本形态 130
16.1.2 与照明相关的material块 130
16.1.3 处理纹理的settexture块 131
16.1.4 流水线基本形态的另一种写法 131
16.1.5 bine语句 131
16.2 使用顶点 132
16.2.1 使用colormaterial 132
16.2.2 使用bind 132
16.3 在固定流水线中使用光照贴图 132
16.4 嵌套cg代码 133
7章 表面着器 134
17.1 表面着器的适应 134
17.1.1 一个分析策略 134
17.1.2 测试用的场景 134
17.1.3 检测结果 135
17.2 延迟渲染和geobuffer 135
17.3 表面着器的特殊 136
17.3.1 表面着器的混合和透明 136
17.3.2 自定义vertex函数 137
8章 凹凸材质 139
18.1 切空间 139
18.2 凹凸贴图 139
18.2.1 计算到切空间的矩阵 139
18.2.2 unity中法线贴图的压缩格式 140
18.2.3 使用切空间矩阵的另一种方法 140
18.2.4 unity对切空间计算的支持 141
18.2.5 解压缩法线贴图的函数 141
18.2.6 在切空间中计算高光 142
18.2.7 表面着器和切空间 142
18.3 视差映 143
18.3.1 视差映及其别名 143
18.3.2 一个使用灰度图来偏移uv的材质 143
18.3.3 结合法线贴图 145
18.3.4 用视角来决定uv偏移量 145
18.3.5 一个完整的实现 146
18.4 地势映 147
18.4.1 视差映的极限和地势映的面世 147
18.4.2 地势映的算法 148
18.4.3 一个完整的实现 148
9章 卡通材质 151
19.1 描边 151
19.1.1 沿法线挤出轮廓 151
19.1.2 容易产生的问题 152
19.1.3 在视空间中挤出 152
19.1.4 顶点位置的另一个含义 153
19.1.5 调和法线和顶点方向 154
19.1.6 判断顶点的指向 154
19.1.7 不仅仅是轮廓 155
19.1.8 通过z偏移量来描边 158
19.2 卡通着 158
19.2.1 对光照进行离散化 158
19.2.2 使用2d贴图重新映光照 160
第20章 镜面材质 162
20.1 镜像一个相机 162
20.1.1 镜子里的世界和我的计划 162
20.1.2 在脚本中对位置和角度进行镜像 162
20.2 使用镜像相机来渲染和投影 163
20.2.1 镜面材质的工作—采样被投影的渲染结果 163
20.2.2 脚本的工作—渲染镜像相机和设置投影矩阵 164
20.3 镜像相机的近剪切面和倾斜矩阵 164
20.3.1 调节近剪切面 164
20.3.2 使用倾斜矩阵微调视锥体 165
第21章 透明和半透明材质 166
21.1 半透明材质 166
21.2 化繁为简 166
21.3 透明材质 167
第22章 体积雾 170
22.1 距离的表达—相对于背景的体积雾 170
22.1.1 需要计算的东西 170
22.1.2 使用一个通道来完成所有的计算 170
22.1.3 黑的雾效 171
22.2 厚度的表达—物体形体的体积雾 172
22.2.1 必须计算的两个数据 172
22.2.2 在unity中使用一个通道来完成所有计算 172
第23章 面积光 175
23.1 线光源 175
23.1.1 点、线、面 175
23.1.2 如何理解一个线光源 175
23.1.3 通过脚本传递线光源的几何信息 175
23.1.4 计算线光源的照明 176
23.1.5 线光源的辐方向 177
23.1.6 线光源的衰减 178
23.2 面积光源 179
23.2.1 面积光和线光源的不同 179
23.2.2 通过脚本设定面积光的几何特 179
23.2.3 计算面积光 179
23.2.4 和默认照明的整合 181
第24章 体积光 183
24.1 体积光和体积阴影 183
24.1.1 体积光 183
24.1.2 体积光和体积阴影的关系 183
24.2 实现体积光 183
24.2.1 在着器中表现体积光 183
24.2.2 脚本的帮助 184
第25章 材质替代渲染 186
25.1 相机和渲染消息 186
25.1.1 相机的渲染消息发送顺序 186
25.1.2 后能改变cull作结果的地方 186
25.1.3 后能设置材质数据的地方 187
25.2 如何使用renderwithshader方法 187
25.2.1 标签值不同的5个着器 187
25.2.2 调用renderwithshader方法的脚本 189
25.2.3 替换用的5个材质 190
25.2.4 检测renderwithshader方法的效果 191
25.2.5 使用子着器组织替代材质 191
25.2.6 如何设置替代材质的属 192
25.2.7 将结果输出到屏幕上 192
25.3 setrecementshader和resetrecementshader与renderwithshader方法的异同 193
第26章 后期效果 194
26.1 graphics的两个方法 194
26.1.1 与相机渲染方法的不同之处 194
26.1.2 blit方法的简单示例 194
26.1.3 使用blitmultitap方法进行多重采样 195
26.2 一个简单的调 199
26.2.1 调用的脚本 199
26.2.2 调用的材质 200
26.2.3 更高效的做法 201
26.3 景深 203
26.3.1 用于模糊图像的材质 203
26.3.2 进行纵横两次模糊作 204
26.3.3 进行混合作的脚本 204
26.3.4 进行混合作的材质 205
26.3.5 提供一个可调节参数 206
26.4 轮廓检测 206
26.4.1 用脚本获得场景的z深度和法线 207
26.4.2 在材质中进行边缘检测 207
26.5 扭曲 208
26.5.1 通过uv作扭曲图像 208
26.5.2 限定扭曲的区域 209
26.5.3 使用物体来做遮罩 210
26.6 运动模糊 213
26.6.1 如何记录运动轨迹 213
26.6.2 实现运动模糊的材质 213
26.6.3 用于完成整个过程的脚本 214
26.6.4 通过alpha和帧的混合作实现运动模糊 215
26.7 噪波 215
26.7.1 根据z深度来混合噪波 216
26.7.2 根据明暗程度来混合噪波 217
26.8 彩的溢出 217
26.8.1 彩溢出的算法量 218
26.8.2 实现彩溢出的采样计算 218
第27章 投影 220
27.1 unity的projector 220
27.1.1 projector中材质的执行顺序 220
— 没有更多了 —
以下为对购买帮助不大的评价