Unity 会根据您加载或卸载场景的方式而以不同方式更新其光照探针数据。
Unity 使用 LightProbes C# 对象为所有当前加载的场景存储光照探针数据。LightProbes
对象包含一个内部数据结构,称为四面体曲面细分。Unity 在其计算中使用四面体曲面细分来确定光照探针照亮游戏对象的方式。
加载或卸载场景时,Unity 会自动更新 LightProbes
对象,以包含所有当前加载的场景中所有光照探针的位置和系数。但是,Unity 是否更新四面体曲面细分取决于加载或卸载场景的方式。
使用 LoadSceneMode.Single 来加载场景时,Unity 将在加载过程中自动更新四面体曲面细分。 使用 LoadSceneMode.Additive 来加载场景,或使用 UnloadSceneAsync 来卸载场景时,Unity 不会更新四面体曲面细分。
如果 Unity 使用过时的四面体曲面细分来执行计算,则结果将不会考虑任何新加载或卸载的光照探针。这意味着光照探针可能无法按预期照亮游戏对象,而且对 LightProbes.CalculateInterpolatedLightAndOcclusionProbes() 或 LightProbes.GetInterpolatedProbe() 的调用可能会返回意外结果。
要强制 Unity 更新四面体曲面细分,可以调用 LightProbes.Tetrahedralize 或 LightProbes.TetrahedralizeAsync()。这些函数使 Unity 使用所有当前加载的场景的所有光照探针中的数据来更新四面体曲面细分。
更新四面体曲面细分是一项 CPU 密集型操作,并且随着光照探针数量的增加,CPU 的负载也会增加。如果要加载和卸载多个场景,并且由于更新四面体细分而对性能产生了影响,那么最好是延迟更新:等到加载或卸载了一定量的内容或者等到 CPU 负载不太可能影响应用程序性能时,再进行更新。