原文链接:放置光照探测器
要在场景中放置光照探测器,必须使用一个带Light Probe Group组件的GameObject。可以通过菜单:Component>Rendering>Light Probe Group添加一个Light Probe Group组件。
Light Probe Group可以添加到场景中的任何物体上,但是最好将它添加到一个新建的空GameObject上
Light Probe Group组件
Light Probe Group有编辑模式,可以打开或关闭。要增加、移动或者删除光照探测器,必须将Light Probe Group的编辑模式打开。
Light Probe Group的编辑按钮
在光照探测器的编辑模式中,可以使用与GameObject相似的方式操作每个光照探测器,尽管每个独立的探测器不是GameObject。它们是存储在Light Probe Group组件中的一系列点。
开始编辑一个新的Light Probe Group时,8个光照探测器默认分布在一个立方体的定点上,如下所示:
光照探测器的默认分布
现在可以使用Light Probe Group属性窗口中的控件向group中添加新的探测器位置。场景中的探测器表示为黄色的球体,能使用与GameObject一样的方式定位。也可以选中单个或多个探测器,使用“复制”(ctrl+d)快捷键复制。
选择光照探测器的位置
与一般覆盖物体表面有连续分辨率的光照贴图不一样,光照探测器的分辨率完全由探测器位置的相近程度决定。
为了优化光照探测器存储数据的大小,以及游戏进行时计算量的大小,应该尽可能少的放置光照探测器。但是,也应该根据光照在不同空间的变化放置足够的探测器,以达到你能接收的效果。也就是说在一个复杂或光照对比强烈的区域,需要放置更密集的光照探测器,在关照没有明显变化的区域则要放置较稀疏的光照探测器。
一个简单场景中光照探测器的不同放置密度
上面的例子中,在建筑间对比度高颜色变化变化大的位置,探测器放置地很密。在光照变化不明显地道路上,探测器放置地很稀疏。
放置探测器最简单地方法,时将它们分布到一个常规3D网格形式。虽然这种方法简单高效,但时有可能会消耗不必要地内存,并且由大量冗余的探测器。比如在上面的场景中,如果在道路上放置很多探测器就会浪费很多资源。在整个道路上光照没有太大变化,因此许多探测器会存储与相邻探测器几乎一致的光照。在这种情况下,使用较少较稀疏的探测器来插值光照信息会更高效。
单个光照探测器不存储大量信息。在技术的角度,每个探测器使用L2球谐函数的27的浮点参数,编码采样点视图的一个球星全景HDR图像。但是在一个由数百探测器的场景中,不必要的高密度探测器会导致游戏中大量的内存浪费。
创建一个区块
即使游戏发生在2D平面(比如在道路表面行驶的汽车),光照探测器必须形成3D区块。也就是说探测器集合中,至少由两个垂直”层“的店。
在下面的例子中,左图的探测器被分布在地面的表面上。这将不会得到好的光照效果,因为光照探测器系统不能从探测器中计算出敏感的四面体块。
右图中探测器被分不为两层,一些在地面上一些在高处,因此它们形成了由许多独立四面体一个3D区块。这时一个好的布局。
左图是光照探测器分布的反例,因为探测器定义的区块没有高度。右图是一个光照探测器分布的正确例子
动态GI的光照探测器放置
Unity的实时GI能将移动光照发出的动态反射光投射到静态场景中。同时使用光照探测器,移动的GameObject可以接收移动光照的动态反射光。
因此光照探测器实现两个相近但不同的功能:它们存储静态烘焙光,而在运行时它们表示动态实时全局光照的采样点,影响移动物体的光照。
因此,如果使用动态移动的光照,并且要在移动的GameObject上形成实时反射光,这个功能也许会影响放置光照探测器位置和密度的选择。
在一个很大的区域中,相对变化很小的静态光照,就只需要放置少数探测器:因为光照在很大的区域上没有变化。但是如果要在区域中移动关照,并且GameObject会在场景中移动并接收反射光,就需要一个较高密度的光照探测器,才能得到足够高的光照样式准确度。
放置探测器的密度,需要根据光照的大小和范围,移动的速度,以及需要接收反射光照的移动物体的大小的不同来调整。
光照探测器放置问题
光照探测器位置的选择,必须考虑探测器集合之间的插值的光照。如果探测器不能充分覆盖场景中的光照变化,可能会导致问题。
下面的例子是一个夜晚的场景,在两边有明亮的街灯,道路中间有一片黑暗区域。如果光照探测器只放置在街灯附近,不在黑暗区域放置,街灯的光照会覆盖黑色区域,投射到移动物体。这是因为光照从一个明亮的点向另一个明亮的点插值,而没有中间黑暗区域的信息。
这张图片展示了糟糕的光照探测器放置。在两个街灯中间的黑暗区域没有探测器,因此黑暗区域不会被包含到插值数据。
如果使用实时或者混合光照,这个问题可能不明显,因为只有间接光照会跨越黑暗区域。如果完全使用烘焙光照,这个问题就会很明显。因为这种情况下移动物体上的直接光照也是使用光照探测器插值得到。在这个例子场景中,两个街灯是烘焙的,因此移动物体从光照探测器获取直接光照。这是可以看到这种结果:一个移动的物体(救护车)穿过黑暗区域时仍然是明亮的,并不是想要的效果。黄色的四面体线框显示了当前的插值,从一端明亮的街灯到另一端明亮的街灯。
这不是期望的效果:因为没有在黑色区域放置光照探测器,救护车穿过黑色区域时仍然是明亮的。
向下面这张在黑暗区域放置更多探测器,可以解决这个问题:
现在在场景的黑暗区域也有探测器。结果就是,移动的救护车会在从场景一端移动到另一端时会使用低亮度的光照。
救护车现在和期望的一样,在场景中间时使用了低亮度的光照。
- 2017-06-08发布,没有编辑审查
- 在5.6中更新了光照探测器