希望有一个简单的问题。这是一个简单的相机效果着色器。这可行。但是,具有_ColorSet01数组 INSIDE 的frag函数意味着该数组将针对每个像素进行初始化?我错了吗?相信我已经将它移到_MainTex定义正下方的 OUTSIDE 函数中。这样,在函数中查询时,数组中的每个项目都会丢失其值,并变为float4(0,0,0,0)。
我显然在用错误的方式处理此数组。任何帮助将不胜感激。
如果有帮助,这是Unity 2018.3.10。
sampler2D _MainTex;
float4 frag(v2f_img input) : COLOR {
float4 base = tex2D(_MainTex, input.uv);
float4 _ColorSet01[6] =
{
float4(1,0,0,1),
float4(1,1,0,1),
float4(1,0,0,1),
float4(1,0,1,1),
float4(1,1,0,1),
float4(1,0,0,1)
};
if (base.a > 0)
{
base.rgb = _ColorSet01[1].rgb;
}
return base;
}
答案 0 :(得分:1)
非常抱歉……在发布问题仅5分钟后找到了答案。这是在函数外部声明数组并保留值的方法:
static const float4 _ColorSet01[6] = {
float4(1,0,0,1),
float4(1,1,0,1),
float4(1,0,0,1),
float4(1,0,1,1),
float4(1,1,0,1),
float4(1,0,0,1)
};
“静态”和“常量”对我有用。