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類型。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM