假设我有以下着色器:
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#脚本代码分开。
发布于 2019-05-27 07:36:33
嗯,你就是这样做的:)
这取决于你为什么要避免使用C#
https://stackoverflow.com/questions/56303832
复制相似问题