レイトレーシングによるシャドウ
Ray-traced shadow (レイトレーシングによるシャドウ) は、HDRP が次の ライト ソースから光線をトレースして生成するシャドウです。
- Directional (ディレクショナル)
- Point (ポイント)
- Spot (スポット)
- Rectangle (矩形)
レイトレーシングによるシャドウを HDRP プロジェクトで有効にすると、不透明ゲームのシャドウマップを置き換えます。
レイトレーシングによるシャドウの使用
レイトレーシングによるシャドウはすべて、スクリーンスペースシャドウです。つまり、HDRP はそれらを、 (不透明ゲームオブジェクトのみを格納する) 深度バッファにある画面上のすべてのピクセルに関する情報を含む、スクリーンスペースバッファ内に格納します。
レイトレーシングによるシャドウを使うには、HDRP プロジェクトでスクリーンスペースシャドウを有効にします。その手順は以下の通りです。
- HDRP Asset を Project ウィンドウでクリックし、Inspector で表示します。
- Lighting セクションで Screen Space Shadows を有効にします。
- Maximum の値を、各フレームで評価したいスクリーンスペースシャドウの最大数に設定します。シーンにこれ以上の数の Lights がある場合は、HDRP はこの数だけレイシャドウを落とし、残りにはシャドウマップを使います。
それから Camera に対して Screen Space Shadows を有効にしてください。この手順は、
- Project Settings ウィンドウを開き (メニュー: Edit > Project Settings)、HDRP Default Settings タブを選択します。
- Default Frame Settings For ドロップダウンから Camera を選択します。
- Lighting セクションで Screen Space Shadows を有効にします。
最後に HDRP がレイトレーシングによるシャドウを、Directional、Point。または Rectangle Light にプロセスするようにします。
- Shadow セクション内の Shadow Map 折り畳みの下で、Enable チェックボックスを有効にします。
- また Shadow Map 折り畳みで、Ray-Traced Shadows を有効にします。Directional Lights に関しては、Screen Space Shadows を有効にしてこのプロパティーにアクセスしてください。
- シャドウの動作を変更するには、Ray-Traced Shadows の下のプロパティーを編集します。
Directional Light
レイトレーシングによるシャドウは、Directional Light (ディレクショナルライト) が不透明ゲームオブジェクトに使う、カスケードシャドウマップの代用になります。
ディレクショナルライトカスケードシャドウマップ
レイトレーシングによるディレクショナルライトのシャドウ (Sun Angle = 0)
レイトレーシングによるディレクショナルライトのシャドウ (Sun Angle = 0.53、地球から見た太陽の角度)
レイトレーシングによるシャドウを使うと、ディレクショナルライトに照らされた透明または透過ゲームオブジェクトで色の付いた影を作ることができます。
ノート: 透過ゲームオブジェクトにディレクショナルライトを使う際、HDRP はゲームオブジェクトの反対側にラスタライズされたシャドウを表示します。
レイトレーシングによるディレクショナルライトのシャドウ (色つきシャドウあり)
レイトレーシングによるディレクショナルライトのシャドウ (色つきシャドウなし)
プロパティー
プロパティー | 説明 |
---|---|
Sun Angle | 空の Sun の大きさを度で設定します。例えば、Earth における Sun の値は 0.53° です。 |
Sample Count | HDRP がフレームごと、ピクセルごとに使う、光線の数を制御します。値が高いほど、より正確なシャドウを制作します。この値を増やすと、実行時間を線形に増加させます。 |
Color Shadow | 透明および透過ゲームオブジェクトに、色の付いたシャドウを落とさせます。マテリアルは Refraction Model が Thin、Box または Sphere に設定されているときのみ、色の付いたシャドウを落とすことができます。 |
Denoise | HDRP がレイトレーシングによるシャドウからノイズを除去し、より滑らかにするために使う時空間フィルターを有効にします。 |
- Denoiser Radius | 時空間フィルターの半径を制御します。 |
Point/Spot Light
レイトレーシングによるシャドウは、不透明なゲームオブジェクトに Point (ポイント) ライトと Spot (スポット) ライトが使う、シャドウマップの代用になります。HDRP はポイントライトのライティングを、空間の単一ポイントに起因するライティングとして評価しますが (ライトは パンクチュアル です)、シャドウイングはライトがスフィア面に起因するものとして評価します。また HDRP はスポットライトのライティングを、空間の単一ポイントに起因するものとして評価しますが、シャドウイングはライトが円錐面に起因するものとして評価します。
ポイントライトのシャドウマップ
レイトレーシングによるポイントライトシャドウ (半径 = 0.001 m)の
レイトレーシングによるポイントライトのシャドウ (半径 = 0.5 m)
レイトレーシングによるシャドウは、透明および透過ゲームオブジェクトが落とすポイントライトの影を半透明にすることができます。
レイトレーシングによるポイントライトのシャドウ (半透明のシャドウあり)
レイトレーシングによるポイントライトのシャドウ (半透明のシャドウなし)
プロパティー
プロパティー | 説明 |
---|---|
Sample Count | HDRP がピクセルごと、フレームごとに使う、光線の数を制御します。サンプル数が少ないと、よりノイズが多く、ノイズ除去が必要な画面を制作します。この値を増やすと、実行時間を直線的に増加させます。 |
Semi-Transparent Shadow | 透明および透過ゲームオブジェクトが半透明のシャドウを落とせるようになります。 |
Radius | HDRP がシャドウ評価に使う、スフィアライトの半径を設定します。これは発光する面のサイズを増大させます。 |
Denoise | HDRP がレイトレーシングによるシャドウからノイズを除去するために使う、時空間フィルターを有効にします。 |
- Denoiser Radius | 時空間フィルターの半径を制御します。 |
- Distance Based Denoising | HDRP がシャドウのノイズ除去をする際に、遮蔽物までの距離を考慮するべきかを特定します。これはノイズ除去の品質を向上させますが、リソース負荷も増します。 |
Rectangle Light
レイトレーシングによるシャドウは、Rectangle (矩形) ライトが不透明ゲームオブジェクトに使う 指数分散シャドウマップ の代用になります。
Rectangle Light シャドウマップ
レイトレーシングによる Rectangle Light シャドウ
ノート: ディファ―ドモード でレンダリングする際、HDRP は Lit シェーダーに対して、正確なレイトレーシングによるエリアライトシャドウを供給します。HDRP がその他の形状に対してレンダリングする際、または Lit シェーダーをフォワードモードでレンダリングする際には、エリアライトに対するレイトレーシングによるシャドウを、概算します。この概算は完全に正確にはなりませんが、妥当な結果を生みます。
透過ゲームオブジェクトに Rectangle Light を使う際、HDRP はゲームオブジェクトの反対側にラスタライズされたシャドウを表示します。
プロパティー
プロパティー | 説明 |
---|---|
Sample Count | HDRP がフレームごと、ピクセルごとに使う、光線の数を制御します。この値を増やすと、実行時間を線形に増加させます。 |
Denoise | HDRP がレイトレーシングによるシャドウからノイズを除去するために使う、時空間フィルターを有効にします。 |
- Denoiser Radius | 時空間フィルターの半径を制御します。 |
制限
両面シャドウ
レイトレーシングによるシャドウは、メッシュレンダラーの Cast Shadows プロパティーに対して Two Sided オプションをサポートしません。メッシュに両面シャドウを使うためには、Inspector でメッシュレンダラーのマテリアルを開き、Surface Options セクションで Double-Sided プロパティーを有効にします。
再帰的レンダリング
HDRP が 再帰的レンダリング を使ってレンダリングするゲームオブジェクトは、レイトレーシングによるシャドウを受信できません。両方のエフェクトを有効にすると、HDRP は再帰的にレンダリングされたゲームオブジェクトに、ラスタライズされた シャドウ をレンダリングします。