shader 顶点属性——颜色

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wodownload2/article/details/84982921

在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,到这里我们就已经完全了解了,顶点自身的颜色属性。以及如何通过程序给顶点的颜色属性进行赋值。

猜你喜欢

转载自blog.csdn.net/wodownload2/article/details/84982921