使用预计算实时全局光照优化照明-布置光照探针

本文地址:https://blog.csdn.net/t163361/article/details/123909115
翻译说明:
教程翻译主要用谷歌翻译后,对特别不通顺的地方进行了微调。同时针对一些比较重要的地方保留了英语或英语和汉语同时存在的方式。

教程目录

布置光照探针

中级 1 小时

摘要

在本教程中,您将设置光照探针以照亮小对象,并缩短预计算时间。

1. 概述

既然您知道场景中图(Charts)的数量对预计算时间是有害的,那么您将能够通过选择从预计算中完全排除某些对象来大幅提高照明性能。 这将减少生成的图(Charts)数量。 但是你应该如何照亮这些物体呢?
探针照明是从场景接收间接照明的有效方法。 尽管探探针照明的物体不会对场景产生反射照明,但这通常不会产生明显的影响。 最适合探测照明的物体往往是较小的物体,无论如何对反射照明几乎没有影响。

2.什么是探针照明?

探针照明是一种在游戏等实时渲染应用程序中近似光照的快速技术。它通常用于照亮游戏世界中的角色和其他非静态(动态)对象。探针照明在运行时非常高效,并且具有快速预计算的额外好处。
探针照明的工作原理是在 3D 空间中的特定点对入射照明进行采样,并使用称为球谐函数的数学函数在球体上编码此信息。这些系数具有较低的存储成本,然后可以在游戏过程中快速“解包”,并由场景中的着色器用于近似表面光照。在 Unity 中,此功能由 Light Probes 提供。
探针照明限制
使用探头照明有一些限制。一个这样的限制是很难在不增加这些特殊数字的顺序(大小)的情况下表示整个球面范围内的高频或斑点照明。不幸的是,随着精度的提高,成本会迅速增加,这意味着出于性能原因,您只能使用低阶球谐函数。
事实上,对于世界上的一个 3D 位置,您只能有一个球面的光照表示,这使得探测光照不适合表示可能会出现大量光照变化的非常大的对象的光照。
另一个限制是 - 由于球谐函数在球体上编码值 - 它们通常不适合大型平面物体或具有显着凹度的物体。
**注意:**如果您正在考虑对大型对象使用探针照明,Unity 手册提供了一些有关 Light Probe Proxy Volumes (LPPV) 的信息
使用探针照明进行优化
尽管存在这些限制,但当与合适的较小凸面物体一起使用时,探测照明将以相对较低的成本产生合适的令人信服的结果。在本教程的后面部分,您将更深入地探索 Light Probes 的设置和布置。现在,您只需要知道可以通过在适当的地方使用探针照明来减少场景中的光照贴图图(Charts)的数量。

3.选择用探针照亮哪些物体

虽然将 Environment 组下的 GameObjects 设置为 Static 以进行照明设置非常有用,但在此父级下有许多对象可以作为探针照明的良好候选者。清除这些对象的静态标志将意味着 Unity 的预计算实时 GI 系统不再考虑它们,因此光照贴图图(Charts)的数量将减少。请记住:减少场景中图(Charts)的数量是提高预计算时间的关键。例如,小的、凸出的碎片物体是探针照明的完美案例。
在这里插入图片描述
回顾Environment游戏对象
让我们在 Hierarchy 窗口中检查 Environment游戏对象的子项。
如果您回顾归类为道具的对象,您会发现其中许多是小型碎片式对象和场景“装饰”,例如石头、水桶和木板。这些对象很多,其中许多相对较小的对象很难展开。获得没有失真的光照贴图 UV 很可能会导致大量 UV 壳(shells)。更多的 UV 壳(shells)需要额外的图表(Charts),更多的图表(Charts)意味着需要计算更多的光照贴图纹素,等等。
鉴于这些物体非常小,它们不太可能对场景中的间接照明做出太大贡献。同样,它们的大小意味着可以显示详细照明变化的表面积很小。这使得这些物体成为探针照明的绝佳候选者。由于减少了需要存储在内存中和在着色器中解码的光照贴图数量,不仅您的预计算时间会受益,而且运行时的性能也会得到改善。

4.从预计算中删除道具

要从预计算中删除道具GameObjects:

  1. 在 Hierarchy 视图中选择 Props 游戏对象。
  2. 在 Inspector 中,禁用 Static 属性。
  3. 当出现提示时,选择Yes, change children
    此时,如果您将预计算保留足够长的时间,您最终会在Scene视图中看到光照结果。您可能会注意到,探针照明的非静态对象的照明方式与其周围的对象不同,并且与场景的照明不匹配。
    这是因为您尚未设置 Light Probes,因此这些对象会退回到场景的 Ambient Probe。 Ambient Probe 本质上是场景中的一个隐藏探针器,对用户不可见,它仅对 Lighting 窗口中设置的 Ambient Source 进行采样。
    在这里插入图片描述
    例如,这些桶展示了非静态物体在没有光照探针的情况下如何在其环境中显得格格不入。
    为了将非静态对象更令人信服地放置在其光照环境中,您需要花一些时间在场景周围布置 Light Probe,以便对整个世界的间接光照进行采样。

5.布置光照探针简介

