此文仅供参考使用。this is reference not a manual!
所以知识点比较零碎,如果有时间我会整理一下概念,组织一下逻辑,让弱基础的读者理解。
老生重提,学过shader编程的同学应该知道,一个特效的形成是由3部分组成(像魔戒三部曲一样)。物体材质+光源+视摄像机共同渲染的结果。物体材质是我们可以编程的如何接收光,反射,折射等,这一部分涉及物理光学(突然好高大上),计算机靠数学函数模拟光照的特征,计算出光照强度颜色等,最终反映到屏幕上被肉眼接收。那摄像机有vertexlit,forward,deferred三种模式干嘛? 其实摄像机就是统一规定屏幕内的物体都是以什么方式被渲染的,VertexLit顶点方式则全部用物体材质中的vertex path渲染路径去刻画每一个物体,如果(当前显示)摄像机用forward模式,则查找物体材质shader程序中forward base/forward add path去刻画物体,如果找不到则还是用vertex path去刻画。如果(当前显示)摄像机用deferred模式,则查找物体材质shader程序中PrepassBase/PrepassFinal path(这里不是deferred开头额。)方法去刻画物体,找不到则寻找forward base/forward add path去刻画物体,再找不到则使用最低级的vertex path去渲染,再找不到?有个FallBack “Diffuse”就是最终使用unity系统默认渲染方法来渲染..您就甭管了…
所以摄像机的渲染模式就像一个总开关… 而材质的渲染路径path就是总开关下的各种串并联电路,决定哪种渲染方式合适,而光源有两种光照vertex/pixel和材质渲染路径共同决定如何显示,总不能光源是vertex顶点的,而要求材质渲染用deferred的逐像素点渲染吧?这时候就会自动调整到适合光源的vertex path路径下渲染。。 而vertex顶点渲染硬件开销小..废话么,都不是每个像素点运算的,只是顶点插值出来的均值,所以游戏中主要光源应该用pixel逐像素点刻画,而次要光源(啥叫次要,比如太阳下的小星星,你就自己琢磨吧)就可直接设置成vertex模式的,强制材质物体在使用该光源时使用verte