リアルタイムライティング
# Baked Indirect モード

混合ライティング

混合 ライトは、Mode プロパティーを Mixed に設定した Light コンポーネント です。

混合 ライトは、ランタイムに Transform や視覚関連プロパティー (カラーや強度など) を変更できますが、厳しい制限内でのみ可能です。混合ライトは静的ゲームオブジェクトと動的ゲームオブジェクトの両方を照らし、常に直接ライティングを提供し、オプションで間接ライティングを提供できます。混合 ライトで照らされた動的ゲームオブジェクトは、常に他の動的ゲームオブジェクトにリアルタイムの影を投げます。

All Mixed Lights in a Scene use the same Mixed Lighting Mode. To set the Lighting Mode, open the Lighting window (menu: Window > Rendering > Lighting Settings), click the Scene tab, and navigate to the Mixed Lighting section.

Lighting ウィンドウの Mixed Lighting セクション
Lighting ウィンドウの Mixed Lighting セクション

利用できるモードは以下の通りです。

混合ライトの使用

混合ライティングは、ゲームの一部ではなく、静的環境を照らすライト (例えば、空で移動しない太陽) に役立ちます。混合ライトからの直接ライティングはランタイムにも計算されるため、静的メッシュのマテリアルは、物理ベースシェーディング (PBS) の完全なサポートを含め、視覚的忠実度を保持します。

混合ライトの例
混合ライトの例

Shadowmask モードの 距離シャドウマスク は最もリソースに負担がかかる選択肢ですが、最良の結果を得られます。 Shadow Distance (Edit > Project Settings > Quality > Shadows) 以内の距離で高品質の影を生成し、その距離を超える位置では高品質のベイクした影を生成します。例えば、太陽が空を横切らない限り、地平線のすぐ上に現実的な影を持つ雄大な風景を作成することができます。

Subtractive モードで取得する結果は、最も質が低くなります。たった 1 つのライトでリアルタイムの影をレンダリングし、その影をベイクした直接ライティングと間接ライティングと合成します。他のモードのいずれも使用できないターゲットプラットフォームの代替ソリューションとしてのみ使用してください (例えば、ローエンドのモバイルデバイスでアプリケーションを実行する必要があるが、メモリの制約によって ShadowmaskDistance Shadowmask を使用できない場合など)。

様々なモードの比較は Unity Lighting Modes Reference Card を参照してください。

すべての混合ライティングモードは、すべてのプラットフォームでサポートされています。ただし、レンダリングの制限があります。

  • Subtractive モードの場合は、フォワードレンダリング を使用します (デファード、またはライトプレパスのサポートはありません)。

  • Subtractive モードの場合は、多くのモバイル GPU がそうであるように、4 つのレンダリングターゲットしかサポートできないプラットフォームでは、フォワードレンダリング を使用します (デファード、またはライトプレパスのサポートはありません)。

フォワードレンダリングとデファードレンダリングの詳細については、レンダリングパス のドキュメントを参照してください。

上級者向けの使用法

混合 ライトは、ランタイムに Transform や視覚関連プロパティー (Color や Intensity など) を変更できますが、厳しい制限内でのみ可能です。 実際、ベイクされたライト (したがって、事前計算されています) があるため、ランタイムにパラメーターを変更すると、リアルタイムと事前計算されたライティングを合成するときに一貫性のない結果になります。

Baked IndirectShadowmask モードの場合、直接ライティングの効果は丁度 リアルタイム のライトのようなので、Color、Intensity、さらにはライトの Transform などのパラメーターを変更できます。ただし、ベイクされた値はあらかじめ計算されており、実行時に変更することはできません。

例えば、赤い 混合 ライトをライトマップにベイクし、実行時にその色を赤から緑に変更すると、すべての直接ライトが緑色に変更されます。ただし、すべての間接ライトはライトマップにベイクされるため、赤色のままです。実行時に混合ライトを移動する場合も同じことが発生します。直接ライティングはライトに従って移動しますが、間接ライティングはライトがベイクされた位置に残ります。

直接ライトに微妙な変更 (例えば、光の色相や輝度のごくわずかな変更など) を加えるだけの場合は、間接ライティングの利点を得ることができます。 リアルタイム ライトに必要な余分な処理時間なしに、ライトを多少動的に表示することができます。間接ライティングは正確ではありませんが、誤差が微妙なので気になるほどではありません。これは、あらかじめ計算された影の情報を持たないライトで特に有効です。これは、ライトに対して影を無効にするか、または影がリアルタイムである Baked Indirect モードを使用して行うことができます。シャドウマスクは直接ライティングの計算の一部であるため、ライトを移動すると、影が正しく並ばないという視覚的不一致が生じます。

