Version: 6000.3
语言: 中文
将游戏对象设置为使用光照探针中的光源
在运行时移动光照探针

在多个场景中加载光照探针

Unity 更新其光源探针光源探针存储有关光线如何穿过场景中的空间的信息。在给定空间中排列的光源探针集合可以改善移动对象的光照和该空间内的静态LOD场景。更多信息
请参阅术语表
数据因加载或卸载方式而异场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息
请参阅术语表
.

Unity 使用 LightProbes C# 对象来存储所有当前加载的场景的 Light Probe 数据。这LightProbes对象包含称为四面体细分的内部数据结构。Unity 在其计算中使用四面体细分来确定光照探针如何游戏对象Unity 场景中的基本对象,可以表示角色、道具、风景、相机、航路点等。游戏对象的功能由附加到它的组件定义。更多信息
请参阅术语表
.

当您加载或卸载场景时,Unity 会自动更新LightProbes对象,以包含所有当前加载场景中所有光照探针的位置和系数。但是,Unity 是否更新四面体曲面细分取决于您加载或卸载场景的方式。

当您使用 LoadSceneMode.Single 加载场景时,Unity 会在加载过程中自动更新四面体细分,因为新的光探针数据会完全替换以前的光探针数据。

当您使用 LoadSceneMode.Additive 加载场景,或使用 UnloadSceneAsync 卸载场景时,Unity 不会自动更新四面体细分,因为需要重新计算新的或删除的光探针数据 - 这是一项计算成本高昂的作,并且在此作之后可能需要加载或卸载后续场景。

因此,Unity 提供了 needsRetetrahedralization 事件,允许您决定何时对新的光探针数据进行四面体化。例如,如果您要加法加载五个新场景,则您不希望将数据重四面体化五次,每个场景加载后一次。相反,你只想在所有五个场景都加载完毕并且所有新的光探头数据都准备就绪后再四面体化数据。

如果 Unity 使用过时的四面体细分执行计算,则结果不会考虑任何新加载或卸载的光照探针。这意味着光照探针可能无法按预期点亮游戏对象,并且调用 LightProbes.CalculateInterpolatedLightAndOcclusionProbes()LightProbes.GetInterpolatedProbe() 可能会返回意外结果。

要强制 Unity 更新四面体细分,您可以调用 LightProbes.TetrahedralizeLightProbes.TetrahedralizeAsync()。这些函数会导致 Unity 使用来自所有当前加载场景的所有光照探针的数据更新四面体细分。

更新四面体细分需要大量使用CPU,并且CPU的影响会随着光照探针的数量而增加。如果你正在加载和卸载多个场景,并且更新四面体曲面细分会对性能造成影响,那么延迟更新可能会有所帮助,直到你加载或卸载了一定数量的内容,或者直到CPU影响不太可能影响应用程序的性能。

将游戏对象设置为使用光照探针中的光源
在运行时移动光照探针