Правильный способ объявления массива шейдеров Unity - PullRequest
0 голосов
/ 29 марта 2019

Надеюсь на простой вопрос. Это простой шейдер с эффектом камеры. Это работает. Однако, имея массив _ColorSet01 INSIDE , функция frag означает, что массив инициализируется для каждого пикселя ¿Я ошибаюсь ?. Полагая, что я переместил ВНЕ функцию, прямо под определение _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;
}

1 Ответ

1 голос
/ 29 марта 2019

Очень жаль ... нашел ответ всего через 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" помогли мне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...