unity当中有3中不同的编写shader的方案
1、surface shaders 表面着色器 推荐使用。 可以完成百分之90的效果,是在vertex and fragment shaders上做了包装,方便大家使用。
2、vertex and fragment shaders 顶点 和 片段 着色器。一切皆有可能
3、fixed function shaders 固定管线shader。局限性比较大,能完成部分效果
unity官方建议我们先阅读有关的shaderlab语法,然后再继续阅读关于表面着色器与顶点片段着色器的内容。固定管线shader只使用了shaderlab语法来编写,其他两种不限与shaderlab语法。比如 glsl hlsl 用这种语言是镶嵌在shaderlab语言当中的一种代码片段。
Shaderlab基本结构
shader “name”{
[Properties]
SubShaders
[FallBack]
}
properties :着色器可以有一个属性列表。任何在着色器种声明的属性都可以显示在unity内部的材质球中。典型的属性是物体的颜色,纹理,或者着色器使用的任意值。如下图
SubShader :就是专门位GPU渲染写的片段程序 至少有一个,可以有多个。显卡只能选择其中一个SubShader来执行,需要多个是因为,当硬件不支持第一个,会去运行第二个,如果第一个呗良好的支持,就不去执行第二个。可以写多个,从难到简,这样就可以在好的机器上运行复杂的。如果一个都不能被执行,就要用到FallBack所指定的着色器,可以指定unity内建的shader