Unity 6でグローバルイルミネーションをワールドに適用する新しい方法

今年後半にUnity 6に搭載される新しいライティング機能の詳細をお伝えできることを嬉しく思います。
新しく堅牢な ライト・ベイキング・アーキテクチャと 、アダプティブ・プローブ・ボリューム(APV)を使用したライト・プローブ・ライト環境のオーサリングの革新的なアプローチにより、より合理的なライト作成プロセスをお楽しみいただけます。これにより、実行時の高いパフォーマンスを確保しながら、ビジュアルを大幅に向上させることができる。
Adaptive Probe Volumeは、Unity が Scene 内のジオメトリ密度に基づいて自動的に配置するライトプローブのグループで、焼成された間接照明を構築します。

APVはその適応的な性質により、ジオメトリの多いエリアではより密集したプローブを生成し、シーンの背景のようにオブジェクトが密集していないエリアではプローブを少なく生成する。
アダプティブプローブボリュームは、美しく照明された環境をオーサリングするための強力な機能一式も提供します。
- プローブ配置ワークフローの簡素化と、ライトプローブベースの間接拡散照明の高速化を 実現。
- APVのピクセル単位のライティングは、ライトプローブグループよりも大幅に高品質で、ライトマップよりも優れた指向性を提供するため、全体的に優れたライティング品質が得られます。
- HDRPのVolumetric Fogや、URPと HDRPのVFX Graphパーティクルのようなエフェクトを間接照明で美しく照らし、アトモスフェリックとシームレスに統合します。
- スカイオクルージョンと ライティングシナリオにより、時間帯や照明のオン/オフの状況に応じて、視覚的に美しい照明の切り替えが可能。
- レンダーパイプラインとターゲットハードウェアの使用状況に応じて、ランタイムパフォーマンスの最適化をよりコントロールできるようになります。
- ストリーミング機能一式を実行し、ライトプローブのデータをディスクからCPUへ、CPUからGPUへストリーミングできる。
- 光漏れを軽減するための強力なツールセットを提供。

URP 3D サンプル・プロジェクトは現在、最新の2022 LTS 機能を使用しています。
このブログ記事では、デモンストレーションのために、URP 3Dサンプルシーンを2022 LTSからUnity 6 Previewにアップグレードし、Adaptive Probe Volumes機能を使用しています。

APVは、プローブを手作業で配置するのではなく、自動で配置する体積ベースのシステムである。
APVの一般設定タブでは、Min、Max Probe Spacingなどのパラメータを制御し、周囲のジオメトリに基づいて複数の細分化レベルを作成することができます。デフォルトでは、ジオメトリが密集しているエリアは最も高い解像度が使用され、ジオメトリが少ないエリアはより低い密度レベルが使用されます。この自動的かつ適応的な動作により、リソースを最も必要とされる分野に集中させ、効率的なリソースの割り当てが可能になる。

プローブを自動的に生成するには、Adaptive Probe Volumeを作成します。作業中にライブアップデートを確認できるため、ベーキングを行わずにプローブの配置をプレビューできます。これらの更新は、レンガと以前に定義したサブディビジョンレベルに基づいて行われ、近くのジオメトリの近さに応じて調整されます。

Generate Lighting(ライティングの生成)は、ライトプローブを含むすべてのライティングデータを事前に計算します。レンガを使ったプレビューでは、プローブを配置する際に適用されたさまざまな細分化レベルを見ることができる。

ライトプローブのデータを扱ったことがある方なら、光漏れに関する一般的な課題をご存じかもしれない。APVの開発時には、バーチャルオフセット、ダイレーション、プローブ調整ボリューム、レンダリングレイヤー、光漏れ防止モード「パフォーマンス」と「クオリティ」など、光漏れの問題に対処するためのツールボックスをすべて追加しました。
例を挙げよう。ライティングのデバッグ・ビューを使うと、光漏れに関する問題のあるユースケースを観察することができる。この状況では、外部からの明るい光が建物の壁や地面を通して見える。外は逆に暗い照明が室内から漏れている。これは解像度の低さ(プローブ間1メートル)と壁の薄さによるものと思われる。これにどう対処できるかを探ってみよう。

