Предположим, у меня есть следующий шейдер:
Shader "Sprites/X"
{
Properties
{
[HideInInspector] _MainTex("Sprite Texture", 2D) = "black" {}
}
SubShader
{
Pass
{
CGPROGRAM
// bla bla
fixed4 frag(v2f i) : SV_Target
{
float a = calculateA();
float b = calculateB();
.
.
.
float z = calculateZ();
// Here the values above mix with x-y position of the pixel
// and then return a color
}
ENDCG
}
}
}
В приведенном выше коде мне нужно вычислить значения переменных a
- z
из связанных функций calculateA()
- calculateZ()
(это просто пример обобщения).Предположим, что эти функции сложны и что они зависят от других свойств шейдера, которые меняются в каждом кадре, а не от самого пикселя.Мы знаем, что сложные функции вычисляются каждый раз для каждого пикселя.
Есть ли способ «кэшировать» эти значения, чтобы избежать вычисления каждый раз для каждого пикселя?В каждом кадре их значения одинаковы для всех пикселей.
В настоящее время я решаю проблему, устанавливая значения в скрипте C # с помощью:
gameObject.GetComponent<Renderer>().material.SetFloat("a", calculateA());
.
.
.
gameObject.GetComponent<Renderer>().material.SetFloat("z", calculateZ());
, но я предпочитаю поддерживатькод шейдера и сценария C # разделены.