今天在看一個案例的時候,看到了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類型。