材质的机制

写材质跟写程序非常不同,因为他们是不同的机制。

一般情况下,程序代码是顺序执行的,有跳转有循环。

但是材质不一样。

材质是并行运算的

材质是对每个像素(有时是每个顶点)并行运算的。

一个物体表面有多少像素,这个材质就会被同时执行多少遍。

材质没有循环

材质里面没有循环。如果材质里加上循环,可能直接把显卡给烧掉了(哈哈,这里不严谨了~)。

因为每个像素都要执行一遍,假设材质里有循环,每个循环的次数是100(好像并不太多),那么要执行的指令数是没有循环时的100倍(这里又不太严谨了。。)!

材质运行时没有分支

材质中确实可以放bool类型的参数,但是这个参数是Static的。含义就是只能在编辑期修改,运行期不能修改。

还有switch,也是static的。

这是官方文档:

简单来说,编译Shader需要对每一个分支进行编译,如果运行期允许修改,那可能会导致需要编译的Shader太多,出现Shader大爆炸。

如果你使用过StaticBoolParameter,那你可能会注意到,每次修改这个类型的变量,都会导致重新编译。

理解这些,对你写材质有帮助。