实时光照

35 篇文章 0 订阅

原文链接:实时光照

实时光照是指将Mode设置为Realtime光照组件
要在游戏中通过脚本改变属性或者用脚本来生成的光需要使用Realtime模式。Unity在运行时的每一帧计算并更新这些光照。它们可以响应玩家的动作,以及场景中发生的事件。比如可以切换它们的开关状态(像闪光一样),改变它们的位置(像在黑暗房间中移动的火炬),改变它们的颜色亮度之类的属性。
实时光照在static和dynamic的GameObject上都能照明并且投射真实的光影。它们投射阴影的距离可以用Shadow Distance(Edit > Project Settings > Quality)属性设置。
也可以把实时光照和Realtime GI组合起来,这样它们就可以在场景中的静态和动态GameObjects上贡献间接光(光探测器)。

和实时GI一起使用实时光照

在Unity中,实时光照和Realtime GI的是最灵活且效果最真实的光照组合。在光照窗口中勾选Realtime Global Illunimation启用Realtime GI。
启用Realtime GI后,实时光照能向场景中同时贡献直接光和间接光。用这个组合来表现场景中缓慢改变的光源,能够达到非常好的视觉效果。比如天空中慢慢移动的太阳,在封闭的走廊里缓慢晃动的灯光。场景中快速变化的灯光或特效不需要使用Realtime GI,因为得到的效果不值得造成系统延迟。
注意Realtime GI比不太复杂的Baked GI需要的系统资源多很多。Unity中的全局光照由一个叫Enlighten的中间件管理,Enligten本身是需要消耗资源的(系统存储和CPU)。更多信息请查看文档全局光照
Realtime GI适合中高端PC以及PS4、Xbox One这些当代游戏终端上的游戏。有些高端的移动设备也能够使用这个组合,但是需要控制场景大小和实时lightmaps的分辨率以节省系统资源。
可以在光照组件中,将Indirect Multiplier设置为0,以禁用特定光照的Realtime GI效果。也就是说这个光照不向场景中贡献间接光。在光照窗口中,取消选中Realtime Global Illumination可以禁用所有的Realtime GI

同时使用实时GI和实时光照的缺陷

  • 由于存储Enlighten光照系统生成的实时间接光需要额外的低分辨率real-time lightmaps,增加了内存需求。
  • 由于需要采样额外的realtime lightmaps以及存储Enlighten光照系统生成的实时反射光的探测器,增加了着色器的计算量。
  • Indirect lighting converges over time,所以光照的属性变化不能太突兀。自适应的HDR也许能处理这个问题,更多信息请参考Unity Post Processing Stack

技术细节

对于实时光照(在光照组件中将Mode设置为Realtime的光照),光线从物体表面到光源的最后一部分(传播路径中的一段)是不预处理的。也就是说光照可以在场景中移动,也可以改变颜色和亮度这些视觉属性。更多关于传播路径的信息参考文档在Unity中使用Enlighten
如果光照投射阴影,那么场景中动态和静态的GameObject都会渲染到光照的shadow map。静态和动态的GameObject的Material Shaders都会对shadow map进行采样,因此它们互相投射实时阴影。Shadow Distance控制阴影开始淡出终完全消失的最远距离,这个设置会影响性能和图像质量。
如果Realtime GI没有启用,实时光照只对场景中的静态和动态物体计算直接光。启用Realtime GI后,Unity使用Enlighten预处理静态GameObejcts的表面到表面的光线路径。
alt text
预处理**Realtime GI模式,Unity只会预处理表面到表面的信息。
最后的一段光线(也就是从表面到光源的那一段)不属于预处理过程。存储的信息只包括表面是否被照射,接着后面的表面以及探测器也被照射,以及不同光照的亮度。有一个Enlighten运行时期间在CPU上根据实时光照信息迭代更新的独立低分辨率实时lightmaps集。因为这个迭代过程计算量很大,它的计算过程会延续几帧。也就是说实时光在场景中静态物体间的反射会延迟几帧才能完成,实时的lightmap和光照探测器会融合最终的结果。
对于属性变化缓慢的光照(如划过天空的太阳),这个问题影响很小。但是对于快速变化的灯光(比如闪烁的灯泡),迭代计算的Realtiem GI就会显得不合适。快速变化的光照不能显著的形成反射光,那么用实时全局光照进行计算也就没有意义了。
有些办法能够处理这个问题。一种是减小实时lightmap的分辨率。因为这样在运行时需要的计算亮更小,光照效果能更快地融合到环境中。另一个办法是增加Realtime GI运行时地CPU Usage设置。提供更多地CPU计算时间后,运行时融合会更快。损失就是其他部分能够使用的CPU时间会变少。这种办法是否可行取决于具体的项目。注意这个设置是针对场景的,可以根据项目中每个场景的复杂情况分配更多或更少的CPU时间。
尽管Realtiem GI对单独场景的所有实时光照生效,仍然可以让某个实时光照不被Realtime GI处理。将光照组件的模式设置为实时,并且将indirect multiplier设置为0,移除所有间接光反射即可。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值