原文链接:https://docs.unity3d.com/Manual/SL-RenderPipeline.html
shader定义了这个物体它自己看上去是什么样的(它的材质属性),以及它是怎样与光线交互的。由于光照计算的shader必须被放在shader中,并且有许多光影类型,写一个“可以工作”质量的shader将会是复杂的。为了使其更简单,Unity有表面shader,所有的光照,阴影,光照贴图,正向或延迟渲染这些都会被自动考虑到。
本文档描述了Unity的光照和渲染流水线的特性以及表面shader幕后发生的事情。
渲染路径
光照怎样被应用,并且shader的哪个pass会被使用,都基于使用什么渲染路径。一个shader中的每个pass都通过pass tag来得到其光照类型。
·在正向渲染中,ForwardBase和ForwardAdd的pass将会被使用。
·在延迟着色中,Deferred的pass将会被使用。
·在旧延时光照中,PrepassBase和PrepassFinal的pass将会被使用。
·在旧顶点光照中,Vertex,VertexLMRGBM和VertexLM的pass将会被使用。
·在上面所有情况,要渲染阴影或是深度纹理,ShadowCaster的pass将会被使用。
正向渲染路径
ForwardBase的pass一次渲染环境光,光照贴图,主平行光和不重要的光照(vertex/SH)。ForwardAdd的pass被用于渲染所有额外的逐像素光照;每个物体被这种光照射完成一次调用。看正向渲染(链接见原网页)获取更多细节。
如果正向渲染被使用,但是一个shader并没有正向渲染适配的pass(比如没有ForwardBase和ForwardAdd的pass呈现类型),那么对象的渲染就会像顶点光照路径一样,请看下文。
延迟着色路径
延迟的pass渲染光照所需的所有信息(在内置的shader中:漫反射颜色,高光反射颜色,平滑度,世界空间法线,自发光)。它也在自发光通道中增加了光照贴图,反射探针和环境光照。查看延迟着色以获取更多细节(链接见原网页)。
旧延迟光照路径
PrepassBase的pass渲染法线和高光指数,PrepassFinal的pass渲染通过纹理合并、光照和发光的材质属性得来的最终颜色。所有常规的场景中照明都在屏幕空间中单独完成。查看延迟光照获取更多细节(链接见原网页)。
旧顶点光照渲染路径
由于顶点光照大多数情况下用于不支持可编程shader的平台,Unity不能创建多个内部shader变体来处理光照贴图与非光照贴图的情况。所以处理光照贴图与非光照贴图的物体,必须明确的写多个pass。
·Vertex的pass用于非光照贴图的物体,所有光照马上被渲染,使用OpenGL/Direct3D固定的光照模型函数(Blinn-Phong)。
·VertexLMRGBM的pass用于光照贴图的物体,当光照贴图是RGBM编码的时候(PC和控制台)。不会使用实时光照,pass被期望于合并纹理和光照贴图。
·VertexLMM的pass用于光照贴图的物体,当光照贴图是double-LDR编码的时候(移动平台)。不会使用实时光照,pass被期望于合并纹理和光照贴图。
也可以看看
Graphics Command Buffers(链接见原网页)讲述怎样扩展Unity的渲染流水线。