我已经使用Maya(Image1)将顶点颜色指定给一个平面,并使用我的VertexColorShader将其导出到Unity,并显示顶点颜色。
我预计结果会像Image3一样,但结果却是像Image2一样。
请看一下这些图片。
我的着色器相当简单。它只是使顶点颜色可见。
vert函数获取每个顶点颜色并将其存储在输出变量中。
surf函数从变量中检索颜色并将其设置为片段的颜色。
由于我相信每个顶点调用vert函数,我认为结果就像Image3(我用Photoshop编写了这个图像),但实际上是Image2。
怎么回事?
顶点之间的每个片段都不知道它的颜色,因为顶点函数不会在顶点之间被调用,所以我认为普通的颜色几乎是白色,除了顶点的位置。
有人请解释我为什么会这样吗?
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
}
}
干杯,
技术
答案 0 :(得分:0)
好的,我得到了答案。
存储在顶点函数的out变量中的所有内容都被插值并传递给片段或表面函数。
感谢。