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

混合ライティング 

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

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

シーンの 混合 ライトはすべて、同じ Mixed Lighting Mode を使用します。Lighting Mode を設定するには、Lighting ウィンドウ (Window > Rendering > Lighting Settings) を開いて Scene タブをクリックし、Mixed Lighting セクションに移動します。

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

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

混合ライトの使用

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

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

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

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

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

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

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

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

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

より高度な使用法

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

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

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

直接光に微妙な変更 (例えば、光の色相や輝度のごくわずかな変更など) を加えるだけの場合は、間接光の利点を得ることができます。 リアルタイム ライトに必要な余分な処理時間なしに、ライトを多少動的に表示することができます。間接光は正確ではありませんが、誤差が微妙なので気になるほどではありません。これは、あらかじめ計算された影の情報を持たないライトで特に有効です。これは、ライトに対して影を無効にするか、または影がリアルタイムである 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 モード