US2S2L5-1——Tags-渲染标签
US2S2L5-1——Tags-渲染标签
回顾:SubShader的基本构成
SubShader语句块中主要由3部分构成:渲染标签,渲染状态,n个渲染通道
12345 |--------Tags(渲染标签) |--------States(渲染状态)SubShader---|--------Pass(渲染通道1) |--------Pass(渲染通道2) |--------....(渲染通道n)
本章代码关键字
1234567891011121314151617181920Tags { } //标签块,可以声明一系列标签名与标签值的键值对"Queue" //这个标签会确定物体的渲染顺序 "Background" //最早被渲染的物体的队列,一般用来渲染天空盒或者背景,队列号1000 "Geometry" //不透明的几何体通常使 ...
US2S2L5——Shader的子着色器
US2S2L5——Shader的子着色器
回顾:ShaderLab的基本结构
ShaderLab主要由4个部分组成
Shader的名字
Shader的属性
1~n个子着色器
备用的Shader
本章代码关键字
1SubShader { } //子着色器代码块,包括渲染标签,渲染状态,n个渲染通道,可声明多个,Unity选择第一个能够在当前显卡运行的SubShader
SubShader语句块
每一个Shader中都会包含至少一个 SubShader
当Unity想要显示一个物体的时候,就会在Shader文件中去检测这些 SubShader 语句块
然后选择第一个能够在当前显卡运行的 SubShader 进行执行
因此在一个Shader当中实现一些高级效果时,为了避免在在某些设备上无法执行
可能会存在多个 SubShader 语句块,用于适配这些低端设备
SubShader 当中包含最终的渲染相关代码,决定了最终的渲染效果
SubShader的基本构成
SubShader语句块中主要由3部分构成
12345 |-- ...
US2S2L4——Shader的属性
US2S2L4——Shader的属性
回顾:ShaderLab的基本结构
ShaderLab主要由4个部分组成
Shader的名字
Shader的属性
1~n个子着色器
备用的Shader
本章代码关键字
123456789101112131415Properties { } //属性在该语句块内声明_属性名("在Inspector窗口上显示的属性名", 类型) = 默认值 //属性的声明方法,要注意属性名默认前缀为'_'//数值类型,以一个数值作为默认值,数值不需要加fInt //整形,虽然提供了整数,但是编译时最终都会转换为浮点型Float //浮点型,在ShaderLab里,浮点数字面量不需要加fRange(,) //范围浮点型,需要在括号内()填写最小值和最大值//颜色与向量类型,以(num1,num2,num3,num4)作为默认值,其中的数值不需要加fColor //颜色,颜色值中的RGBA的取值范围 ...
US2S2L3——Shader的名字
US2S2L3——Shader的名字
回顾:ShaderLab的基本结构
ShaderLab主要由4个部分组成
Shader的名字
Shader的属性
1~n个子着色器
备用的Shader
本章代码关键字
1Shader //在该关键字后为该Shader命名,Shader的名字决定了在材质面板的选择路径,不要使用中文命名!
Shader的名字
直接修改shader文件中shader后的名字即可
注意:
Shader名字不可用中文命名!
Shader名字最好和文件名保持一致
Shader的名字决定了在材质面板的选择路径
US2S2L2——ShaderLab的基本结构
US2S2L2——ShaderLab的基本结构
ShaderLab的基本结构
ShaderLab主要由4个部分组成
Shader的名字
Shader的属性
1~n个子着色器
备用的Shader
123456789101112131415161718192021222324Shader "着色器名字" { //第二部分 Properties { //材质面板上可以看到的属性 } //第三部分 SubShader { //顶点-片段着色器 或 表面着色器 或 固定函数着色器 } //如果发现这个SubShader不可用,就会向后寻找可用的SubShader SubShader { //更加精简的版本 //目的是适配旧设备 } //.....可以有n个SubShader代码块 //第四部分 ...
US2S2L1——材质与Shader
US2S2L1——材质与Shader
Unity Shader 和 Shader 的区别
Shader是一个更通用的概念,用于描述图形渲染程序中的着色器程序
而Unity Shader是特指在Unity中使用的着色器
你可以认为Unity Shader是对Shader的一种封装
它是对底层图形渲染技术的封装,它提供了一种叫做ShaderLab的语言
来让我们更加轻松的编写和管理着色器
我们在这一阶段主要对Unity Shader当中的ShaderLab进行学习
我们之后的学习在提到Shader这个词时,主要指的就是Unity Shader
Unity中的材质和Shader
在Unity中,材质和Shader是密不可分的两兄弟,想要在Unity中使用Shader就必须要配合材质进行使用
如果我们想要在Unity中体现出一个Shader的渲染效果,必须配合使用材质(Material)和 Shader(Unity Shader)才能达到目标
一般的使用流程是:
创建一个材质
创建一个Unity Sahder,把该Shader赋给上一步中创建的材质
将材质赋予给想要渲染的对象
在材质面板中调 ...
US2S2——ShaderLab语法
US2S2——ShaderLab语法
ShaderLab
Unity Shader是对Shader的一种封装,它是对底层图形渲染技术的封装,
它提供了一种叫做ShaderLab的语言,来让我们更加轻松的编写和管理着色器
ShaderLab其实就是Unity自定义的一种语法规则,是用于在Unity中编写和管理着色器的专门的语言
它提供了一种结构化的方式来描述Unity着色器的各个部分,从而让我们可以更轻松的创建和管理着色器
总而言之:无论我们编写哪种类型的Shader,或是选择哪种语言去编写Shader
在Unity中总会通过ShaderLab语言对其进行包装和组织,它是Unity自定义的一种语法规则
本系列学习内容
材质与Shader
ShaderLab的基本结构
Shader的名字(决定材质面板的选择路径)
Shader的属性(定义可在材质面板设置的参数,并可被后续的语句内使用)
Shader的子着色器(渲染的具体实现,会选择第一个可被执行的SubShader)
Tags-渲染标签(渲染顺序,着色器分类,是否禁用批处理,是否投射阴影,是否忽略投影机,是否使用图 ...
US2S1L19——屏幕空间变换
US2S1L19——屏幕空间变换
知识回顾
在渲染管线中,顶点、法线等相关模型数据会经过以下的空间变换
模型空间 → 世界空间 → 观察空间 → 裁剪空间 → 屏幕空间
坐标空间变换规则一般有两种
方式一:通用的坐标空间变换规则(存在缩放时,轴向单位向量*缩放因子)
Ms−f=(kx0000ky0000kz00001)(∣∣∣∣XsYsZsOs∣∣∣∣0001)M_{s-f} = \begin{pmatrix}
kx & 0 & 0 & 0 \\
0 & ky & 0 & 0 \\
0 & 0 & kz & 0 \\
0 & 0 & 0 & 1
\end{pmatrix} \begin{pmatrix}
| & | & | & | \\
X_s & Y_s & Z_s & O_s \\
| & | & | & | \\
0 & ...
US2S1L18——裁剪空间变换的意义
US2S1L18——裁剪空间变换的意义
知识回顾
齐次裁剪空间
齐次裁剪空间是通过将摄像机的视锥体投影到一个规范化的立方体(长宽高都为2,位于原点)而转换来的。
这个立方体就是齐次裁剪空间。是为了让我们可以更通用、便捷的来进行裁剪工作
观察空间到裁剪空间变换要分情况考虑
摄像机为正交投影时:
将视锥体中心位移到观察空间原点中心
将长方体视锥体的xyz坐标范围映射到(-1,1)长宽高为2的正方体中
正交投影变换矩阵为:
(1Aspect×Size00001Size0000−2Far−Near−Near+FarFar−Near0001)\begin{pmatrix}
\frac{1}{Aspect \times Size} & 0 & 0 & 0 \\
0 & \frac{1}{Size} & 0 & 0 \\
0 & 0 & -\frac{2}{Far - Near} & -\frac{Near+Far}{Far - Near} \\
0 & 0 & 0 & ...
US2S1L15——视锥体的投影方式和相似三角形
US2S1L15——视锥体的投影方式和相似三角形
摄像机视锥体的投影方式
透视投影:视锥体内顶点和原点连接,在近裁剪面的交点为投影点
正交投影:视锥体内顶点向近裁剪面做左右裁剪面平行线,在近裁剪面交点为投影点
不管是透视还是正交投影摄像机,你会发现视锥体中看到的物体,最终都会被投影到近裁剪面上来进行显示
透视投影摄像机(视锥体形似金字塔,一般3D游戏使用)
透视投影摄像机拍摄效果(有近大远小):
透视投影原理以及投影点的获取,类似于相机和眼球:
透视投影视锥体内**顶点和原点连接,在近裁剪面的交点为投影点**
透视投影摄像机(视锥体形似立方体,一般横板2D游戏使用)
透视投影摄像机拍摄效果(无近大远小):
正交投影原理以及投影点的获取:
正交投影视锥体内**顶点向近裁剪面做左右面平行线,在近裁剪面交点为投影点**
相似三角形的重要性质
三角形的三个角分别相等,三边成比例的两个三角形叫做相似三角形(形状一致,大小不一定一致)
重要性质:
相似三角形的对应角相等:
∠A=∠A′∠B=∠B′∠C=∠C′\angle A = \angle A ...