声明Unity着色器数组的正确方法

时间:2019-03-29 01:04:06

标签: unity3d shader

希望有一个简单的问题。这是一个简单的相机效果着色器。这可行。但是,具有_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;
}

1 个答案:

答案 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)
};

“静态”和“常量”对我有用。