unity shader学习笔记(2):vertexshader(顶点颜色)

功能前提思考:大量物体使用同一个材质,实现不同的颜色。开发的功能是乐高模型的搭建模拟。优化材质数量

个人的做法是在不同模型初始化的时候赋予不同颜色,这些颜色存在顶点上面。而shader的话只是用于显示物体和一些光照效果的处理然后在混合顶点颜色。(有其他做法的可以多多交流,嘿嘿)。

直接上图

先发一个改变模型顶点颜色的代码

unity shader学习笔记(2):vertexshader(顶点颜色)_第1张图片

public MeshFilter MF1,MF2;

    void Start () {
        int count=MF1.mesh.vertexCount;
        List colors = new List ();
        for (int i = 0; i < count; i++) {
            colors.Add (Color.blue);
        }
        MF1.mesh.SetColors (colors);

         count=MF2.mesh.vertexCount;
        colors = new List ();
        for (int i = 0; i < count; i++) {
            colors.Add (Color.red);
        }
        MF2.mesh.SetColors (colors);
    }

unity shader学习笔记(2):vertexshader(顶点颜色)_第2张图片


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"
}
 

unity shader学习笔记(2):vertexshader(顶点颜色)_第3张图片

运行效果

unity shader学习笔记(2):vertexshader(顶点颜色)_第4张图片

 

你可能感兴趣的:(shader)