非静态对象根据与附近探针的接近程度接收光照。通过将光照探针之间的空间划分为四面体体积(volumes),然后检查给定对象属于哪个四面体,可以决定从哪个探针中“读取”对象。为了制造这些四面体,必须放置(positioned)探针,以便它们创建 3D 体积(volume)或笼子。

显示光照探针布置的场景 - 在编辑器中显示为光照球体。
探针照明在运行时相对便宜,并且可以快速进行预计算。但是,为了最大限度地提高性能,您在布置探针时确实需要小心。尽管设置起来更快,但密集的光探针网格排列可能会造成浪费,因为这些探针中的许多不会在当地照明条件下采样太多变化。
为了提高效率,更好的做法是在照明发生明显变化的区域周围以更大的密度布置探头。例如,这可能包括从光到阴影的过渡区域,或者可能存在由光反射产生的强烈颜色的区域。

6.设置和布置光照探针

让我们开始在场景中设置和布置Light Probe:

  1. 从 GameObject 菜单创建一个 Light Probe Group(顶部菜单:GameObject > Light > Light Probe Group)。现在您可以开始布置探针了。
  2. 在 Hierarchy 中,选择新创建的 Light Probe Group。
  3. 在 Inspector 中,选择 Light Probe Group 组件中的 Edit Light Probes在这里插入图片描述
  4. 您可以在Scene视图中选择探针本身。从创建的默认立方体排列中删除除一个角探针之外的所有角探针。
  5. 将剩余的探针布置在环境中地形的正上方,然后按 Ctrl+D(在 macOS 上为 Cmd+D)复制它。
  6. 使用平移工具 (W),将第二个探针在 Y 轴上向上移动到第一个探针上方约 2 米处。
  7. 现在再次复制探针并将新副本移动到更高的位置,可以在 Y 轴上再向上移动 5 米。
    创建这样一个垂直排列的原因是,您可以采样从地面、头部高度周围以及空中反射的间接照明(物体可能离开地面)。当您在场景周围复制这些 Light Probe 以创建体积(volumes)时,您需要确保可播放区域中任何位置的对象都将落入在探针之间创建的四面体之一内。这些体积(volumes)可视化为在探针之间绘制的洋红色线。

7.将光照探针布置在感兴趣的区域

确定感兴趣的领域
花点时间确定场景中的感兴趣区域。在决定什么是照明感兴趣区域时,请寻找阴影区域,或者可能是地形材质颜色发生强烈变化的区域。请记住,您的目标是在整个场景中采样间接(或反射)照明。为了证明添加新探针的成本是合理的,您必须确保它对照明的一些明显变化进行采样。
如果您使用 Light Probes 对具有一般或一致照明的区域进行采样,那么当接收对象通过这些探针时,您不太可能看到太大的变化。与游戏优化的许多方面一样,您必须确保场景中包含的每个项目都提供一些收益。
复制并布置光照探针
要点亮您已确定的感兴趣区域:

  1. 通过按住 Shift 键并单独单击每个探针或拖动选择来选择您刚刚创建的所有三 (3) 个探针。
  2. 复制您创建的整个垂直链并将其移动到场景中感兴趣的照明区域附近。
  3. 继续重复此过程,在照明变化区域周围以更大的密度布置探针,直到创建一个包含可玩区域的稀疏笼布局。
    重要提示:在定位探头时,请务必检查最底部的 Light Probe 是否刚刚离开地面。
    回顾示例
    在示例 LightingTutorialOptimal 场景中,我们创建了两组 Light Probe:
    VillageLightProbeGroup,用于更密集的村庄区域
    ExtentsLightProbeGroup,为村外的稀疏非可玩区域调用
    第二组还涵盖了游戏世界的范围,以防任何非静态网格渲染器离开可玩区域。我们不需要在场景中这些无法到达的部分具有相同程度的保真度,因此该组可以不那么密集。垂直轴上的两个探头就足够了。
    将 Light Probe Group 拆分为两个 GameObject 可以更轻松地定位探针。在场景中工作时,可以启用或禁用单个光探针组以提供更清晰的视图。这些组将在运行时自动组合在一起,并通过重复数据删除流程,删除任何重叠探测。

8.回顾你的结果

要查看根据环境点亮的 Light Probe,您必须等待照明预计算完成。 如果在 Lighting 窗口中启用了 Auto Generate 模式,这将自动发生。 如果未启用自动生成模式,则必须通过导航到 Lighting 窗口(Window > Rendering > Lighting Settings)并选择 Generate Lighting 按钮来手动开始预计算。
一旦这个过程完成,你会注意到场景中的非静态游戏对象现在从Light Probes中读取信息,并且看起来与场景照明更匹配。要查看处于点亮状态的Light Probes,请在Hierarchy视图中取消选择Light Probe Group。
现在你已经在场景中设置了Light Probes,你可以在较小的“道具”对象上获得间接照明的视觉优势,而无需在预计算中添加额外的图表。

9.下一个步骤

在本教程中,你使用了光照探针来减少场景中图表的数量。但是还有更多的事情要做——接下来,你将通过优化UV展开来减少剩余的图表数量。

下一篇 优化实时光照贴图

猜你喜欢

转载自blog.csdn.net/t163361/article/details/123909115