Unity Lighting -- 使用Light Probes

什么是动态物体(dynamic objects)

        到目前为止的例子中,我们场景中的所有东西都是静止的。但在实际的游戏或实时应用中,场景中有移动的物体很正常,比如走动的人或动物,汽车,飞机等,它们需要和灯光产生实时的交互,才会让游戏或实时应用看起来更加真实。

        首先我们来看一个场景中烘焙光照和实时光照对动态物体的影响。

        在场景中增加一个球体,我们拖动球体到烘焙光照方式的光源下:

         然后拖动物体到实时光照方式的光源下:

        可以看到,烘焙光照下的光源,球体并没有被光照影响,如果游戏中出现这张的效果,会让用户感到不失真。为什么会这样?因为当我们烘焙出了光照贴图时,我们存储的是场景中光源所照亮的静态表面的一张快照。这些光线并不会在这些表面上继续发出更多的光线。当一个动态物体进入到烘焙光照的区域时,渲染器需要知道物体所处空间的光源的信息才能计算出光照和阴影。

        在Unity中为了解决这个问题,需要使用一个工具:Light Probes

什么是Light Probes

        Light Probes可以用来测量(meaure or probe)场景中穿过空白区域的光线信息。在运行时,场景中移动的物体所被打到的光线,通过离物体最近的Light Probe的数据来做估计。

        我们可以用Light Probes来让烘焙光照更加真实,并且在实际项目中,相比于real-time的光源,它们也更加高效,当然,前提是需要正确地放置Light Probes。

Light Probes要怎么放置?

        在实践之前,我们首先需要了解一些放置Light Probe的方法。

        Light Probes通过Light Probe Group来组织。在Light Probe Group中的每一个Light Probe会测量空间中自身和其周围的Light Probe的光线。最简单的Light Probe Group的排布方式是让所有Light Probe组成一个网格,这个网格放到你想要测量光线的空间区域里。这个网格至少要有两个垂直的层次,因此它被称为3D volume(3D体积)。

        下图是一个由8个Light Probe组成的Light Probe Group,被组织成了一个立方体形状的3D体积空间:

         当我们创建一个Light Probe Group时,在3D volume中就已经包含了八个独立的Light Probe。我们可以赋值和摆放Light Probe Group来创建3D网格。

        在Light Probe Group的Inspector中,有四个按钮:

         Add Probe:增加Light Probe

        Select All: 全选所有Light Probe

        Delete Selected:删除所选Light Probe

        Duplicate Selected:赋值所选Light Probe

        对于有强烈光照变化或其他要突出的焦点的区域,我们可以将Light Probes排布地更加密集一点。这样做虽然会更复杂,但能将场景的光照优化地更好。

        Light Probes是非常有用的工具,但其最佳的放置位置取决于场景中有什么,以及是如何配置灯光的。在一个项目中,其摆放位置会进过多次迭代验证,以便调整到最佳效果。

在场景中放置Light Probes

        1. 在Hierarchy窗口中,添加一个Light Probe Group(Add(+) -> Light -> Light Probe Group)

        2. 选中新建的Light Probe Group。调整一下缩放比例,放大并将其移动到我们要放置Light Probe的区域。这里要注意确保其最高的一层Light Probes的高度要覆盖到光源的位置。另外还有一点非常重要,一定要确保Light Probes的最下面的一层的高度要在地面以上。如果这一层低于地面,则这些Light Probes无法捕获到来自地面上的光线,会导致错误的结果发生。

         3. 在Inspecotr中,选择Edit Light Probes

        4. 选择Select All然后选择Duplicate Selected

        5. 将复制的Light Probes移动到当前网格的右侧

        6. 用同样的方法,将我们需要覆盖的区域都覆盖上(自由发挥即可)  

         7. 完成Light Probes摆放后,在Lighting窗口中点击Generate Lighting选项(不清楚的朋友请看前面关于烘焙光照的笔记),等完成后,再看看烘焙灯光下的小球有没有变化。

 探索更多定义可定制的lightmap选项

        在Lighting(Window -> Rendering -> Lighting)窗口的Scene标签页中,尝试对Lightmapping Setting下拉菜单中的各种属性进行修改,来看看有什么效果。下面列举几个比较有趣的属性:

        Max Bounces:间接光中的光线最大弹射次数

        Lightmap Resolution:光照贴图的分辨率,这个值会直接影响光照贴图的质量。增加这个值会让光照贴图更加细腻,但同时会增加generate lighting的时间

        Albedo Boost:材质反射率增强系数,可用于加量材质本身的颜色

        Indirect Intensity:控制间接光的亮度

检视场景的Light Probes的工具

        Unity Editor有一系列诊断视图和工具用来检视和评估场景的光照状态。

        在Light Explorer窗口和诊断视图检查Light Probes的方法:

        1. 打开Light Explorer窗口(Window -> Rendering -> Light Explorer)

        2. 选择Light Probes标签页,可以查看场景中的Light Probes的状态

         3. 在Scene窗口的控制栏中,点击Draw Mode下拉菜单(左上角的箭头),选择Contributor/Receivers(在Global Illumination里)

         随后场景中会用不同颜色来表示场景中哪些是光线的贡献者,哪些是接受者。

         简单说一下三种不同颜色表示的意义:

        黄色: GameObject没有被设置为Static,不会在lightmap计算中产生任何贡献(颜色或光线)。它会接收场景中Light Probes的光线数据。

        蓝色:GameObject包含在lightmap计算中,它接收来自场景lightmap的光线数据。这是完全烘焙的游戏物体的标准状态。

        红色:GameObject包含在lightmap计算中,它接收来自场景中Light Probes的光线数据。

猜你喜欢

转载自blog.csdn.net/vivo01/article/details/129417621