ShaderLab中属性的类型和CG中变量的类型之间的匹配关系如图:
uniform关键字:
uniform fixed4 _Color;
uniform 关键字是CG中修饰变量和参数的一种修饰词,它仅仅用于提供一些关于该变量的初始值是如何指定和存储的相关信息(这和其他一些图像编程接口中的uniform关键词的作用不太一样)。在UnityShader中,uniform关键词是可以省略的。
在Unity中,有些代码使用了内置文件提供的函数和变量,他们的后缀是.cginc。 格式如下:
#include "UnityCG.cginc"
在编写Shader时,我们可以使用#include指令把这些文件包含进来,这样我们就可以使用Unity为我们提供的一些非常有用的变量和帮助函数。这些文件可以在官方网站:https://unity3d.com/cn/get-unity/download/archive 下载如图:
对应的结构体为:
struct appdata_base {
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
UNITY_INSTANCE_ID
};
struct appdata_tan {
float4 vertex : POSITION;
float4 tangent : TANGENT;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
UNITY_INSTANCE_ID
};
struct appdata_full {
float4 vertex : POSITION;
float4 tangent : TANGENT;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
float4 texcoord1 : TEXCOORD1;
float4 texcoord2 : TEXCOORD2;
float4 texcoord3 : TEXCOORD3;
#if defined(SHADER_API_XBOX360)
half4 texcoord4 : TEXCOORD4;
half4 texcoord5 : TEXCOORD5;
#endif
fixed4 color : COLOR;
UNITY_INSTANCE_ID
};
Untiy提供CG/HLSL语义,语义实际上就是一个赋给Shader输入和输出的字符串,这个字符串表达了这个参数的含义。