パルテア

どうぶつの森の美術館 〜ゲームエンジン(Unity)グラフィックス ライティング ライトプローブとシーンの読み込み〜

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

Unity は、現在読み込まれているすべてのシーンのライト プローブ データを格納するために、LightProbes C# オブジェクトを使用します。LightProbes オブジェクトには、四面体テッセレーションと呼ばれる内部データ構造が含まれています。Unity は、ライト プローブがゲーム オブジェクトを照らす方法を決定する計算で四面体テッセレーションを使用します。

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

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

LoadSceneMode.Additive を使用してシーンをロードするか、UnloadSceneAsync を使用してシーンをアンロードすると、Unity は四面体テッセレーションを自動的に更新しません。これは、新しいまたは削除されたライト プローブ データを再計算する必要があるためです。これは計算コストの高い操作であり、この操作の後に後続のシーンをロードまたはアンロードする必要がある場合があります。

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

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

Unity に四面体テッセレーションの更新を強制するには、LightProbes.Tetrahedralize または LightProbes.TetrahedralizeAsync() を呼び出します。これらの関数により、Unity は現在読み込まれているすべてのシーンのすべてのライト プローブのデータを使用して四面体テッセレーションを更新します。

四面体テッセレーションの更新には CPU が集中し、ライト プローブの数に応じて CPU への影響が大きくなります。複数のシーンをロードおよびアンロードしていて、四面体テッセレーションの更新によるパフォーマンスへの影響がある場合は、一定量のコンテンツをロードまたはアンロードするまで、または CPU の影響がアプリケーションのパフォーマンスに影響を与えないと思われるまで更新を遅らせると効果的です。

    Course

  • 日時:2024/04/01 ~ 2025/03/31
  • 名称:どうぶつの森の美術館 〜ゲームエンジン(Unity)グラフィックス ライティング ライトプローブとシーンの読み込み〜
  • 場所:オンラインスクール
  • 料金:¥0 (消費税込)