この問題を調査するために、Debug Probe Samplingオプションを使用すると、サンプリングされた各プローブを関連する重みとともに表示することができます。この場合、結果は外側からの明るいプローブと内側からの暗いプローブの間で補間されていることがわかる。理想的には、テントの内部は内部のプローブだけをサンプリングすべきである。

APV (6000.1f.1に搭載)のレンダリングレイヤーでは、最大4つの異なるマスクを作成し、特定のオブジェクトのサンプリングを特定のマスクに制限することができます。これは、内部の物体が外部のプローブをサンプリングするのを防いだり、逆に内部の物体が外部のプローブをサンプリングするのを防いだりするのに非常に便利である。
照明を生成する際、システムは近くのオブジェクトに基づいて、ベイクプロセス中にプローブにレイヤーを自動的に割り当てるため、プローブごとにレイヤーを手動で割り当てる必要はありません。これが完了したら、「Generate Lighting(照明の生成)」をクリックし、手動で内側と外側のマスクを分けて作成したおかげで、テントの照明漏れが少なくなっていることを確認できます。

光漏れ防止をさらにコントロールするには、Unityの光漏れ低減モード "パフォーマンス "と "クオリティ "を活用できます。
パフォーマンス・モードは、無効なプローブからサンプリング位置をずらすことでリーク低減に対応する。これは一般的に、有効なプローブすべてに対して適切なサンプリング位置が特定でき、無効なプローブは横取りできるような、わかりやすいシナリオでうまく機能する。しかし、プローブの構成によっては、そのような最適なサンプリング位置が得られない場合もある。その結果、無効なプローブがサンプリングされ、漏れの可能性が生じる。
クオリティ・モード(6000.0.3f1に搭載)がデフォルトで有効になり、最大3回のサンプリング試行を行うことで、有効なプローブのみを確実に利用できるようになりました。このモードはランタイム・パフォーマンスに若干のオーバーヘッドをもたらす可能性があり、これは特にローエンド・プラットフォームで顕著になる。
リークリダクションとレンダリングレイヤーを組み合わせることで、さらに光漏れを防ぐことができる。このモードは、無効なプローブ(バリディティの問題や別のレイヤーにあるなど)がサンプリングされないようにするのに役立ちます。

さらに、異なるレベル間の目に見える継ぎ目を減らすことで、複数のサブディビジョンレベルを改善しました(6000.0.4f1に搭載)。これは、2つのレベルの間に位置するフロンティア・プローブの値を、あらかじめ補間された値に置き換えることによって自動的に達成される。この処理はベーク時に行われるため、実行時のパフォーマンス・コストは発生しない。

APVでは、スカイオクルージョンとライティングシナリオにより、時間帯や照明のオン/オフの状況に応じて、視覚的に美しい照明の変化を実現できます。
次に、ライティング・トランジションの2つの例をご覧ください。最初は、URP 3Dサンプル・プロジェクトのオアシス・シーンでAPVを使ったライティング・シナリオ、次にガーデン・シーンでAPVを使ったスカイ・オクルージョンです。
APVは、ベイクされた照明データの切り替えや混合を可能にすることで、さまざまな照明シナリオを容易にします。この機能は、1日の時間帯をシミュレートしたり、同じシーンやベイキングセット内で照明のオンとオフを切り替えたりする場合に特に便利です。
照明シナリオは、ベイクされたAPVライトプローブデータのみを管理し、その他の要素は手動で処理する必要がある。オアシスのシーンで例を示すために、空、ライト、フォグパラメータ、反射プローブを更新するスクリプトを作成しました。APVベイクドシナリオは、ProbeReferenceVolume APIを使って実行時に管理することができる。


スカイ・オクルージョンは、シーン内の照明遷移を管理するために、照明シナリオに代わるものを提供します。複数のシナリオを必要としない、ベイク1回だけのシンプルなセットアップである。その代わり、スカイ・オクルージョンは空の照明だけを扱うので、指向性ライトや時間厳守ライトの間接照明の管理には及ばない。

