unity shader学习笔记(2):vertexshader(顶点颜色)
功能前提思考:大量物体使用同一个材质,实现不同的颜色。开发的功能是乐高模型的搭建模拟。优化材质数量
个人的做法是在不同模型初始化的时候赋予不同颜色,这些颜色存在顶点上面。而shader的话只是用于显示物体和一些光照效果的处理然后在混合顶点颜色。(有其他做法的可以多多交流,嘿嘿)。
直接上图
先发一个改变模型顶点颜色的代码
public MeshFilter MF1,MF2;
void Start () {
int count=MF1.mesh.vertexCount;
List<Color32> colors = new List<Color32> ();
for (int i = 0; i < count; i++) {
colors.Add (Color.blue);
}
MF1.mesh.SetColors (colors);
count=MF2.mesh.vertexCount;
colors = new List<Color32> ();
for (int i = 0; i < count; i++) {
colors.Add (Color.red);
}
MF2.mesh.SetColors (colors);
}
Shader "long/vertexcolor"
{
Properties
{
//_MainColor("Color", Color) = (1,0,0,1)
}
SubShader {
PASS{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc" //引用unity内置shader辅助函数
//定义一个结构体用来传递位置信息和颜色
struct v2f{
float4 pos:POSITION;
float4 col:COLOR;
};
v2f vert(appdata_full v){
v2f o;
o.pos=UnityObjectToClipPos(v.vertex);
//取出顶点颜色
o.col=v.color;
return o;
}
float4 frag(v2f IN):COLOR{
return IN.col;
}
ENDCG
}
}
FallBack "Diffuse"
}
运行效果