Version: Unity 6.0 (6000.0)
语言 : 中文
设置游戏对象为使用光照探头的光线
在运行时移动光照探针

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

Unity 会根据您加载或卸载场景的方式而以不同方式更新其光照探针数据。

Unity 会使用 LightProbes C# 对象为所有当前加载的场景存储光照探针数据。LightProbes 对象包含的内部数据结构被称为四面体曲面细分。Unity 会在计算时使用四面体曲面细分来确定光照探针照亮__ GameObject__Unity 场景中的基础对象,可以表示角色、道具、风景、摄像机、路径点等。GameObject 的功能由所附的组件决定。更多信息
See in Glossary
的方式。

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

使用 LoadSceneMode.Single 加载场景时,Unity 会在加载过程中自动更新四面体曲面细分,因为新的光照探针数据会完全取代之前的光照探针数据。

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

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

如果 Unity 使用过期的四面体曲面细分来执行计算,则结果将不会将任何新加载或卸载的光照探针计算在内。这意味着光照探针可能无法按预期照亮 GameObject,且对 LightProbes.CalculateInterpolatedLightAndOcclusionProbes()LightProbes.GetInterpolatedProbe() 的调用可能会返回非预期的结果。

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

更新四面体曲面细分会占用大量 CPU 资源,且光照探针数量越多,对 CPU 得影响越大。如果要加载和卸载多个场景,并且预计更新四面体曲面细分会影响性能,那么最好延迟更新:等到加载或卸载了一定量的内容或者等到 CPU 负载不太可能影响应用程序性能时,再进行更新。

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