在主菜单栏中,点击Window -> Rendering -> Light Explorer打开光源管理器,这个标签页可以看到场景中所有的光源,包括每个光源的类型,形状,模式,颜色,强度,阴影等信息。
在主菜单栏中,点击Window -> Rendering -> Lighting打开窗口,这个窗口是设置场景级的灯光设置以及环境光和烘焙的灯光贴图等设置。
直接光照(direct light)和间接光照(indirect light)的区别
直接光照:光线被发出后从表面反射一次后直接进入了光感受器(比如眼睛)
间接光照: 最终反射到传感器中的所有其他光,例如多次撞击表面的光以及当您不直接看太阳时来自天空的光。
Unity的全局照明系统(Global Illumination Systems)
全局照明(Global Illumination)是Unity中用来提供给开发者用于创建真实光照效果的一组技术。这些技术称为全局照明的原因是它们同时模拟了直接光照和间接光照,而不是只有直接光照。
在Unity中有两种不同的全局照明系统:Baked Gloabl Illumination System(烘焙全局光照系统)和Realtime Global Illumination System(实时全局光照系统)。
烘焙全局光照系统组成部分
光照贴图计算(Lightmapping):预计算场景中的各个表面的亮度并且存储结果到一个叫做光照贴图(Lightmap)的纹理的过程。全局光照系统使用一个特定的lightmapper系统(Unity - Manual: The Progressive Lightmapper)来完成这个过程。
Light Probes:一种工具,用于测量(或探查-probe)场景中光线穿过空白空间的数据。
Refleciton Probes:一种工具,Unity中用来模拟更多真实的反射效果。
所有渲染管线都支持Baked Global Illumination。
实时全局光照系统组成部分
光照贴图计算(Lightmapping):全局光照系统使用一个已经弃用了的光照贴图器,Enlighten Lightmapper。
Light Probes:一种工具,拥有更多额外的功能。
URP(Universal Render Pipeline)不支持实时全局光照系统。
Unity中的实时光照
在游戏或其他实时应用跑起来的时候,Unity会在运行时计算实时的光照。实时光照会在每一帧计算一次,对于场景中移动的物体和角色的响应性非常好。
我们下面以实际的例子来看看其效果,下图场景中有一个路灯,我们在场景中移动它:
可以看到,在场景中拖动这个路灯时,灯光所能照到的区域内的光照和阴影会实时发生变化。
Unity中的烘焙光照
当场景变得越来越复杂时,实时的光照计算会消耗大量的资源,影响性能。烘焙光照特性能够减轻这个问题的影响,能让较低配置的硬件也能得到不错的效果,它通过在运行前预先计算出光照数据来达到这个效果。这样在运行时能够减少开销,提升性能。
执行计算并保存数据为光照贴图(Lightmap)纹理的过程称为烘焙(baking或lightmapping)。如前面所说,对于烘焙光照的计算,通过一个称为Progressive Lightmapper(Unity - Manual: The Progressive Lightmapper)的光照贴图器系统来实现。
烘焙光照能够提升许多效率,也能被用来实现更加真实和有体验感的光照效果。但预先计算数据也意味着事情不总是能够按你期望的效果发生,除非光源和场景配置成了特定的方式,否则当场景中的物体发生交互时,会产生一些奇怪的效果。
下面还是以一个例子来看看烘焙光照的效果:
可以看到,当使用烘焙光照方式时,光源发生移动后,其光照并没有跟着光源的移动发生变化。如果要在新位置上也能有光照效果,则需要重新烘焙。