实时光源是 Mode 属性设置为 Realtime 的光源组件。
对于需要更改属性或在游戏过程中通过脚本生成的光源,请使用 Realtime 模式。Unity 在运行时每帧计算并更新这些光源的光照。这些光源不会因为玩家所采取的动作或场景中发生的事件而更改。例如,您可以将这些光源设置为打开和关闭(如闪烁光源),更改其变换(如带着穿过暗室的火炬),或更改其视觉属性(如颜色和强度)。
实时光源在静态和动态游戏对象上产生光照并投射逼真的阴影。这些光源在__阴影距离 (Shadow Distance)(菜单:__Edit > Project Settings__,然后选择 Quality__ 类别)内投射阴影。
还可将实时光源与__实时全局光照__(__实时 GI__)组合在一起,从而为静态和动态游戏对象提供间接光照。
实时光照与__实时 GI__ 的组合是 Unity 中最灵活且逼真的光照方案。要启用实时 GI,请打开 Lighting 窗口(菜单:__Window__ > Rendering > Lighting Settings__),然后勾选 Realtime Global Illumination__。
启用__实时 GI__ 后,实时光源会为场景提供间接光照以及直接光照。如果光源会缓慢变化并对场景具有很高的视觉影响(例如在天空中移动的太阳,或者在封闭的走廊中缓慢闪烁的光源),请使用此组合方案。对于快速变化的光源或对于特殊效果,不需要使用__实时 GI__,因为系统的延迟使这样的开销不值得。
请注意,与不太复杂的__烘焙 GI__ 相比,__实时 GI__ 将使用大量的系统资源。全局光照由 Unity 中的一个名为 Enlighten 的中间件进行管理;此中间件有其自身的开销(系统内存和 CPU 周期)。请参阅有关全局光照的文档以了解更多信息。
实时 GI 适用于面向中端到高端 PC 系统的游戏以及面向 PS4 和 Xbox One 等最新款游戏主机的游戏。一些高端移动设备也可能足够强大到能够使用此功能,但应保持场景较小且实时光照贴图的分辨率较低,从而节省系统资源。
要禁用__实时 GI__ 对特定光源的影响,请选择光源游戏对象,然后在光源组件中将 Indirect Multiplier 设置为 0。这意味着该光源不会提供任何间接光。要完全禁用__实时 GI__,请打开 Lighting 窗口(菜单:__Window__ > Lighting > Settings__),然后取消勾选 Realtime Global Illumination__。
由于需要使用额外的一组低分辨率实时光照贴图来存储由 Enlighten 光照系统计算的实时间接反弹光线,因此增加了内存需求。
由于需要采样额外的一组实时光照贴图并使用探针来存储由 Enlighten 光照系统计算的实时间接反弹光线,因此增加了着色器计算需求。
间接光照会随着时间的推移而收敛,因此属性变化不能太突然。自适应 HDR 色调映射可能有助于隐藏此问题;要了解更多信息,请参阅 Unity 后期处理栈 (Asset Store)。
对于实时光源(即 Mode 设置为 Realtime 的光源组件),不会预先计算从表面到光源的最后一段发射光线(或路径段)。这意味着光源可在场景中移动,并改变颜色和强度等视觉属性。请参阅在 Unity 中使用 Enlighten (Using Enlighten in Unity) 的相关文档,了解有关路径段的更多信息。
如果光源也投射阴影,则场景中的动态和静态游戏对象都会渲染到光源的阴影贴图中。此阴影贴图由静态和动态游戏对象的材质着色器进行采样,以便它们相互投射实时阴影。阴影距离 (Shadow Distance)(菜单:__Edit__ > Project Settings__,然后选择 Quality__ 类别,并导航到 Shadows 部分)控制阴影开始淡出和完全消失的最大距离,从而影响性能和图像质量。
如果未启用__实时 GI__,则实时光源仅计算动态和静态游戏对象上的直接光照。如果启用__实时 GI__,则 Unity 将使用 Enlighten 预先计算静态游戏对象的表面到表面光路。
预计算实时 GI (Precomputed Realtime GI) 模式:Unity 仅预先计算表面到表面的信息
最后一个路径段(即从表面到光发射器的路径段)不是预计算的一部分。存储的唯一信息是,如果表面接受光照,则随后的表面和探针也接受光照,还有各种光照的强度。有一组独立的低分辨率实时光照贴图由 Enlighten 在运行时使用实时光源的信息在 CPU 上进行迭代更新。因为这一迭代过程是计算密集型任务,所以分成多个帧。换句话说,此过程需要多个帧,直到光线完全反射到场景中的静态元素上,并且实时光照贴图和光照探针已经收敛到最终结果。
对于属性缓慢变化的光源(例如在天空中移动的发光的太阳),这不会造成问题。但是,对于属性快速变化的光源(例如闪烁的灯泡),__实时 GI__ 的迭代特性可能证明不合适。属性快速变化不会明显记录到发射光系统中,因此将它们包含在计算中是没有意义的。
有几种方法可以解决这个问题。一种方法是降低实时光照贴图分辨率。因为这样做会使运行时计算量减少,所以光照会收敛得更快。另一种方法是为__实时 GI__ 运行时增大 CPU 使用率 (CPU Usage) 设置。通过增加 CPU 时间,运行时收敛得更快。副作用当然是其他系统完成工作的 CPU 时间减少。这是否可以接受取决于每个项目。请注意,由于这是根据每个场景而定的设置,因此可根据项目中每个场景的复杂程度来专门指定或多或少的 CPU 时间。
即使__实时 GI__ 是根据每个场景针对所有实时光源启用的,仍然可以在__实时 GI__ 中单独排除个别实时光源。要实现此目的,请将光源组件的 Mode 设置为 __Realtime__,并将其间接乘数 (indirect multiplier) 设置为 0,从而消除所有间接光贡献。
2017–06–08 页面已发布
在 5.6 版中添加了“光照模式”
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.