Mixed (混合) ライトは、Mode プロパティーを Mixed に設定した Light コンポーネント です。
混合 ライトは、ランタイムにトランスフォームや視覚関連プロパティー (色や強度など) を変更できますが、厳しい制限内でのみ可能です。混合ライトは静的ゲームオブジェクトと動的ゲームオブジェクトの両方を照らし、常に直接光を提供し、必要に応じて間接光を提供できます。混合 ライトで照らされた動的ゲームオブジェクトは、常に他の動的ゲームオブジェクトにリアルタイムの影を落とします。
シーンの 混合 ライトはすべて、同じ Mixed Lighting Mode を使用します。Lighting Mode を設定するには、Lighting ウィンドウ (Window > Rendering > Lighting Settings) を開いて Scene タブをクリックし、Mixed Lighting セクションに移動します。
利用できるモードは以下の通りです。
混合ライトは、ゲームの一部ではなく、静的環境を照らすライト (例えば、空の移動しない太陽) に使用します。混合ライトからの直接光はランタイムに計算されるため、静的メッシュのマテリアルは視覚的な忠実性を保持し、物理ベースシェーディング (PBS) の完全なサポートがあります。
Shadowmask モードの Distance Shadowmask は最もリソースに負担がかかるオプションですが、最良の結果を得られます。Shadow Distance (Edit > Project Settings > Quality > Shadows) の設定内の距離で高品質の影を生成し、その距離を超える位置では高品質のベイクした影を生成します。例えば、太陽が空を横切らない限り、地平線のすぐ上に現実的な影を持つ雄大な風景を作成することができます。
Subtractive モードで取得する結果は、最も質が低くなります。たった 1 つのライトでリアルタイムの影をレンダリングし、その影をベイクした直接光と間接光と合成します。他のモードのいずれも使用できないターゲットプラットフォームの代替ソリューションとしてのみ使用してください (例えば、ローエンドのモバイルデバイスでアプリケーションを実行する必要があるが、メモリの制約によって Shadowmask や Distance Shadowmask を使用できない場合など)。
様々なモードの比較は Unity Lighting Modes Reference Card を参照してください。
すべての混合ライティングモードは、すべてのプラットフォームでサポートされています。ただし、レンダリングの制限があります。
Subtractive モードの場合は、フォワードレンダリング を使用します (デファード、またはライトプレパスのサポートはありません)。
Subtractive モードの場合は、多くのモバイル GPU がそうであるように、4 つのレンダリングターゲットしかサポートできないプラットフォームでは、フォワードレンダリング を使用します (ディファード、またはライトプレパスのサポートはありません)。
フォワードレンダリングとデファードレンダリングの詳細については、レンダリングパス のドキュメントを参照してください。
混合 ライトは、ランタイムにトランスフォームや視覚関連プロパティー (色や強度など) を変更できますが、厳しい制限内でのみ可能です。 実際、ベイクされたライト (したがって、事前計算されています) があるため、ランタイムにパラメーターを変更すると、リアルタイムと事前計算されたライトを合成するときに一貫性のない結果になります。
Baked Indirect と Shadowmask モードの場合、直接光の効果は丁度 リアルタイム のライトのようなので、色、強度、さらにはライトのトランスフォームなどのパラメーターを変更できます。ただし、ベイクされた値はあらかじめ計算されており、実行時に変更することはできません。
例えば、赤い 混合 ライトをライトマップにベイクし、実行時にその色を赤から緑に変更すると、すべての直接光が緑色に変更されます。ただし、すべての間接光はライトマップにベイクされるため、赤色のままです。実行時に混合ライトを移動する場合も同じことが発生します。直接光はライトに従って移動しますが、間接光はライトがベイクされた位置に残ります。
直接光に微妙な変更 (例えば、光の色相や輝度のごくわずかな変更など) を加えるだけの場合は、間接光の利点を得ることができます。 リアルタイム ライトに必要な余分な処理時間なしに、ライトを多少動的に表示することができます。間接光は正確ではありませんが、誤差が微妙なので気になるほどではありません。これは、あらかじめ計算された影の情報を持たないライトで特に有効です。これは、ライトに対して影を無効にするか、または影がリアルタイムである Baked Indirect モードを使用して行うことができます。シャドウマスクは直接光の計算の一部であるため、ライトを移動すると、影が正しく並ばないという視覚的不一致が生じます。
以下のビデオは、混合ライトがベイクされた位置から遠くに移動するとどうなるかを示しています。オブジェクトが遠くに移動したにもかかわらず、赤色の間接光が壁に残っている様子に注意してください。https://youtu.be/o6pVBqrj8-s
以下のビデオは、矛盾を目立たせずに間接光をわずかに変更した例を示しています。https://youtu.be/XN6ya31gm1I
混合ライトの場合、ライトパスの最後のセグメント (ライトからサーフェスへのパス) も事前計算の一部になります。 しかし、Unity はそれでも直接光と間接光を別々に処理します。間接光をライトマップとライトプローブにベイクし、それらを実行時にサンプリングします。 間接光は一般的に低周波です。つまり、見た目が滑らかに見え、詳細な影やライトの遷移を含んでいません。したがって、影は、視覚的に大きな影響を与える直接光で処理されます。
影の事前計算と保存の方法の違いは、混合ライトのさまざまなサブモードに反映されています。
影の情報は事前に計算されシャドウマスクに格納されます。シャドウマスクは、対応するライトマップと同じ UV レイアウトと解像度を共有するテクスチャです。テクスチャは、テクセルあたり最大 4 つのライトのオクルージョン情報を保存します (現在の GPU で最大 4 チャンネルに制限されているため)。値の範囲は 0 から 1 で、その範囲の値にするとソフトシャドウを作ります。
シャドウマスクが使用できる場合、ライトプローブもまた、最大 4 つのライトのオクルージョン情報を格納します。5 つ以上のライトが交差する場合、余剰なライトはベイクしたライトで処理されます。この挙動は、シャドウマスクの重なりを可視化する モードで観察することができます。この情報は事前計算されるので、シャドウマスクに格納される影だけが、静的ゲームオブジェクトから他の静的ゲームオブジェクトに投げる影になります。 これらの影はエッジが滑らかで、ライトマップの解像度によっては、リアルタイムのシャドウマップよりも高品質です。各混合ライトは実行時にシャドウマスクチャンネルマッピングを保持します。そのため、シャドウマップを通して動的なゲームオブジェクトが作る影は、静的なゲームオブジェクトの作る事前計算された影と正しく合成され、影が 2 重になるような矛盾は回避されます。
静的ゲームオブジェクトの影と動的ゲームオブジェクトの影の唯一の違いは、事前計算されたシャドウマスクとランタイムのシャドウマップの解像度とフィルタリングの違いであり、事前計算された影はさまざまな形のエリアライトをサポートしているため、 ソフトシャドウにさらに現実的な陰影ができます。
Baked Indirect と Shadowmask の共通点は、直接光は常にリアルタイムで計算され、ライトマップに格納された間接光に加えられるため、ライトの方向を必要とするすべてのマテリアルの効果は引き続き機能するということです。影がそのライトに対し使用可能である場合は、動的ゲームオブジェクトは常に、Shadow Distance (Edit > Project Settings を開き、Quality カテゴリを選択し、Shadows セクションに移動) の範囲内のシャドウマップを使って他の動的ゲームオブジェクトに影を投影します。
2017–09–18 修正されたページ
Light Modes は 5.6 で追加
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.