Version: 2023.1
言語: 日本語
ライティングモード: Baked Indirect
ライティングモード: Subtractive

ライティングモード: Shadowmask

このページでは、シーンで Lighting Settings Asset を使用し、その Lighting Mode プロパティが Shadowmask に設定される場合の、シーンのすべての Mixed Lights (混合ライト) の動作について説明します。

ベイクされた間接ライティングモード と同様に、Shadowmask ライティングモードは、リアルタイムの直接ライティングとベイクされた間接ライティングを組み合わせます。ただし、Shadowmask ライティングモードは、影をレンダリングする方法が Baked Indirect ライティングモードと異なります。Shadowmask ライティングモードでは、ランタイムにベイクした影とリアルタイムの影を組み合わせて、距離が離れた場所に影をレンダリングすることができます。これを行うには、シャドウマスクと呼ばれる追加のライトマップテクスチャを使用し、ライトプローブ に追加情報を格納します。Unity はシャドウマスクとベイクされた影の Light Probe オクルージョンデータを生成します。

Shadowmask ライティングモードは、すべてのライティングモードの中で忠実度が最も高い影を実現しますが、パフォーマンスコストとメモリ要件が最も高くなります。ハイエンドや平均的なハードウェアで、オープンワールドなど、遠くにあるゲームオブジェクトを表示するリアルなシーンをレンダリングするのに適しています。

レンダリングパイプラインのサポート

レンダーパイプライン間での Shadowmask ライティングモードのサポートについては、レンダーパイプライン機能比較 を参照してください。

シャドウマスクの品質設定

Quality Settings パネルを使用して、Unity がランタイムに使用するシャドウマスクモードを設定します。

  • Distance Shadowmask は高いパフォーマンスコストで忠実度の高い影を提供します。
  • Shadowmask は、低いパフォーマンスコストで忠実度の低いシャドウを提供します。

混合ライトの動作

Distance Shadowmask 品質設定

シーンのライティングモードを Shadowmask に設定し、プロジェクトが品質設定で Distance Shadowmask を使用する場合、混合ライトは以下のように動作します。

  • 混合ライトで照らされた動的ゲームオブジェクトは以下を受けます。
    • リアルタイムの直接ライティング。
    • ベイクされた間接ライティング、ライトプローブ使用。
    • 動的ゲームオブジェクトからのリアルタイムの影、シャドウマップ使用 (シャドウディスタンス以内)。
    • 静的ゲームオブジェクトからのリアルタイムの影、シャドウマップ使用 (シャドウディスタンス以内)。
    • 静的ゲームオブジェクトからのベイクした影、ライトプローブ使用 (シャドウディスタンスを超える範囲)。
  • 混合ライトで照らされた静的ゲームオブジェクトは以下を受けます。
    • リアルタイムの直接ライティング。
    • ベイクした間接ライティング、ライトマップ使用。
    • 動的ゲームオブジェクトからのリアルタイムの影、シャドウマップ使用 (シャドウディスタンス以内)。
    • 静的ゲームオブジェクトからのリアルタイムの影、シャドウマップ使用 (シャドウディスタンス以内)。
    • 静的ゲームオブジェクトからのベイクした影、シャドウマスク使用 (シャドウディスタンスを超える範囲)。

Shadowmask 品質設定

シーンのライティングモードを Shadowmask に設定し、プロジェクトが品質設定で Shadowmask を使用する場合、混合ライトは以下のように動作します。

  • 混合ライトで照らされた動的ゲームオブジェクトは以下を受けます。
    • リアルタイムの直接ライティング。
    • ベイクされた間接ライティング、ライトプローブ使用。
    • 動的ゲームオブジェクトからのリアルタイムの影、シャドウマップ使用 (シャドウディスタンス以内)。
    • 静的ゲームオブジェクトからのベイクした影、ライトプローブ使用 (すべての範囲)。
  • 混合ライトで照らされた静的ゲームオブジェクトは以下を受けます。
    • リアルタイムの直接ライティング。
    • ベイクした間接ライティング、ライトマップ使用。
    • 動的ゲームオブジェクトからのリアルタイムの影、シャドウマップ使用 (シャドウディスタンス以内)。
    • 静的ゲームオブジェクトからのベイクした影、シャドウマスク使用 (すべての範囲)。

シーンのライティングモードを Shadowmask に設定

ビルトインレンダーパイプラインでは以下を行います。

  1. シーンの Lighting Settings アセット を選択します。
  2. Inspector で、Mixed Lighting に移動します。
  3. ドロップダウンメニューを使用して、Lighting ModeShadowmask に設定します。
  4. Quality Settings を開きます (Edit > Project Settings に移動し、Quality カテゴリを選択)。
  5. Shadowmask Mode ドロップダウンメニューを使って、Shadowmask または Shadowmask Distance のいずれかを選択します。

HD レンダーパイプラインでは以下を行います。

HDRP の Shadowmask ライティングモード ドキュメントを参照してください。

影とランタイムパフォーマンス

Shadow Distance プロパティを使用して、Unity がリアルタイムの影 (シャドウ) を描画するカメラからの距離制限を決定します。

シャドウマスクの実装の詳細

ランタイムに、Unity はシャドウマスクを使用して、ピクセルを影にするかどうかを判断します。シャドウマスクのテクスチャには、ベイクしたライトに関するオクルージョン情報が含まれます。シャドウマスクは同じ UV レイアウトと解像度を対応するライトマップと共有します。シャドウマスクには、テクセルごとに最大 4 つのライトのオクルージョン情報が RGBA 形式で含まれます。

4 つ以上のライトが重なった場合、余分のライトはベイクしたライティングに代替処理されます。どのライトをベイクしたライトにするかはベイクのシステムによって決定され、重なっているライトの 1 つが変更されない限り、ベイク全体で一貫しています。ライトプローブも、最大 4 つのライトの同じ情報を取得します。

ライトの重なりは、影を受けるオブジェクトと無関係に計算されます。ですから、それらのライトのバウンディングボリュームが空間の点で重ならない限り、1 つのオブジェクトが、すべてが同じシャドウマスク/プローブのチャンネルから来る 10 の異なる混合ライトの効果を受けることが可能です。ライトが重なる場合は、より多くのチャンネルが使用されます。そして、4 チャンネルがすべてすでに割り当てられているときにライトが重なる場合は、そのライトは完全にベイクされるように代替処理されます。

ライティングモード: Baked Indirect
ライティングモード: Subtractive