【问题标题】:Vertex color doesn't work as I expected顶点颜色不像我预期的那样工作
【发布时间】:2016-11-12 11:46:21
【问题描述】:

我已使用 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
  }
}

干杯,

技术

【问题讨论】:

  • 感谢您对颜色敏感的眼睛,但我真的看不出有什么不同..??
  • 感谢您的回复。您没有看到 Image2 和 Image 3 之间的区别?真的吗??
  • 2和3比较苹果和梨,一个是tex map,一个是verts

标签: unity3d shader


【解决方案1】:

好的,我知道了。

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

谢谢。

【讨论】:

    猜你喜欢
    • 2012-06-13
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    • 2014-05-16
    • 1970-01-01
    • 2022-01-11
    • 2012-07-13
    相关资源
    最近更新 更多