材质的机制
写材质跟写程序非常不同,因为他们是不同的机制。
一般情况下,程序代码是顺序执行的,有跳转有循环。
但是材质不一样。
材质是并行运算的
材质是对每个像素(有时是每个顶点)并行运算的。
一个物体表面有多少像素,这个材质就会被同时执行多少遍。
材质没有循环
材质里面没有循环。如果材质里加上循环,可能直接把显卡给烧掉了(哈哈,这里不严谨了~)。
因为每个像素都要执行一遍,假设材质里有循环,每个循环的次数是100(好像并不太多),那么要执行的指令数是没有循环时的100倍(这里又不太严谨了。。)!
材质运行时没有分支
材质中确实可以放bool类型的参数,但是这个参数是Static的。含义就是只能在编辑期修改,运行期不能修改。
还有switch,也是static的。
这是官方文档:
简单来说,编译Shader需要对每一个分支进行编译,如果运行期允许修改,那可能会导致需要编译的Shader太多,出现Shader大爆炸。
如果你使用过StaticBoolParameter,那你可能会注意到,每次修改这个类型的变量,都会导致重新编译。
理解这些,对你写材质有帮助。
原文地址:
本文首发于翰者学堂