Version: 2020.3
自定义衰减
LOD(细节级别)和实时 GI(全局光照)

Realtime Global Illumination using Enlighten

Unity 将称为 Enlighten 的中间件用于实时 GI。

默认情况下,实时光源仅为场景提供直接光照。如果在场景中启用实时全局光照(实时 GI),实时光源还会为场景提供间接光照。

渲染管线支持

  • 内置渲染管线支持使用 Enlighten 的实时全局光照。
  • 通用渲染管线 (URP) 不支持使用 Enlighten 的实时全局光照。
  • 高清渲染管线 (HDRP) 不支持使用 Enlighten 的实时全局光照。

何时使用实时 GI

如果光源会缓慢变化并对场景具有很高的视觉影响(例如在天空中移动的太阳,或者在封闭的走廊中缓慢闪烁的光源),实时 GI 就很有用。对于快速变化的光源或对于特殊效果,由于性能成本和延迟,不适合使用实时 GI。

实时 GI 适用于面向中端到高端 PC 系统和游戏主机的游戏。一些高端移动设备也可能足够强大到能够使用此功能,但应保持场景较小且实时光照贴图的分辨率较低,从而节省系统资源。

使用实时 GI

要在场景中启用 Realtime GI,请打开 Lighting 窗口(菜单:__Window__ > Rendering > Lighting__),然后启用 Realtime Global Illumination__。

要禁用__实时 GI__ 对特定光源的影响,请选择光源游戏对象,然后在光源组件中将 Indirect Multiplier 设置为 0。这意味着该光源不会为场景提供任何间接光。

要完全禁用 Realtime GI__,请打开 Lighting 窗口(菜单:__Window > Rendering > Lighting__),然后取消选中 Realtime Global Illumination__。

For detailed step-by-step advice on using Enlighten Realtime Global Illumination, see the Unity tutorial on Precomputed Realtime GI.

实时 GI 的工作原理

在 Unity Editor 中,Enlighten 将场景拆分为小的面片,并确定这些面片彼此可见的程度。在运行时,Enlighten 使用此预计算的可见性信息来估计实时光源在场景中的反射方式,将结果保存在一组光照贴图中,然后使用这些光照贴图将间接光照应用于场景。

更新光照贴图的计算量很大,因此该过程被拆分为几帧。换言之,Enlighten 需要几帧才能通过场景将更改传播到间接光照。

光照探针和实时 GI

请注意,启用实时 GI 后,光照探针的行为方式将会不同。

在场景中启用实时 GI 后,光照探针会在运行时迭代地对光照采样。这意味着光照探针会对场景光照中的运行时变化做出反应。

在场景中禁用实时 GI 后,光照探针仅使用烘焙光照数据。这意味着光照探针不会对场景光照中的运行时变化做出反应。

阴影和实时 GI

如果光源也投射阴影,则 Unity 会将场景中的动态和静态游戏对象都渲染到光源的阴影贴图中。然后,静态和动态游戏对象的材质着色器对此阴影贴图进行采样,并相互投射实时阴影。阴影距离 (Shadow Distance)(菜单:__Edit__ > Project Settings__,然后选择 Quality__ 类别,并导航到 Shadows 部分)控制阴影开始淡出和完全消失的最大距离,从而影响性能和图像质量。

请注意,虽然实时 GI 也会产生柔和阴影,但较之于光照贴图可以实现的精细程度,实时 GI 通常更加粗糙(除非场景非常小)。

性能注意事项

实时 GI 可能会增加内存需求,因为 Enlighten 使用一组额外的光照贴图来存储实时间接反弹光线。

实时 GI 增加了着色器计算,因为 Enlighten 会对另外一组光照贴图和探针进行采样。

优化实时 GI

如果实时 GI 不能对场景光照的变化产生足够迅速的响应,有几种方法可以解决此问题:

  • 降低实时光照贴图分辨率。这样做会使运行时计算量减少,所以光照会收敛得更快。
  • 在 Quality Settings 窗口中,增大 Realtime GI 的 CPU Usage 设置。通过增加 CPU 时间,运行时光照会收敛得更快。副作用是其他系统用于完成工作的 CPU 时间减少。这是否可以接受取决于您的项目。这是根据每个场景而定的设置,因此可根据项目中每个场景的复杂程度来专门指定或多或少的 CPU 时间。
自定义衰减
LOD(细节级别)和实时 GI(全局光照)