Unity は、シーンをロードまたはアンロードする方法に応じて、ライトプローブのデータを異なる方法で更新します。
Unity は LightProbes C# オブジェクトを使用して、現在ロードされているすべてのシーンのライトプローブデータを保存します。LightProbes
オブジェクトには、4 面体テッセレーションと呼ばれる内部データ 構造体が含まれています。Unity は計算に 4 面体テッセレーションを使用して、ライトプローブがゲームオブジェクトをどのように照らすかを決定します。
シーンをロードまたはアンロードすると、Unity は自動的に LightProbes
オブジェクトを更新し、現在ロードされているすべてのシーンのすべてのライトプローブの位置と係数を加えます。ただし、Unity が 4 面体テッセレーションを更新するかどうかは、シーンのロード方法とアンロード方法によって異なります。
LoadSceneMode.Single を使用してシーンをロードすると、Unity はロードプロセスの一部として 4 面体テッセレーションを自動的に更新します。 LoadSceneMode.Additive を使用してシーンをロードする場合、または UnloadSceneAsync を使用してシーンをアンロードする場合、Unity は 4 面体テッセレーションを更新しません。
Unity が古い 4 面体テッセレーションを使用して計算を実行する場合、結果は新しくロードまたはアンロードされたライトプローブを考慮しません。つまり、ライトプローブはゲームオブジェクトを期待通りのライティングを与えず、LightProbes.CalculateInterpolatedLightAndOcclusionProbes() または LightProbes.GetInterpolatedProbe() を呼び出すと予期しない結果が返される場合があります。
4 面体テッセレーションを強制的に更新するには、LightProbes.Tetrahedralize または LightProbes.TetrahedralizeAsync() を呼び出します。これらの関数は、現在ロードされているすべてのシーンのすべてのライトプローブからのデータで 4 面体テッセレーションを更新します。
4 面体テッセレーションの更新は CPU に負荷がかかり、ライトプローブの数に応じて CPU への影響が増加します。複数のシーンをロード/アンロードしているときに、4 面体テッセレーションの更新によってパフォーマンスに影響が出る場合は、一定量のコンテンツをロード/アンロードするまで、または、CPU がアプリケーションのパフォーマンスに影響するとは考えられなくなる時点まで、更新を遅らせるほうが良い場合があります。