在shader我们会经常要自己定制一些输入变量到顶点着色器,全部的顶点属性在UnityCG.cginc
你可以在unity的安装目录下找到:
比如:D:\Program Files\Unity2018\Editor\Data\CGIncludes
struct appdata_full {
float4 vertex : POSITION;
float4 tangent : TANGENT;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
float4 texcoord1 : TEXCOORD1;
float4 texcoord2 : TEXCOORD2;
float4 texcoord3 : TEXCOORD3;
fixed4 color : COLOR;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
经过百度,Google才知道顶点也是有颜色属性的,并且说一般是常量值。
可以参考:
https://blog.csdn.net/mobanchengshuang/article/details/38681111
https://blog.csdn.net/qq_38572472/article/details/78958552 //介绍了如何程序设置顶点的颜色
https://blog.csdn.net/candycat1992/article/details/38147767 //介绍了如何将顶点颜色和贴图进行混合
其中第二个例子,是用程序对每个mesh顶点进行赋值,很好。
但我还是想找到官方或者外文网站对于这个属性的说明:
https://docs.unity3d.com/Manual/SL-VertexProgramInputs.html
官网也试图展示顶点自身的颜色,示例代码如下:
Shader "Debug/Vertex color" {
SubShader {
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
// vertex input: position, color
struct appdata {
float4 vertex : POSITION;
fixed4 color : COLOR; //顶点自身的颜色
};
struct v2f {
float4 pos : SV_POSITION;
fixed4 color : COLOR;
};
v2f vert (appdata v) {
v2f o;
o.pos = UnityObjectToClipPos(v.vertex );
o.color = v.color; //直接使用顶点自身的颜色
return o;
}
fixed4 frag (v2f i) : SV_Target { return i.color; } //像素着色器直接返回顶点的颜色
ENDCG
}
}
}
ok,到这里我们就已经完全了解了,顶点自身的颜色属性。以及如何通过程序给顶点的颜色属性进行赋值。