Unity3d 渲染通道
====== Unity’s Rendering Pipeline Unity的渲染路径 ======
=== Description 描述 ===
着色器定义了一个对象如何被他自身(材质属性)与光照所影响。因为光照计算必须内置在着色器中,同时又很多光照类型与阴影类型,所以编写一个满足需求且高质量的着色器是一个复杂的任务。为了是这一切变得更加简单,Unity提供了(Surface Shaders)表面着色器,使用它能使光照、阴影、光照贴图、向前vs延迟渲染自动化处理。
本文档描述Unity的光照与渲染路径的特性,以及在场景中表面着色器是如何工作。
===Rendering Paths 渲染路径===
光照是如何被应用以及着色器中的哪一个通道(Passed)被使用,是依赖于何种渲染路径(Rendering Path)被使用。每一个着色器中的通道鉴别其光照类型是通过通道标签(Pass Tags)。
1.在前向渲染(Forward Rendering)中,ForwardBase 与ForwardAdd通道会被使用。
2.在延迟着色渲染(Deferred Shading)中,Deferred通道会被使用。
3.在传统延迟光照渲染(Legacy Deferred Lighting)中,PrepassBase和PrePassFinal通道会被使用。
4.传统顶点光照渲染(Legacy Vertex Lit),Vertex,VertexLMRGBM和VertexLM通道会被使用。
5.除了以上之外,渲染阴影或者深度贴图,ShadowCast通道会被使用。
=== Forward Rendering path 前向渲染路径===
ForwardBase通道渲染自然光,光照贴图,主方向光和非重要(顶点/SH)光。ForwardAdd通道被用来处理所有附加的逐像素光照;一次调用使逐个物体发光。在Forward Rendering中查阅详细资料。
如果前向渲染被使用,但是着色器没有一个合适的forward通道(forwardBase和forwardAdd都没被提供),那么该对象以顶点光照路径形式进行渲染,下同。
=== Deferred Shading path 延迟渲染路径 ===
Deferred 通道渲染所有光照所需要的信息(内置的shader中:漫反色颜色,镜面反色颜色,光滑度,世界空间法线,自发光)。同时他在自发光处理中增加了光照贴图、反色试样和环境光照。在Deferred Shading中查询详细资料。
=== Legacy Deferred Lighting Path 传统延迟光照路劲 ===
PrepassBase 通道渲染法线与高光指数;PrepassFinal 通道通过合并贴图渲染最终颜色,渲染光照与自发光材质属性。所有普通场景中,光照实在空间中分别进行的。
=== Legacy Vertex Lit Rendering path===
因为顶点光照被更多的用在那些不支持可编程着色器的平台上,Unity不能创建多个着色器的排列在内部处理lightmapped和non-lightmapped对象,因此多通道处理必须被显示的先写。
1.Vertex 通道被用来处理非光照对象,所有的光照只被渲染一次,通过使用一个固定功能的OpenGL与Direct3D光照模型(Blinn-Phong)。
2.VertexLMRGBM 通道被用来处理光照对象,当光照贴图使用过RGBM编码(PC平台)。当没有实时光照备用使用的情况下,通道被期望混合贴图与光照贴图。
4.VertexLMM 通道被用来处理光照对象,当光照贴图是都变了——LDR编码(移动平台)。当没有实时光照情况下,通道被期望混合贴图与光照贴图。
===See Also 更多===
1.Graphics Command Buffers 展示Unity如何开展渲染路径。