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

ライティングモード: Shadowmask

このページでは、シーンの Lighting Mode プロパティを Shadowmask (シャドウマスク) に設定した場合の、シーン内のすべての 混合ライト の動作について説明します。

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

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

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

  • ビルトインレンダーパイプラインは Shadowmask ライティングモードをサポートします。ビルトインレンダーパイプラインで、4 つのレンダーターゲットのみをサポートするプラットフォーム (多くのモバイル GPU など) では、Shadowmask ライティングモードにすると、Unity に フォワードレンダリング の使用を強制します。
  • ユニバーサルレンダーパイプライン (URP) は Shadowmask ライティングモードをサポートしません。
  • HD レンダーパイプライン (HDRP) は Shadowmask ライティングモードをサポートし、ライトごとに追加機能を提供します。これらの追加オプションについては、HD レンダーパイプラインの Shadowmask ライティングモード を参照してください。

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

Shadowmask ライティングモードには以下の品質設定があります。

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

混合ライトの動作

Distance Shadowmask 品質設定

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

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

Shadowmask 品質設定

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

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

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

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

  1. Lighting ウィンドウを開きます (Window > General > Lighting Settings)。
  2. Scene タブを選択します。
  3. Mixed Lighting に移動します。
  4. ドロップダウンを使用して Lighting ModeShadowmask に設定します。
  5. Quality Settings を開きます (Edit > Project Settings を選択し、Quality カテゴリを選択)。
  6. Shadowmask Mode ドロップダウンで Shadowmask または Shadowmask Distance を選択します。

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

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

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

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

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

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

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

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

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