Unity的渲染管线

Unity的渲染管线

手册路径 Unity User Manual(2018) / Graphics / Graphics Reference / Shader Reference / Advanced ShaderLab topics / Unity’s Rendering Pipeline

着色器同时定义了两个东西,其中一个是物体它自己长什么样子(它的材质属性),另一个则是物体如何跟灯光交互。由于光照计算必须内置到着色器里面,而且存在许多灯光和阴影类型,编写一个高品质的正好能工作的着色器是一个复杂的任务。为了简化它,Unity提供了表面着色器。在表面着色器里,所有的光照、阴影、光照贴图、前向和延迟渲染这些事情都自动处理了。

这篇文档描述Unity的光照和渲染管线的独特性,以及在表面着色器幕后所发生的事情。

各种渲染路径

如何应用光照以及用到着色器中的哪个Pass,这些是由渲染路径所决定的。着色器里面的每个Pass通过Pass标签显露出它们的灯光类型。

  • 在前向渲染中,ForwardBase和ForwardAdd两个Pass会被用到。
  • 在延迟渲染中,Deferred这个Pass会被用到。
  • 在legacy延迟光照中,PrepassBase和PrepassFinal会被用到。
  • 在legacy顶点光照中,Vertex、VertexLMRGBM 和 VertexLM 将会被用到。
  • 在以上所有的渲染路径中,都会使用 ShadowCaster 这个Pass。

前向渲染路径

ForwardBase pass将会一次性渲染环境光、光照贴图、主方向光以及不太重要的(顶点/球谐)灯光。ForwardAdd pass用于任何额外的逐像素灯光,被逐像素灯光照亮的每个物体都会调用一次ForwardAdd。详见前向渲染

如果使用了前向渲染,但是某个着色器却不含适用的pass(例如既没有ForwardBase也没有ForwardAdd),那么这个物体将会跟使用顶点光照路径渲染效果一样,见下方。

延迟渲染路径

Deferred pass渲染光照所需的所有信息(在内建的着色器里为:漫反射颜色、高光颜色、光滑度、世界坐标空间下的法线、自发光)。它还添加了光照贴图、反射探针以及环境光照,放进了自发光通道。参见 延迟渲染

legacy延迟光照路径

PrepassBase pass渲染了法线、高光指数。PrepassFinal pass渲染了最终的颜色,这个颜色融合了纹理、光照和自发光。所有常规的场景内光照都是单独在屏幕空间中完成计算的。参见 延迟光照

legacy顶点光照渲染路径

因为顶点光照大多数时候用于那些不支持可编程着色器的平台,所以Unity无法使用着色器变体技术来处理有光照贴图和无光照贴图这两种情况。因此为了处理有光照贴图和无光照贴图的物体,需要明确书写多个pass。

  • Vertex pass用于无光照贴图的物体。所有的灯光一次性渲染,使用了OpenGL/Direct3D的固定函数光照模型(Blinn-Phong)。
  • VertexLMRGBM pass用于有光照贴图的物体,其光照贴图使用RGBM方式编码(PC和主机)。无实时光照,此pass预期将纹理跟光照贴图混合。
  • VertexLMM pass用于有光照贴图的物体,其光照贴图采用 double-LDR 方式编码(移动平台)。无实时光照,此pass预期将纹理跟光照贴图混合。注:这里的double-LDR的意思是将光照贴图的RGB值减半的方式存储进RGB各分量里,也就可以实现最高两倍标准白色的亮度。参见 builtin-shaders 里的 UnityCG.cginc 的 DecodeLightmapDoubleLDR 函数。

另请参阅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值