以下のビデオは、混合ライトがベイクされた位置から遠くに移動するとどうなるかを示しています。オブジェクトが遠くに移動したにもかかわらず、赤色の間接ライトが壁に残っている様子に注意してください。https://youtu.be/o6pVBqrj8-s

以下のビデオは、目立つ矛盾を起こさずに間接ライトをわずかに変更した例を示しています。https://youtu.be/XN6ya31gm1I

技術的な詳細

混合ライトの場合、ライトパスの最後のセグメント (ライトからサーフェスへのパス) も事前計算の一部になります。 しかし、Unity はそれでも直接ライティングと間接ライティングを別々に処理します。間接ライトをライトマップとライトプローブにベイクし、それらを実行時にサンプリングします。 間接ライティングは一般的に低周波です。つまり、見た目が滑らかに見え、詳細な影や光の遷移を含んでいません。 したがって、影は、視覚的に大きな影響を与える直接ライティングで処理されます。

影の事前計算と保存の方法の違いは、混合ライトのさまざまなサブモードに反映されています。

影の情報は事前に計算されシャドウマスクに格納されます。シャドウマスクは、対応するライトマップと同じ UV レイアウトと解像度を共有するテクスチャです。テクスチャは、テクセルあたり最大4 つのライトのオクルージョン情報を保存します (現在の GPU で最大 4 チャンネルに制限されているため)。値の範囲は 0 から 1 で、その範囲の値にするとソフトシャドウを作ります。

シャドウマスクが使用できる場合、ライトプローブもまた、最大 4 つのライトのオクルージョン情報を格納します。5 つ以上のライトが交差する場合、余剰なライトはベイクしたライトで処理されます。この挙動は、シャドウマスクの重なりを可視化する モードで観察することができます。この情報は事前計算されるので、シャドウマスクに格納される影だけが、静的ゲームオブジェクトから他の静的ゲームオブジェクトに投げる影になります。 これらの影はエッジが滑らかで、ライトマップの解像度によっては、リアルタイムのシャドウマップよりも高品質です。各混合ライトは実行時にシャドウマスクチャンネルマッピングを保持します。そのため、シャドウマップを通して動的なゲームオブジェクトが作る影は、静的なゲームオブジェクトの作る事前計算された影と正しく合成され、影が 2 重になるような矛盾は回避されます。

静的ゲームオブジェクトの影と動的ゲームオブジェクトの影の唯一の違いは、事前計算されたシャドウマスクとランタイムのシャドウマップの解像度とフィルタリングの違いであり、事前計算された影はさまざまな形のエリアライトをサポートしているため、 ソフトシャドウにさらに現実的な陰影ができます。

この画像では、ベイクしたシャドウマスクの解像度はリアルタイムの影の解像度とほぼ同じです
この画像では、ベイクしたシャドウマスクの解像度はリアルタイムの影の解像度とほぼ同じです
この画像では、ベイクしたシャドウマスクの解像度はリアルタイムの影の解像度よりかなり低い
この画像では、ベイクしたシャドウマスクの解像度はリアルタイムの影の解像度よりかなり低い

Baked IndirectShadowmask の共通点は、直接ライティングは常にリアルタイムで計算され、ライトマップに格納された間接ライティングに加えられるため、ライトの方向を必要とするすべてのマテリアルエフェクトが引き続き機能することです。動的ゲームオブジェクトは、 Shadow Distance (Edit > Project Settings > Quality > Shadows) 以内の距離のシャドウマップを使用して、他の動的ゲームオブジェクトに常に影を投げます。

Baked Indirect モード: 間接ライティングだけが事前計算されます
Baked Indirect モード: 間接ライティングだけが事前計算されます
Shadowmask と Distance Shadowmask モード: 間接ライティングと直接オクルージョンが事前計算されます
ShadowmaskDistance Shadowmask モード: 間接ライティングと直接オクルージョンが事前計算されます
Subtractive モード: すべてのライト経路が事前計算されます
Subtractive モード: すべてのライト経路が事前計算されます

  • 2017–09–18 限られた 編集レビュー で修正されたページ

  • Light Modes は5.6に追加

リアルタイムライティング
# Baked Indirect モード