レイ トレーシング手法は、ライトによるソフト シャドウイング、正確なアンビエント オクルージョン、インタラクティブ グローバル イルミネーション、反射など、高品質で自然な見栄えの結果を生成できるため、映画、テレビ、ビジュアライゼーションなどのオフライン レンダリングに活用されてきました。ただし、このような高い品質レベルの画像をレンダリングするには、多くの場合、高性能のコンピュータが必要であるだけでなく、1 フレームでもレンダリングに長い時間がかかっていました。
Unreal Engine では、サポートするハードウェアでレイ トレーシングを実行できるため、繊細なライティング エフェクトをリアルタイムでレンダリングするインタラクティブ体験を作成することができます。Unreal Engine のハードウェア レイ トレーシング機能は、従来のラスタ レンダリング手法を組み合わせています。この 2 つの手法を組み合わせることで、より少ないピクセルあたりのサンプル数でレイ トレーシングを行い、ノイズ除去アルゴリズムを活用して、オフライン レンダラで得られる結果に近いように感じる結果を生成することができます。
ハードウェア レイ トレーシングを有効化する
[Project Settings (プロジェクト設定)] の [Engine (エンジン)]> [Rendering (レンダリング)] > [Hardware Ray Tracing (ハードウェア レイ トレーシング)] で、[Support Hardware Ray Tracing (ハードウェア レイ トレーシングをサポートする)] をオンにして、変更を有効にするためにエディタを再起動します。
レイ トレーシングを有効にすると、まだ有効でない場合、プロジェクトの [Support Compute Skin Cache (スキン キャッシュの計算をサポート)] も有効になります。
[Ray Traced Shadows (レイ トレーシングによるシャドウ)]、[Ray Traced Skylight (レイ トレーシングによるスカイ ライト)] など、ハードウェア レイ トレーシングの一部の機能は、他のレイ トレーシング機能とは個別に有効にすることができます。[Project Settings] の同じ [Hardware Ray Tracing] セクションで、プロジェクトに必要な機能を有効にすることができます。
ハードウェア レイ トレーシングの機能
以下のハードウェア レイ トレーシングの機能がサポートされています。
レイ トレーシングによるシャドウ
レイ トレーシングによるシャドウ は、環境内のオブジェクトに対するソフト エリア ライティング エフェクトをシミュレートします。つまり、光源のサイズや角度に基づいて、オブジェクトのシャドウはコンタクト サーフェスの近くでよりシャープなシャドウになり、離れるとよりソフトになり、範囲も広がります。
レイ トレーシングによるアンビエント オクルージョン
レイ トレーシングによるアンビエント オクルージョン (RTAO) では、壁のコーナーやエッジのシャドウイング、スキンの割れ目やしわに奥行きが増えるなど、接地したオブジェクトや環境光を遮る領域が正確にシャドウイングされます。
スクリーン空間のアンビエント オクルージョン (SSAO) と比較すると、RTAO では、オブジェクトが接地し、シーンに奥行きを加えるなど、間接的にライティングされている領域で自然な見栄えのシャドウが生成されています。
アンビエント オクルージョン エフェクトのプロパティ Intensity および Radius を変化させることで、サイズと強さを制御できます。
レイ トレーシングによる反射
レイ トレーシングのこの機能は非推奨であり、今後のリリースで削除される可能性があります。
レイ トレーシングによる反射 (RTR) は、複数の反射バウンスをサポートする正確な環境表現をシミュレートします。
この例では、レイ トレーシングによる反射の 1 回のバウンスと、レイ トレーシングによる反射の複数回のバウンスの比較を示しています。複数回のバウンスを使用すると、シーン内の反射サーフェス間のリアルタイムの内部反射が生成されます。
それに対して、スクリーン空間反射 (SSR) アクタ、平面反射 アクタ、反射キャプチャ アクタはどれも、シーン全体を動的にキャプチャすることはできず、他の反射メソッドでは課せられるいくつかの制限事項もありません。
この比較では、SSR は、1 回の反射バウンスが唯一可能であり、表現に対してシーン上で可視であるものに限定されています。一方、RTR は複数回のバウンスが可能であり、表示される内容にも制限がありません。そのため、本の両側、カメラの背後にある反射している床、窓から差し込み、サーフェスに反射する追加のライティングを確認できます。
レイ トレーシングによる透過処理
レイ トレーシングのこの機能は非推奨であり、今後のリリースで削除される可能性があります。
レイ トレーシングによる透過処理 では、透明なサーフェスでの物理的に正確な反射、吸収、屈折により、ガラスや液体マテリアルが正確に表現されます。
レイ トレーシングによるグローバル イルミネーション
レイ トレーシングのこの機能は非推奨であり、今後のリリースで削除される可能性があります。
レイ トレーシングによるグローバル イルミネーション (RTGI) では、対象の光源からの光が直接当たっていないシーンの領域に、リアルタイムのインタラクティブなバウンス ライティングが追加されます。
ポストプロセス ボリュームでは、レイ トレーシングによるグローバル イルミネーションの手法を次の 2 種類から選択できます。
- ブルート フォース。オフライン レンダラが間接ライティングをエミュレートします。ただし、レンダリング速度は低下します。
- ファイナル ギャザー。間接ライティングのバウンス回数が 1 回のみになるものの、レンダリング速度が向上します。
ファイナル ギャザー手法
これは実験段階の機能です。
レイ トレーシングによるグローバル イルミネーションのための ファイナル ギャザー アプローチでは、ランタイム パフォーマンスを得るために品質がある程度低下するファイナル ギャザーに基づく技法を使用します。この技法は 2 パス アルゴリズムで、最初のパスでは、ブルート フォース手法と同様にシェーディング ポイントがシーン全体に分散されますが、ピクセルあたりのサンプル数は固定レートです。このパスでは、16 シェーディング ポイント サンプルまでの履歴がスクリーン空間に格納されます。このアルゴリズムの 2 番目のパスでは、シェーディング ポイント履歴への再接続が試行されるので、この手法の負荷が軽減されます。
ブルート フォースでは、パス トレーサー のグラウンド トゥルース リファレンスをエミュレートすることを目的としており、パス トレーサーが結果を実行する方法と類似しています。ファイナル ギャザー手法では、そのエミュレーション機能と引き換えにパフォーマンスが向上します。このことにより、間接ディフューズ グローバル イルミネーションではバウンス回数が 1 回のみに制限されていたり、カメラの動きが速い場合は、前のフレームのサンプル データの再投影がゴーストの影響を受けやすくなるなどの制限が課されます。
一時的なゴースト アーティファクトの抑止に役立つように、次のコマンドを使用して、ワールド空間の拒否基準を変更できます。
r.RayTracing.GlobalIllumination.FinalGatherDistance [number of units]
現時点では、これはオリジナルのシェーディング ポイントから測定したワールド距離に基づいています。この拒否基準はデフォルトでは 10 単位です。
また、ファイナル ギャザー手法が効果的に機能するためには、ポストプロセス ボリュームで以下の設定を使用している必要があります。
- Max Bounces (最大バウンス数):1
- Samples Per Pixel (ピクセルあたりのサンプル数):16
1 より大きい [Max Bounces] は警告なしで破棄されます。[Samples Per Pixel] の調整時に、2 の累乗 (例:8、16、32、64) で増やすのが最適です。
レイ トレーシング機能を使用する
以下のセクションでは、ポストプロセス ボリュームと個々のライト プロパティを使用して、プロジェクトでレイ トレーシング機能を使用するための詳細を説明します。
ポストプロセス ボリューム
ポストプロセス ボリューム を使用すると、次の複数のレイ トレーシング機能を制御することができます。
- アンビエント オクルージョン
- グローバル イルミネーション
- 反射
- 透過処理
使用可能なポスト プロセス設定の詳細については、「レイ トレーシング プロパティおよびパス トレーサー プロパティ」 を参照してください。
ライト
ライトは、[Cast Ray Traced Shadows (レイ トレーシングによるシャドウをキャスト)] がオンの場合、すべてのタイプのライトでソフト エリアシャドウのキャストをサポートします。ライトのソフト シャドウイングは、光源のサイズとシャドウキャスティング オブジェクトからの距離に基づきます。
シャドウのソフトネスを制御するには、次のプロパティを調整します。
- ディレクショナル ライトでは、Source Angle を設定します。
- ポイント ライトおよびスポット ライトでは、Source Radius を設定します。
- 矩形ライトでは、Barn Door Angle と Barn Door Length を設定して形状を決め、シャドウのソフトネスをソフトにします。
スカイ ライト
スカイ ライティングは、Cast Ray Traced Shadow が有効で、Source Type が指定されている場合、ソフト アンビエント シャドウイングをサポートします。スカイ ライトは、レベルの遠方の部分をキャプチャして、それをライトとしてシーンに適用します。
レイ トレーシングによるグローバル イルミネーションをスカイ ライティングで機能させるには、実験的コンソール変数 r.RayTracing.GlobalIllumination.EvalSkyLight
を有効にします。
スタンドアローンのレイ トレーシングによるスカイ ライトは非推奨となり、プロジェクト設定は削除されました。コンソール変数 r.RayTracing.SkyLight 1
を設定すると有効にすることができます。
パフォーマンスおよびデバッグ
次のセクションでは、プロジェクトでハードウェア レイ トレーシングのパフォーマンスをデバッグおよび調査するために使用できる開始点と基本的なツールについて説明します。
GPU 統計情報
stat (統計情報) コマンド GPU Stats
を使用すると、レイ トレーシング機能に関連する GPU パフォーマンスを確認できます。このコマンドにより、有効になっているレイ トレーシング機能に関する関連情報、およびその時点のシーン ビューで各要素のレンダリングにかかっているフレーム時間が出力されます。
Stat D3D12RayTracing
stat コマンド Stat D 3D 12RayTracing
を使用すると、レイ トレーシングのリソースの使用状況を確認できます。
レイ トレーシング デバッグ表示モード
ハードウェア レイ トレーシングでは、レイ トレーシングの特定の領域や機能を確認するためのデバッグ ビュー モードを使用できます。デバッグ ビューにアクセスするには、レベル ビューポートで、[View Mode (表示モード)] ドロップダウンから [Ray Tracing Debug (レイ トレーシング デバッグ)] を選択します。
すべてのレイ トレーシング エフェクトを強制的に無効化する
シーン内のすべてのレイ トレーシング機能をすばやく有効または無効にするには、コンソール変数 r.RayTracing.ForceAllRayTracingEffects
を使用します。
- 0 では、すべてのレイ トレーシング機能が無効になります。
- 1 では、すべてのレイ トレーシング機能が有効になります。
- -1 では、以前に任意のコンソール変数によって設定された状態を使用して、ポストプロセス ボリュームで設定された値を使用します。(デフォルト)
ランタイム時にレイ トレーシングを切り替える
これは実験段階の機能です。
以下を WindowsEngine.ini コンフィギュレーション ファイルに追加することで、ゲームを PC で再起動せずにハードウェア レイ トレーシングを動的にオン / オフにすることができます。
r.RayTracing.EnabledOnDemand=1
r.RayTracing.Enable=1
- 以前の読み取り専用状態に合わせて、エンジンに対して適切なデフォルトを設定します。
r.RayTracing
は次の値にすることができるようになりました。
- 0 無効
- 1 常に有効
- 2 動的に有効
サポートされているレイ トレーシング機能
このリストは、現時点でサポートされている機能の内容の概要を把握できるようにするものであり、サポートされるレイ トレーシング機能をすべて記載しているリストではありません。
機能 | サポートされているかどうか (あり/なし/一部) | 追記 |
---|---|---|
レンダリング パス | ||
ディファード | あり | |
フォワード | なし | |
ライトのタイプ | ||
ディレクショナル ライト | あり | |
スカイ ライト | あり | |
ポイント ライト | あり | |
スポット ライト | あり | |
矩形ライト | あり | |
ライティング機能 | ||
エミッシブ サーフェス | 一部 | サーフェスでの反射はサポートされていますが、光の放出やシャドウのキャストはサポートされていません。 |
光伝達 | なし | 半透明シャドウは不透明型として扱われます。つまり、マテリアルを通じた、無色のシャドウやライトの伝達です。 |
エリア シャドウイング | あり | |
IES プロファイル | あり | |
ライト関数 | あり | |
ボリュメトリック フォグ | あり | コンソール変数
|
イメージ ベース ライティング (IBL) | あり | HDRI とスカイ ライトでサポートされています。 |
Lumen ハードウェア レイ トレーシング | あり | |
マテリアル:ブレンドモード | ||
不透明型 | あり | |
マスク | あり | |
半透明 | あり | |
異方性 | あり | |
マテリアル:シェーディング モデル | ||
デフォルト ライティング | あり | |
非ライティング | 一部 | |
マスク | 一部 | マスクされたシャドウのキャストがサポートされています。 |
サブサーフェスとサブサーフェス プロファイル | あり | |
統合済みスキン | 一部 | 動作しますが、結果は正確にはレイ トレーシングされません。ラスタ パイプラインを使用します。 |
クリア コート | あり | |
両面フォリッジ | あり | |
ヘア | 一部 | 動作しますが、結果は正確にはレイ トレーシングされません。ラスタ パイプラインを使用します。 |
クロス | 一部 | 動作しますが、結果は正確にはレイ トレーシングされません。ラスタ パイプラインを使用します。 |
マテリアル関数 | あり | |
両面 | あり | |
ワールド位置オフセット | あり | [Details (詳細)] パネルの Evaluate World Position Offset プロパティで、アクタごとに有効にします。スタティックメッシュ、インスタンス化されたスタティックメッシュ、階層インスタンス化スタティックメッシュがサポートされています。 |
ジオメトリ タイプ | ||
スケルタルメッシュ | あり | |
スタティックメッシュ | あり | |
Nanite 仮想化ジオメトリ | あり | コンソール変数
|
ジオメトリ キャッシュ (Alembic) | あり | |
ランドスケープ (Landscape) | あり | |
階層インスタンス化スタティックメッシュ (HISM) | あり | |
インスタンス化スタティックメッシュ (ISM) | あり | |
スプライン | あり | |
プロシージャル メッシュ | あり | このタイプのジオメトリをレイ トレーシングでレンダリングすると高い負荷がかかる可能性があります。 |
詳細度 (LOD) | あり | LOD の遷移時のディザリングはまだサポートされていません。 |
ビジュアル エフェクト (VFX) | ||
Niagara | 一部 | 現時点では、スプライト、リボン、メッシュのエミッタがサポートされています。 |
プラットフォーム サポート | ||
マルチビュー (VR および分割画面) | あり |