Unity的渲染管线

Unity的渲染管线

英文原文:https://docs.unity3d.com/Manual/SL-RenderPipeline.html

着色器定义了对象的视觉效果(通过材质属性设置)以及对象如何与光线产生反应。因为光照计算必须内置到着色器中,而且光源与阴影的种类可能有很多种,所以编写能够“干活”的优质着色器是一项复杂的任务。为了使这一任务更加简单,Unity内置了表面着色器(Surface Shader),它能自动处理全部的照明、投影、光照映射、Forward与Deferred渲染。

这篇文章描述了Unity的照明与渲染管线的特异性以及发生在使用了表面着色器的场景底层的事情。

渲染通道(Rendering Path)

如何应用照明以及使用着色器的哪个Pass取决于所使用的渲染通道。着色器中的每个Pass通过Pass Tag与它们的照明类型进行通讯。

Forward Rendering通道

ForwardBase 同时渲染环境光(Ambient)、光照贴图(Lightmap)、主平行光(Directional Light)和Render Mode为Not Important(Vertex/SH)的光源。ForwardAdd 用于处理所有附加的Per-Pixel光源;每个通过此类光源照亮的物体都会产生一次调用(?:one invocation per object illuminated by such light is done)。

如果选用了Forward Rendering但着色器却没有适用于Forward Rendering的(Forward-suitable) Pass(例如,既没有 ForwardBase 也没有 ForwardAdd ),那么对象的渲染结果会和使用 Vectex Lit通道时一样,参见下文。

Deferred Shading通道

Deferred 渲染照明所需要的所有信息(在内置着色器中:diffuse color, specular color, smoothness, world space normal, emission),它也负责把光照贴图、反射探针和环境光照添加到Emission Channel中。

Legacy Deferred Lighting通道

PrepassBase 渲染法线&反射指数;PrepassFinal 通过合并纹理、照明&发光材质属性来渲染最终颜色。场景内所有的常规照明都在屏幕空间内分别完成。

Legacy Vertex Lit Rendering通道

自从顶点照明(Vertex Lighting)成为在不支持可编程着色器的平台上使用最多的方式后,Unity无法再在内部创建多个着色器变体来处理由光照贴图 vs. 无光照贴图的情况。因此,必须明确的编写多个Pass来处理有光照贴图和无光照贴图的对象。

  • Vertex Pass用于处理无光照贴图的对象。所有光源一次性渲染,使用固定功能的 OpenGL/Direct3D 照明模型(Blinn-Phong)。
  • VertexLMRGBM Pass用于处理光照贴图使用RGBM编码(PC和主机)的对象。不应用实时照明;Pass要合并纹理到光照贴图(?:pass is expected to combine textures with a lightmap)。
  • VertexLMM Pass用于处理光照贴图使用 Double-LDR编码(移动平台)的对象。不应用实时光照;Pass要合并纹理到光照贴图(原文同上)。

参考

猜你喜欢

转载自blog.csdn.net/qq_21397217/article/details/82850416