主编推荐语
本书是一部系统讲解Unity ShaderLab语言与编程方法的入门教程(包含纸质图书、Unity美术资源、Shader源代码)。
内容简介
本书共分14章,第1、2章,主要为了给读者普及3D数学相关的基础知识以及GPU渲染流水线的基本概念,为本书后面的内容提供基础知识的储备。
第3~11章,主要讲解了Shader的语法结构、两种不同的编写方式(Vertex Fragment Shader和Surface Shader)、光照模型、后期处理、自定义材质设置面板。这一部分内容是本书的主要部分,读者朋友们一定要认真阅读。
第12章,主要讲解Unity Shader可视化编辑插件——Amplify Shader Editor,方便读者在编写Shader之前梳理逻辑或者前期验证效果的时候使用。
第13、14章,通过对不同经典案例的分析和讲解,使读者进一步加深对Unity Shader的理解,并且能够更加高效地编写出可以应用于真实项目的Shader效果。
本书主要以3D美术人员的视角进行效果描述和逻辑讲解的,因此非常适合毫无程序编写经验的3D美术人员作为Unity Shader的入门之选。并且本书同样也适用于各大培训机构、高等院校作为Unity Shader课程教材使用。
当然,从事Unity程序开发的朋友也可以阅读本书,从3D美术人员的视角开始切入,或许可以帮助你更好的理解Unity Shader,毕竟Shader也是一种视觉效果的设计。
目录
- 版权信息
- 作者简介
- 内容简介
- 前言
- 第1章 3D数学基础
- 1.1 坐标与坐标系
- 1.1.1 坐标及坐标系的概念
- 1.1.2 3D中的坐标系
- 1.1.3 左右手坐标系
- 1.2 向量
- 1.2.1 向量的几种表示方法
- 1.2.2 向量的计算方法
- 1.2.3 相反向量
- 1.2.4 向量的模
- 1.2.5 标准化向量
- 1.3 向量运算
- 1.3.1 向量的加法运算
- 1.3.2 向量的减法运算
- 1.3.3 向量的缩放
- 1.3.4 向量的点积运算
- 1.3.5 向量的叉积运算
- 1.3.6 向量的运算法则
- 1.4 矩阵
- 1.4.1 矩阵的表示方法
- 1.4.2 方阵和单位矩阵
- 1.4.3 转置矩阵
- 1.5 矩阵运算
- 1.5.1 标量与矩阵相乘
- 1.5.2 矩阵之间的乘法
- 1.5.3 矩阵与向量相乘
- 1.5.4 矩阵的运算法则
- 1.6 使用矩阵进行变换
- 1.6.1 矩阵变换向量的原理
- 1.6.2 旋转矩阵
- 1.6.3 缩放矩阵
- 1.6.4 平移矩阵
- 1.7 矩阵的深入讲解
- 1.7.1 矩阵的行列式
- 1.7.2 余子式和代数余子式
- 1.7.3 通过代数余子式计算行列式
- 1.7.4 逆矩阵
- 1.7.5 正交矩阵
- 1.7.6 逆矩阵的运算法则
- 第2章 渲染流水线与Shader概念
- 2.1 渲染流水线概念
- 2.2 3D图形渲染完整流水线
- 2.3 空间变换
- 2.3.1 模型空间与世界空间
- 2.3.2 摄像机空间
- 2.3.3 裁切空间
- 2.3.4 屏幕空间
- 2.3.5 多个坐标空间存在的意义
- 2.4 现代GPU渲染流水线
- 2.5 Shader概念
- 2.5.1 什么是Shader
- 2.5.2 Shader和材质的关系与区别
- 第3章 ShaderLab语法基础
- 3.1 Shader的组织结构
- 3.2 Shader的名称
- 3.3 Properties
- 3.3.1 数值类属性
- 3.3.2 颜色和向量类属性
- 3.3.3 纹理贴图类属性
- 3.3.4 所有类型属性汇总
- 3.4 SubShader
- 3.4.1 SubShader的标签
- 3.4.2 Pass的渲染状态
- 3.5 Fallback
- 第4章 顶点-片段着色器基础
- 4.1 Shader编码工具
- 4.2 创建和使用Shader
- 4.3 Shader的编写方式
- 4.4 CG语法基础
- 4.4.1 编译指令
- 4.4.2 着色器函数
- 4.4.3 语义
- 4.4.4 在CG中调用属性变量
- 4.4.5 结构体
- 第5章 Unity的包含文件
- 5.1 包含文件的使用语法
- 5.2 UnityCG.cginc
- 5.2.1 顶点着色器输入结构体
- 5.2.2 顶点变换函数
- 5.2.3 向量变换函数
- 5.2.4 灯光辅助函数
- 5.2.5 视角向量函数
- 5.2.6 其他辅助函数和宏
- 5.3 UnityShaderVariables.cginc
- 5.3.1 空间变换矩阵
- 5.3.2 时间变量
- 5.4 其他包含文件
- 5.5 使用包含文件简化Shader
- 第6章 Shader中的光照模型
- 6.1 Lambert光照模型
- 6.1.1 Lambert光照模型理论
- 6.1.2 在Shader中获取灯光变量
- 6.1.3 基于Lambert光照模型的Shader
- 6.2 CG标准库函数
- 6.3 Half-Lambert光照模型
- 6.4 Phong光照模型
- 6.4.1 Phong光照模型理论
- 6.4.2 在Shader中获取环境光变量
- 6.4.3 基于Phong光照模型的Shader
- 6.5 逐像素光照
- 6.6 Blinn-Phong光照模型
- 6.6.1 Blinn-Phong光照模型理论
- 6.6.2 Blinn-Phong光照模型的Shader
- 6.7 灯光阴影
- 6.7.1 渲染路径
- 6.7.2 Pass标签
- 6.7.3 内置的multi_compile
- 6.7.4 实现阴影效果
- 第7章 透明效果
- 7.1 不透明物体的渲染顺序
- 7.2 透明物体的渲染顺序
- 7.3 混合透明效果
- 7.3.1 混合指令
- 7.3.2 混合系数
- 7.3.3 混合操作
- 7.3.4 混合透明的使用方法
- 7.3.5 混合透明效果
- 7.3.6 半透明物体的双面渲染
- 7.4 透明测试效果
- 7.4.1 透明测试的使用方法
- 7.4.2 透明测试效果
- 7.4.3 透明测试抗锯齿
- 7.5 模板测试
- 7.5.1 模板测试的计算流程
- 7.5.2 模板测试的使用语法
- 7.5.3 比较方法
- 7.5.4 模板操作
- 7.5.5 延迟渲染路径中的模板测试
- 7.5.6 模板测试透明效果
- 第8章 表面着色器的基础概念
- 8.1 为什么不先学习表面着色器
- 8.2 表面着色器的组织结构
- 8.3 编译指令中的可选参数
- 8.3.1 透明效果相关指令
- 8.3.2 阴影和细分相关指令
- 8.3.3 代码生成选项
- 8.3.4 其他选项
- 8.4 表面函数的语法结构
- 8.4.1 表面函数输入结构体
- 8.4.2 表面函数输出结构体
- 第9章 编写表面着色器
- 9.1 最简单的表面着色器
- 9.2 在表面着色器中使用法线贴图
- 9.3 表面着色器中的其他函数
- 9.3.1 顶点修改函数
- 9.3.2 自定义光照函数
- 9.3.3 最终颜色修改函数
- 9.4 曲面细分函数
- 9.4.1 固定数量的曲面细分
- 9.4.2 基于边长的曲面细分
- 9.4.3 视锥剔除曲面细分
- 9.4.4 基于距离的曲面细分
- 9.4.5 Phong曲面细分
- 9.5 透明效果
- 9.5.1 混合透明效果
- 9.5.2 透明测试效果
- 第10章 Image Effec
- 10.1 GrabPass
- 10.1.1 语法结构
- 10.1.2 GrabPass Shader
- 10.1.3 测试效果
- 10.2 C#基础语法
- 10.2.1 C#脚本的基本结构
- 10.2.2 Properties
- 10.2.3 C#中的常用函数
- 10.2.4 基于Shader资源创建材质
- 10.2.5 通过脚本往Material中传递变量
- 10.2.6 C#中的数学函数
- 10.2.7 其他功能
- 10.3 Post-Processing
- 10.3.1 后期处理的工作流程
- 10.3.2 后期处理Shader
- 10.3.3 后期处理脚本
- 10.4 后期处理堆栈
- 10.4.1 安装Post Processing包
- 10.4.2 设置Layer和Volume
- 10.4.3 编写Shader
- 10.4.4 编写C#脚本
- 第11章 自定义材质面板
- 11.1 不同类型的DrawerClass
- 11.1.1 Toggle
- 11.1.2 Enum
- 11.1.3 KeywordEnum
- 11.1.4 在编译指令中定义关键词
- 11.1.5 PowerSlider
- 11.1.6 IntRange
- 11.2 属性的特性和Drawer
- 11.3 装饰性PropertyDrawer
- 11.3.1 SpaceDecorator
- 11.3.2 Header Decorator
- 11.4 完整PropertyDrawer示例
- 第12章 Amplify Shader Editor
- 12.1 相同功能的其他插件
- 12.1.1 Shader Forge
- 12.1.2 ShaderGraph
- 12.2 ASE的使用流程
- 12.3 Shader属性设置
- 12.3.1 General
- 12.3.2 Blend Mode
- 12.3.3 Stencil Buffer
- 12.3.4 Tessellation
- 12.3.5 Output
- 12.4 常用节点
- 12.4.1 常数和属性类节点
- 12.4.2 纹理和坐标类节点
- 12.4.3 数学运算类节点
- 12.4.4 向量运算相关节点
- 12.4.5 图像处理相关节点
- 12.4.6 摄像机和屏幕相关节点
- 12.4.7 顶点数据类节点
- 12.4.8 表面数据类节点
- 12.4.9 时间节点
- 12.5 使用ASE创建标准Shader
- 12.5.1 Albedo
- 12.5.2 Normal
- 12.5.3 Emission
- 12.5.4 Specular
- 12.5.5 Ambient Occlusion
- 12.5.6 Texture Coordinate
- 12.5.7 属性排序及最终效果
- 第13章 初级案例
- 13.1 流光效果
- 13.1.1 实现逻辑
- 13.1.2 使用ASE实现效果
- 13.1.3 测试Shader效果
- 13.1.4 编写Shader
- 13.1.5 使用扩展
- 13.2 描边效果
- 13.2.1 实现逻辑
- 13.2.2 编写Shader
- 13.2.3 效果测试
- 13.3 遮挡半透效果
- 13.3.1 实现逻辑
- 13.3.2 编写Shader
- 13.3.3 效果测试
- 13.4 Tri-Planar Mapping效果
- 13.4.1 实现逻辑
- 13.4.2 使用ASE实现效果
- 13.4.3 编写Shader
- 13.4.4 测试Shader效果
- 13.5 MatCap效果
- 13.5.1 实现逻辑
- 13.5.2 使用ASE实现效果
- 13.5.3 编写Shader
- 13.5.4 测试Shader效果
- 13.6 物体切割效果
- 13.6.1 实现逻辑
- 13.6.2 使用ASE实现效果
- 13.6.3 C#脚本
- 13.6.4 测试效果
- 13.6.5 编写Shader
- 第14章 进阶案例
- 14.1 消融效果
- 14.1.1 实现逻辑
- 14.1.2 资源准备
- 14.1.3 使用ASE实现效果
- 14.1.4 使用扩展
- 14.1.5 编写Shader
- 14.2 动态液体效果
- 14.2.1 实现逻辑
- 14.2.2 模型准备
- 14.2.3 使用ASE实现效果
- 14.2.4 测试Shader
- 14.2.5 编写Shader
- 14.3 Billboard效果
- 14.3.1 实现逻辑
- 14.3.2 使用ASE实现雪花效果
- 14.3.3 测试Shader
- 14.3.4 编写Shader
- 14.4 序列帧动画
- 14.4.1 实现逻辑
- 14.4.2 使用ASE实现效果
- 14.4.3 测试Shader
- 14.4.4 编写Shader
- 14.5 卡通风格效果
- 14.5.1 资源准备
- 14.5.2 使用ASE实现效果
- 14.5.3 编写Shader
- 14.6 夜视仪后期处理
- 14.6.1 Shader讲解
- 14.6.2 完整Shader代码
- 14.6.3 C#脚本讲解
- 14.6.4 完整脚本代码
- 14.6.5 测试最终效果
- 14.6.6 使用ASE编辑后期处理Shader
- 写在最后
- 参考文献
出版方
清华大学出版社
清华大学出版社成立于1980年6月,是由教育部主管、清华大学主办的综合出版单位。植根于“清华”这座久负盛名的高等学府,秉承清华人“自强不息,厚德载物”的人文精神,清华大学出版社在短短二十多年的时间里,迅速成长起来。清华大学出版社始终坚持弘扬科技文化产业、服务科教兴国战略的出版方向,把出版高等学校教学用书和科技图书作为主要任务,并为促进学术交流、繁荣出版事业设立了多项出版基金,逐渐形成了以出版高水平的教材和学术专著为主的鲜明特色,在教育出版领域树立了强势品牌。