Unity Shader | 属性、顶点与片元函数
上一篇博客 介绍了Shader的基本结构,这里我们继续来说Shader的编写,也就是要在 CGPROGRAM 中写代码。首先我们把之前的Shader结构代码复制过来。 123456789101112131415161718192021222324252627282930313233Shader "iMoeGirl/MyShader" { // Shader 名字 // 这里定义一些属性,可以显示在UI面板上用于调节 Properties { // 属性名("Inspector面板上显示出来的属性名", 属性类型) = 默认值 _Color("颜色类型", Color) = (1,1,1,1) _Vector("向量类型", Vector) = (1, 2, 3, 4) _Int("整型", Int) = 11111 _Float("浮点型", Float) = 12.11 _Range("范围类型", Range(100, 1000)) = 128 _Tex2D("贴图类型", 2D) = "white"{} _Cube("立方体贴图类型", Cube) = "white"{} _Tex3D("3D纹理", 3D) = "white"{} } // 子 Shader,可以写多个,显卡运行时, // 从第一个SubShader开始,如果第一个里面的效果都支持,则使用第一个, // 如果发现这个SubShader里面某些效果不支持,则自动运行下一个SubShader SubShader { // 至少有一个Pass,相当于一个方法 Pass { // 在Pass块里写Shader代码 CGPROGRAM // 使用 CG语言编写Shader ENDCG } } // 如果发现所有的SubShader都不支持,则使用Fallback,相当于后备方案 Fallback "VertexLit"} 怎样使用 Properties 中定义的属性Unity3D定义Shader属性所使用的语法,和CG所使用的说法是不一样的,所以我们要在一个Pass中使用Properties中定义的属性,需要在Pass中再以CG的语法再写一遍,其实就是变量名相同,而数据类型不同,在Shader在编译的时候,就会自动将两个变量关联起来。看下面的代码