スカイ・オクルージョンは、空のライティングを異なる方法で管理するために、追加のベイクデータを使用します。このデータは、シーンの各エリアが受けるべきスカイライトの量を保存し、スカイライトの色と強度をランタイムに調整できるようにします。このベイクされた静的なオクルージョンデータと並行して、実行時に動的なアンビエントプローブを利用することで、シーン照明の動的な調整を可能にしながら、空の照明の良い近似値を提供します。
スカイ・オクルージョンはURPとHDRPの両方でサポートされている。HDRPでは、周囲のプローブはHDRP Physical Skyから自動的に更新されます。しかしURPでは、スカイボックスモードを使用している場合、空の変化に合わせてアンビエントプローブをリアルタイムで自動更新することはできない。その代わり、Unityは空の色の変化に合わせて自動的に調整しないため、空のアニメーションビジュアルに合わせて、グラデーションモードやカラーモードを使って手動で色をアニメーションさせる必要があります。
Garden(庭園)シーンを例にとると、Environment(環境)設定のGradient Mode(グラデーションモード)は、周囲のプローブカラーの手動アニメーションを可能にします。オクルージョンデータと組み合わせることで、この設定は空の拡散照明をアニメーション化するための説得力のある近似を作成することができ、時間帯の変化を描写するのに適している。これは、複数の照明シナリオを使用することなく、単一のベークを利用し、幅広いカラーバリエーションを提供することができます。

詳しくは、ユニバーサルレンダリングパイプライン(URP)におけるAPVの実装、および 高解像度レンダリングパイプライン(HDRP)におけるAPVの実装をご覧ください。
Unity 6で提供されるUnityの新しいライトベーキングアーキテクチャにより、GPUライトベイカーはプレビューを終了しました。

新しいライトベーカーは、編集者の反応と焼成速度を念頭に置いて作られている。これは、オンデマンドベイクを使用する際、Generateボタンがクリックされた時にUnityがSceneステートの "スナップショット "を取るようになったことを意味します。Unityは、これまでEditorのパフォーマンスを低下させていた、毎フレームSceneの状態をチェックしなくなりました。
ベイクバックエンドを再設計したことで、コードベースが大幅に簡素化され、バグの修正がより簡単かつ迅速になり、新たなバグが発生するリスクも低くなりました。
また、適切なワークフローインテントを選択できる新しいベーキングプロファイルも提供しています。

エディターでの作業を継続し、エディター全体の応答性を最良にしたい場合に理想的な "最低メモリ使用量 "から、できるだけ早く作業を完了し、ベーキング時間中にエディターで他の作業をする必要がない場合に便利な "最高パフォーマンス "までの範囲を選択できます。
ベイクド・ライティング・データのオーサリングとトラブルシューティングを繰り返し行うことは、ベイクド・グローバル・イルミネーション(GI)を使用するクリエイターにとって重要なユースケースです。
このため、GI関連の様々なシーンビュー描画モードに新しいインタラクティブプレビュー機能を追加し、ライティングデータをプレビューするための専用のインタラクティブGIデバッグプレビューモードをUnityの自動生成に置き換えました。

これにより、デバッグビューはシーンの変更に合わせてインタラクティブに更新される。ベイクされたライティングデータを置き換えるわけではないので、プレビューは非破壊的です。
Unityの古いAuto-Generateアーキテクチャから離れるということは、ベイクパイプラインを最適化し、より安定させることができるということです。
Unity 6はEnlighten Realtime GIがサポートする最後のリリースです。以前にお伝えした非推奨パスの詳細については、Update on Global Illumination 2021フォーラムの投稿をご覧ください。
2023.1、2023.2、Unity 6 (2023.3)それぞれのベータリリースに関する、過去のフィードバックリクエストへのリンクです:
- 2023.1ベータ版リリースに伴うグローバル・イルミネーションの変更点
- 2023.2ベータ版リリースに伴うグローバル・イルミネーションの変更点
- Unity 6(2023.3)ベータリリースに伴うグローバルイルミネーションの変更点
Unity 6で提供される新しいライティング機能を活用した作品を楽しみにしています。グローバル・イルミネーション・フォーラムまたはUnityの新しいディスカッション・スペースにフィードバックをお寄せください!