Version: Unity 6.0 (6000.0)
言語 : 日本語
ライトプローブからのライトを使用するゲームオブジェクトの設定
ランタイムのライトプローブの移動

複数シーンでのライトプローブのロード

Unity は、シーンをロードまたはアンロードする方法に応じて、ライトプローブのデータを異なる方法で更新します。

Unity は LightProbes C# オブジェクトを使用して、現在ロードされているすべてのシーンのライトプローブデータを保存します。LightProbes オブジェクトには、4 面体テッセレーションと呼ばれる内部データ 構造体が含まれています。Unity は計算に 4 面体テッセレーションを使用して、ライトプローブがゲームオブジェクトをどのように照らすかを決定します。

シーンをロードまたはアンロードすると、Unity は自動的に LightProbes オブジェクトを更新し、現在ロードされているすべてのシーンのすべてのライトプローブの位置と係数を加えます。ただし、Unity が 4 面体テッセレーションを更新するかどうかは、シーンのロード方法とアンロード方法によって異なります。

LoadSceneMode.Single を使用してシーンをロードするときには、新しいライトプローブデータが以前のライトプローブデータを完全に置き換えるため、Unity はロードプロセスの一部として 4 面体テッセレーションを自動的に更新します。

LoadSceneMode.Additiveを使用してシーンをロードするとき、またはUnloadSceneAsync でシーンをアンロードするときには、Unity は 4 面体テッセレーションを自動的に更新しません。これは、新規または削除されたライトプローブデータを再計算する必要があり、計算量が多く、この操作後にロードまたはアンロードするシーンがある可能性があるためです。

そのため、Unity は needsRetetrahedralization イベントを提供し、新しいライトプローブデータを 4 面体化するタイミングを決定できるようにしています。例えば、5 つの新しいシーンを追加ロードする場合、各シーンのロード後に 1 回ずつ、5 回データを 4 面体化することは望ましくありません。代わりに、5 つのシーンすべてがロードされ、新しいライトプローブデータがすべて準備できた後にのみ、データを 4 面体化します。

Unity が古い 4 面体テッセレーションを使用して計算を実行する場合、結果は新しくロードまたはアンロードされたライトプローブを考慮しません。つまり、ライトプローブによるゲームオブジェクトへのライティングが期待通りにならず、LightProbes.CalculateInterpolatedLightAndOcclusionProbes() または LightProbes.GetInterpolatedProbe() の呼び出しが予期しない結果を返す場合があります。

4 面体テッセレーションを強制的に更新するには、LightProbes.Tetrahedralize または LightProbes.TetrahedralizeAsync() を呼び出します。これらの関数は、現在ロードされているすべてのシーンのすべてのライトプローブからのデータで 4 面体テッセレーションを更新します。

4 面体テッセレーションの更新は CPU に負荷がかかり、ライトプローブの数に応じて CPU への影響が増加します。複数のシーンをロード/アンロードしているときに、4 面体テッセレーションの更新によってパフォーマンスに影響が出る場合は、一定量のコンテンツをロード/アンロードするまで、または、CPU がアプリケーションのパフォーマンスに影響するとは考えられなくなる時点まで、更新を遅らせるほうが良い場合があります。

ライトプローブからのライトを使用するゲームオブジェクトの設定
ランタイムのライトプローブの移動