Unity中C#向Shader传float数据的优化
今天在看一个案例的时候,看到了SetGlobalFloat(int nameID, float value)这个方法,所以拓展阅读的时候,才有了这篇文章。
参考:https://blog.csdn.net/ngrandmarch/article/details/46370557
unity中C#向Shader传递参数的方式有以下两种:
1、面向具体Material的SetFloatXXX系列(这个是实例方法)
2、面向全部Shader的SetFloatXXX系列(这个是静态方法)
具体的使用方式文章中已经讲解的非常明白,我在这里想再加上一些自己的理解。
用一次性向Shader传递多个值来代替一个值一个值的传递,从某种意义上讲,这其实也可理解为“批处理”思想的一种使用场景。
要想使用这种方式优化C#向Shader的值传递,需要一个前提:API中传递的“复杂”类型的分量与要传递的“简单类型”要一致。比如:
Material的SetFloat(string name, float value)方法与Shader的SetVector(int nameID, Vector4 value),Vector4类型的每个分量都是float类型。
当需要传递的值过多的时候,甚至可以用Shader中的SetVectorArray(int nameID, List<Vector4> values)来优化,但是要注意约定好对应关系。
所以文章标题的中是float类型,而不是string或者int类型,就是因为API中的可以传递的“复杂类型”的分量只有float类型。