Unity —— UnityShader介绍
UnityShader介绍
UnityShader种类
Unity Surface Shader,Unity将顶点和片元Shader进行一个封装
Unlit Shader,标准的顶点和片元Shader
Image Effect Shader,图片特效Shader
Compute Shader,暂时用不到
Shader Variant Collection,Shader库文件
UnityShader和传统Shader的不同
UnityShader属性块
Properties:相当于编程语言中属性的定义,这里只是有一个比喻
SubShader
Properties
下图是Properties中可以使用的参数以及在Unity可视化操作的窗口样子

下图是上图中的效果在Shader中的代码
最后两个参数其实并不常用,cude是一个天空盒,3D是3D贴图
SubShader
Properties中的属性要在该属性块中使用,属性名需要相同,比如:_MainTex,其次也可以通过C#语言来获取到Shader后再去传递值
Unity会在Shader找到并运行第一个能在发布平台运行的SubShader,如果都不能运行,Unity自动调用fallBack
字段
正常情况下不不建议使用多个Pass通道,但是要实现特别效果还是要的
Tags
常用Tag的介绍

RenderType标识Shader采用的渲染队列类型,方便程序化识别
提示,pass对于Tags的使用采取的是就原则,写在SubShader最上面,该Shader的Pass全部使用Tags,里外都有用外的
Render设置

Pass
shader头文件的引入可以从Unity官网找到自己Unity对应的下载选项,选择bulid in shader
可以根据Pass通道的Name来指定使用特定通道,不过在use的时候 Pass的Name要全大写,命名的时候没限制
在Pass内写的Tags常用的属性
第二参数是要使用该Pass通道要满足的条件,可以有多个选项,中间用空格隔开
CGPROGRAM ENDCG
中间包裹起来的是顶点着色器和片元着色器
Fallback
SurfaceShader
Unity封装了一层,功能复杂
总结
Unity Shader实际上指的就是一个ShaderLab文件。以.shader作为后缀的一种文件。在Unity shader里面,我们可以做的事情远多于一个传统意义上的Shader。
在传统的shader中,我们仅可以编写特定类型的Shader,例如顶点着色器,片元着色器等。在Unity Shader中,我们可以在同一个文件里面同时包含需要的顶点着色器和片元着色器代码。
在传统shader中,我们无法设置一些渲染设置,例如是否开启混合,深度测试等,这些是开发者在另外的代码中自行设置的。而Unity shader中,我们通过一行特定的指令就可以完成这些设置。
在传统shader中,我们需要编写冗长的代码设置着色器的输入和输出,要小心的处理这些输入输出的位置对应关系等。而在Unity shader中,我们只需要在特定语句块中声明一些属性,就可以依靠材质来方便的改变这些属性。而对于模型自带的数据(如顶点,纹理坐标,法线等),Unity Shader也提供了直接访问的方法,不需要开发者自行编码来传给着色器。