此页面描述了 Unity 内置 渲染管线一系列操作,用于获取场景内容并在屏幕上显示。Unity 允许您选择预构建的渲染管线,或编写自己的渲染管线。 更多信息
参见 术语表 中的前向 渲染路径渲染管线用于渲染图形的技术。选择不同的渲染路径会影响灯光和阴影的计算方式。某些渲染路径比其他渲染路径更适合不同的平台和硬件。 更多信息
参见 术语表。
前向渲染根据影响对象的灯光,以一次或多次传递渲染每个对象。灯光本身也会根据其设置和强度,由前向渲染以不同的方式处理。
在前向渲染中,会以完全逐像素光照模式渲染影响每个对象的一些最亮灯光。然后,每个顶点计算多达 4 个点光源。其他灯光则计算为球谐函数 (SH),速度快得多,但只是一个近似值。灯光是否为逐像素灯光取决于此
每个对象的渲染过程如下
例如,如果某个对象受到多个灯光的照射(下图中的圆圈,受到灯光 A 到 H 的照射)
假设灯光 A 到 H 的颜色和强度相同,并且它们都具有自动渲染模式,因此对于此对象,它们将按此确切顺序排序。最亮的灯光将以逐像素光照模式渲染(A 到 D),然后最多 4 个灯光以逐顶点光照模式渲染(D 到 G),最后其余灯光以 SH 渲染(G 到 H)
请注意,灯光组会重叠;例如,最后一个逐像素灯光会混合到逐顶点光照模式中,因此当对象和灯光四处移动时,“灯光弹出”现象会减少。
基础通道使用一个逐像素定向光和所有 SH/顶点光渲染对象。此通道还会添加来自 着色器在 GPU 上运行的程序。 更多信息
参见 术语表 的任何 光照贴图预渲染的纹理,其中包含光源对场景中静态对象的影响。光照贴图覆盖在场景几何体上以创建照明的效果。 更多信息
参见 术语表、环境光和自发光。在此通道中渲染的定向光可以具有阴影。请注意,光照贴图对象不会接收来自 SH 灯光的照明。
请注意,当在着色器中使用“OnlyDirectional” 通道标记 时,前向基础通道仅渲染主定向光、环境光/光探针和光照贴图(SH 和顶点光不包含在通道数据中)。
为影响此对象的每个其他逐像素灯光渲染附加通道。默认情况下,这些通道中的灯光没有阴影(因此,结果,前向渲染支持一个具有阴影的定向光),除非使用了 multi_compile_fwdadd_fullshadows 变体快捷方式。
逐像素动态照明会为每个受影响的 像素计算机图像中的最小单位。像素大小取决于屏幕分辨率。像素照明在每个屏幕像素上计算。 更多信息
参见 术语表 添加大量的渲染工作,并可能导致对象以多次传递渲染。避免在移动设备或低端 PC GPU 等功能较弱的设备上让超过一个像素灯光照亮任何单个对象,并使用光照贴图照亮静态对象,而不是每帧计算其照明。逐顶点动态照明可能会为顶点变换添加大量工作,因此请尽量避免多个灯光照亮单个对象的情况。
避免组合距离足够远以受不同像素灯光集影响的网格。当您使用像素照明时,每个 网格Unity 的主要图形基元。网格构成 3D 世界的很大一部分。Unity 支持三角形或四边形多边形网格。NURBS、NURMS、细分曲面必须转换为多边形。 更多信息
参见 术语表 必须根据照亮它的像素灯光数量渲染多次。如果组合两个相距很远的网格,则会增加组合对象的有效大小。在渲染过程中会考虑照亮此组合对象任何部分的所有像素灯光,因此需要执行的渲染传递次数可能会增加。通常,渲染组合对象所需的传递次数是每个单独对象的传递次数之和,因此组合网格不会获得任何好处。
在渲染过程中,Unity 会查找围绕网格的所有灯光并计算其中哪些灯光对其影响最大。 质量 窗口中的设置用于修改最终成为像素灯光的灯光数量以及最终成为顶点灯光的灯光数量。每个灯光都会根据其与网格的距离及其照明的强度计算其重要性——并且某些灯光纯粹从游戏上下文中来看比其他灯光更重要。因此,每个灯光都有一个渲染模式设置,可以将其设置为重要或不重要;标记为不重要的灯光具有较低的渲染开销。
示例:考虑一个驾驶游戏,其中玩家的汽车在黑暗中行驶,并且打开了前照灯。前照灯可能是游戏中视觉上最重要的光源,因此其渲染模式应设置为重要。游戏中可能还有其他不太重要的灯光,例如其他汽车的后灯或远处的路灯,并且将其设置为像素灯光不会显着改善视觉效果。可以安全地将此类灯光的渲染模式设置为不重要,以避免在收益不大的地方浪费渲染能力。
优化逐像素照明可以节省 CPU 和 GPU 工作:CPU 需要执行较少的绘制调用,而 GPU 需要处理较少的顶点并为所有其他对象渲染光栅化较少的像素。
球谐函数灯光渲染非常快。它们对 CPU 的成本很小,并且对 GPU 应用实际上是免费的(即,基础通道始终计算 SH 照明;但由于 SH 灯光的运作方式,无论有多少 SH 灯光,成本都完全相同)。
SH 灯光的缺点是
总之,SH 灯光通常足以用于小型动态对象。