顶点颜色不像我预期的那样工作

时间:2016-11-12 11:46:22

标签: unity3d shader

我已经使用Maya(Image1)将顶点颜色指定给一个平面,并使用我的VertexColorShader将其导出到Unity,并显示顶点颜色。

我预计结果会像Image3一样,但结果却是像Image2一样。

请看一下这些图片。

Image1, Image2, Image3

我的着色器相当简单。它只是使顶点颜色可见。

vert函数获取每个顶点颜色并将其存储在输出变量中。

surf函数从变量中检索颜色并将其设置为片段的颜色。

由于我相信每个顶点调用vert函数,我认为结果就像Image3(我用Photoshop编写了这个图像),但实际上是Image2。

Image1, Image2, Image3

怎么回事?

顶点之间的每个片段都不知道它的颜色,因为顶点函数不会在顶点之间被调用,所以我认为普通的颜色几乎是白色,除了顶点的位置。

有人请解释我为什么会这样吗?

Shader "MyShader/VertexColorShader" {
  Properties {
  }
  SubShader {
    Tags { "RenderType"="Opaque" }
    CGPROGRAM
    #pragma surface surf Lambert vertex:vert 

    struct Input {
        float4 vertColor;
    };

    void vert(inout appdata_full v, out Input o) {
        UNITY_INITIALIZE_OUTPUT(Input, o);
        o.vertColor = v.color;
    }

    void surf (Input IN, inout SurfaceOutput o) {
        o.Albedo = IN.vertColor.rgb;
    }
    ENDCG
  }
}

干杯,

技术

1 个答案:

答案 0 :(得分:0)

好的,我得到了答案。

存储在顶点函数的out变量中的所有内容都被插值并传递给片段或表面函数。

感谢。