【发布时间】:2015-06-13 08:50:52
【问题描述】:
一个典型的着色器是这样的:
struct vin_vct
{
float4 vertex : POSITION;
float4 color : COLOR;
float2 texcoord : TEXCOORD0;
};
struct v2f_vct
{
float4 vertex : POSITION;
fixed4 color : COLOR;
float2 texcoord : TEXCOORD0;
};
v2f_vct vert_vct(vin_vct v)
{
v2f_vct o;
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
o.color = v.color;
o.texcoord = v.texcoord;
return o;
}
fixed4 frag_mult(v2f_vct i) : COLOR
{
fixed4 col = tex2D(_MainTex, i.texcoord) * i.color;
return col;
}
我感到困惑的是: vert_vct 被每个顶点调用; frag_mult 被称为每个片段(大多数情况下为像素);
所以基本上 frag_mult 会和 vert_vct 运行不同的时间,例如,frag mult 运行 10 次,而 vert_vct 运行 3 次三角形。那么每次frag_mult运行时都会接受一个vert_vct传递的参数,那么如果运行时间不同,如何在frag和vert之间进行映射,如何决定将哪个vert_vct传递给指定的frag_mult呢?
【问题讨论】:
-
值(大部分时间)是线性插值的。对于每个片段,值是从周围的顶点插入的。例如,一个三角形的 3 个顶点中的每一个都有一种颜色会产生很多片段,这些片段的颜色将从顶点的颜色中插值。