【问题标题】:Correct way for declaring a Unity shader array声明 Unity 着色器数组的正确方法
【发布时间】:2019-03-29 09:32:42
【问题描述】:

希望一个简单的问题。这是一个简单的相机效果着色器。这行得通。但是,拥有 _ColorSet01 数组 INSIDE 的 frag 函数意味着该数组会针对每个像素进行初始化 ¿ 我错了吗?相信我已经将它 OUTSIDE 移到了 _MainTex 定义下方的函数中。通过这样做,数组中的每个项目都会丢失它们的值,并在函数内部查询时变为 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;
}

【问题讨论】:

    标签: unity3d shader


    【解决方案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)
    };

    “static”和“const”对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-18
      • 2014-01-15
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多