材質的機制
寫材質跟寫程序非常不同,因為他們是不同的機制。
一般情況下,程序代碼是順序執行的,有跳轉有循環。
但是材質不一樣。
材質是並行運算的
材質是對每個像素(有時是每個頂點)並行運算的。
一個物體表面有多少像素,這個材質就會被同時執行多少遍。
材質沒有循環
材質里面沒有循環。如果材質里加上循環,可能直接把顯卡給燒掉了(哈哈,這里不嚴謹了~)。
因為每個像素都要執行一遍,假設材質里有循環,每個循環的次數是100(好像並不太多),那么要執行的指令數是沒有循環時的100倍(這里又不太嚴謹了。。)!
材質運行時沒有分支
材質中確實可以放bool類型的參數,但是這個參數是Static的。含義就是只能在編輯期修改,運行期不能修改。
還有switch,也是static的。
這是官方文檔:
簡單來說,編譯Shader需要對每一個分支進行編譯,如果運行期允許修改,那可能會導致需要編譯的Shader太多,出現Shader大爆炸。
如果你使用過StaticBoolParameter,那你可能會注意到,每次修改這個類型的變量,都會導致重新編譯。
理解這些,對你寫材質有幫助。
原文地址:原文地址
本文首發於翰者學堂