リアルタイム レイトレーシング

Unreal Engine 4 のレイトレーシングの概要です。

Windows
MacOS
Linux

レイトレーシングとは、フォトリアルなレンダリングを行うために映画、テレビ、ビジュアライゼーション分野で長い間使用されてきた手法です。それぞれのイメージやフレームをレンダリングするためには強力なコンピュータと時間が必要になります。映画やテレビの場合は、高品質の画像シーケンスのレンダリングのために数時間から数日かかることがありますが、その結果として現実の物とシームレスにブレンドすることができるリアルな 3D コンテンツを生み出すことができます。建築ビジュアライゼーション系の企業の場合、レイトレーシングを使ってリアルに表現することで、自動車業界向けに美しいコンテンツを作成したり、密集した住宅やオフィス ビルディングの最終的な外観を表示することができます。  

Unreal Engine 4 (UE4) のパワーと リアルタイム レイトレーシング (RTRT) を使えば、多数のオフライン レンダラにも負けない、絶妙なライティング エフェクトを使ってインタラクティブな体験をリアルタイムで生み出すことができます。レイトレーシング エフェクトは、エリアライトによるソフト シャドウイング、正確なアンビエントオクルージョン (AO)、インタラクティブなグローバル イルミネーション、リフレクションなどを生み出し、物体をより自然な形で表現します。

レイトレーシングのリアルタイム レンダリングは、Epic Games Launcher から利用可能な Archviz Interior サンプル プロジェクトの大きな特徴です。

Unreal Engine のレイトレーシング

UE4 のレイトレーシングは 2 つの技法で構成されています

  • ハイブリッド レイトレーサー は、レイトレーシング機能と既存のラスタ エフェクトを組み合わせたものです。

  • パストレーサー はリファレンス レンダリングを生み出します。

レイトレーサー

レイトレーサーを使うと、プロジェクトにおいてシャドウ、AO、リフレクション (反射)、半透明表現、インタラクティブ グローバル イルミネーションのすべてに対して、リアルタイムでのレイトレースを可能にします。少ないサンプルをノイズ削減アルゴリズムと組み合わせて使用します。知覚的にはほぼパス トレーサーのグラウンド トゥルース結果です。

パストレーサー

パストレーサーは偏りのない、物理ベースのパストレーサーで、シーンのリファレンス画像のレンダリングに適しています。オフライン レンダラと同様の動作で、その時点の状態で、時間をかけてサンプルを集め、最終ピクセルではなく、シーンのグラウンド トゥルース レンダリングの生成に便利です。

詳細は、「パストレーサー 」を参照してください。

プロジェクトでレイトレーシングを有効にする

次のステップに従って、プロジェクトでレイトレーシングのサポートを有効にします。 

システム要件

オペレーティング システム

Windows 10 RS5 (Build 1809) or later

Windows のビルド番号を調べるには、Windows の検索ボックスに「winver」と入力します。

GPU

DXR をサポートする NVIDIA RTX および一部の GTX シリーズ カード (最新のデバイス ドライバを使用)

詳細については、こちら を参照してください。

Unreal Engine のバージョン

4.22 以降

Unreal Engine レンダリング パス

ディファード パス (後述の「サポートされている機能 」を参照してください。)

DirectX12 とレイトレーシングを有効にする

  1. メイン メニューの [Edit (編集)] メニューから [Project Settings (プロジェクト設定)] を開きます。

  2. [Platforms (プラットフォーム)] > [Windows (ウィンドウ)] で、[Default RHI (デフォルト RHI)] ドロップダウンで [DirectX 12] を選択します。

    EnableDX12Mode.png

  3. [Engine (エンジン)] > [Rendering (レンダリング)] で、[Ray Tracing (レイトレーシング)] をオンにします。

    ProjectSetting_EnableRT

    レイトレーシングを有効にするには、プロジェクトで Support Compute Skincache (スキンキャッシュの計算のサポート) を有効にする必要があります。有効になっていないと、有効にするかどうかを確認するメッセージが表示されます。[Yes (はい)] をクリックします。
    SupportSkinCache.png

  4. エンジンを 再起動 して、DX12 が有効なエディタを起動し、プロジェクトでレイトレーシングを有効にします。

リアルタイム レイトレーシング機能

レイトレーシングのシャドウ

レイトレーシングのシャドウ は、環境でのオブジェクトに対するソフト エリア ライティング エフェクトをシミュレートします。つまり、光源のサイズやソースの角度に基づいて、オブジェクトのシャドウは接地面の近くではシャープなシャドウになり、遠ざかると広がってソフトになります。

シャドウマップを使用したラスタシャドウ

レイトレーシングのソフトシャドウ

レイトレーシングのリフレクション

レイトレーシングのリフレクション (反射) (RTR) は、複数バウンスをサポートできる正確な環境反射をシミュレートします。

この例は、レイトレーシングの反射を 1 回バウンスさせた場合と複数回バウンスさせた場合の比較です。複数回バウンスさせると、シーンの反射面の間にリアルタイムの映り込みが作成されます。

レイトレーシングよる反射バウンスが 1 回

レイトレーシングの反射バウンスが複数回

対照的に、Screen Space Reflections (SSR) アクタ、Planar Reflections アクタ、Reflection Capture アクタは動的にシーン全体をキャプチャできず、こうした他の反射メソッドに存在する制限もありません。

比較すると、SSR は 1 次反射バウンスのみで、画面上での視覚的な表現に制限があります。一方、RTR は 2 次反射以降のバウンスが可能であり、視覚表現に制限もありません。つまり、本の側面、カメラの後ろの床の映り込み、窓から差しこんで床で反射した追加の光を視覚的に表現することができます。

Screen Space Reflections

レイトレーシングのリフレクション

レイトレーシングの半透明表現

レイトレーシングの半透明表現 (RTT) は、透明の表面上で物理的に正確な反射、映り込み、屈折を行うことで、ガラスや液体のマテリアルを正確に表現します。

ラスターによる半透明表現

レイトレーシングの半透明表現

レイトレーシングのアンビエント オクルージョン

レイトレーシングのアンビエント オクルージョン (RTAO) は、壁の隅や端の陰影表現、皮膚の割れ目やしわに奥行きを付けるなど、接地したオブジェクトや環境光を遮る領域を正確にシャドウイングします。

スクリーンスペース アンビエント オクルージョン

レイトレーシングのアンビエント オクルージョン

スクリーン スペース アンビエントオクルージョン (SSAO) と比較すると、RTAO はオブジェクトを接地させてシーンに奥行きを加えるなど、間接的に照らされている領域に対して自然なシャドウを追加します。

レイトレーシングのグローバル イルミネーション

レイトレーシングのグローバル イルミネーション (RTGI) は任意に光源から直接照らされていないシーンの領域に対して、インタラクティブにバウンスさせた照明をリアルタイムで追加します。

シーンライティングのみ

レイトレーシングのグローバルイルミネーション|Brute Force メソッド

ファイナル ギャザー メソッド

本機能は現在実験的な機能です。

ランタイム パフォーマンスを向上するために、ファイナルギャザーに基づく手法を使用して、レイトレーシングに基づくもう 1 つのグローバル イルミネーション メソッドが開発されました。この技術は 2 パス アルゴリズムです。最初の段階ではシェーディング ポイントを割り当てます (元の RTGI メソッドと同様) が、ピクセルあたり 1 サンプリングの固定レートです。この段階で、シェーディング ポイント サンプリングの履歴 (最大 16) が画面スペースに保存されます。2 番目の段階では、アリゴリズムはシェーディング ポイントの履歴に再接続して、メソッドの負荷を償却します。。

元の RTGI アルゴリズムは、パストレーサー のグラウンド トゥルース リファレンスをエミュレートするように設計されており、パストレースを実行した結果に似ています。新しいメソッドではパフォーマンスのためにエミュレーションを下げたため制限が発生します。現時点では間接ディフューズ GI のシングル バウンスのみとなり、前のフレームの GI サンプリング データはゴーストの影響を受けやすくなります。

[Types] ドロップダウン メニューを使って、ポストプロセス ボリュームの [Ray Tracing Global Illumination] セクションから [Final Gather (ファイナル ギャザー)] メソッドを有効にします。

一時的なゴースト アーティファクトに対処するために、以下のコマンドを使用してシーン空間の拒否条件を変更できます。

r.RayTracing.GlobalIllumination.FinalGatherDistance [number of units] 

現時点では、元のシェーディング ポイントから測定したワールドの距離に基づいています。この拒否条件のデフォルトは 10 単位です。

また、ファイナル ギャザリング メソッドを効果的に使用するには、ポストプロセス ボリュームで以下の設定が必要です。

  • Max Bounces (最大バウンス):1

  • Samples Per Pixel (ピクセル単位のサンプリング):16

1 を超えるその他の Max Bounce は警告なく破棄されます。Samples Per Pixel を調整するときは 2 のべき乗 ( 8, 16, 32, 64 など) に増やすのが最善です。

レイトレーシング機能を使用する

ポストプロセス ボリューム

ポストプロセス ボリューム をシーンで使用して、レイトレーシングおよびパストレーシング機能とプロパティを制御します。内側と外側のさまざまな領域にボリュームを追加して、必要な機能と設定を適用できます。

クリックしてフルサイズ表示。

使用できるポストプロセス設定の詳細については、「レイトレースの設定 」を参照してください。

ライト

レイトレーサーは UE4 で利用可能なすべてのタイプのライトに対するソフトエリアシャドウをサポートします。

レイトレーシングのシャドウ:指向性ライト | ソースアングル:0.5357

レイトレーシングのシャドウ:指向性ライト | ソースアングル:1.25

次の項目を調整してシャドウのソフトネスを制御します。 

  • 指向性ライトで、[Source Angle (ソース アングル)] を設定します。

  • ポイント ライトとスポット ライトで、[Source Radius (ソース半径)] を設定します。 

  • 矩形ライトで、[Barn Door Angle (バーンドアの角度)][Barn Door Length (バーンドアの長さ)] を設定して、形状を決め、シャドウのソフトネスをソフトにします。

スカイ ライト

スカイ ライト で、[SLS Captured Scene (SLS キャプチャ シーン)] または [SLS Specified Cubemap (SLS 指定キューブマップ)] とレイトレーシングのシャドウイングを使用して、レベルにある離れたパーツをキャプチャし、シーンにライトとして適用します。[Cast Raytraced Shadow (レイトレーシングのシャドウをキャスト)] をオンにして、シーンでスカイ ライティングを有効にします。  

RT_SkyLight

RTGI とスカイ ライトを連動させるには、実験的コンソール変数 r.RayTracing.GlobalIllumination.EvalSkylight を使用してスカイ ライティングを評価します。

レイトレーシングのアンビエント オクルージョン

ポストプロセス ボリューム をシーンで使用して、レイトレース アンビエント オクルージョン をコントロールします。[Ambient Occlusion (アンビエント オクルージョン)] で、エフェクトの [Intensity (強度)][Radius (半径)] を設定して、サイズと強度をコントロールできます。 

レイトレーシングのアンビエント オクルージョン | 強度: 0.5

レイトレーシングのアンビエント オクルージョン | 強度: 0.85

パフォーマンスおよびデバッグ

GPU 統計情報

コンソール コマンド GPU Stats を使用して、関連するレイトレーシングの GPU パフォーマンスをチェックします。有効なレイトレーシング機能の関連情報とその時点のビューでレンダリングするのにかかるフレーム時間が表示されます。 

GPUStats1

D3D12RayTracing 統計情報

コンソール コマンド Stat D3D12RayTracing を使用して、関連するレイトレーシング リソースの使用状況をチェックします。

StatD3D12RayTracing

レイトレーシング デバッグ ビュー モード

レベル ビューポートで、[View Mode (ビュー モード)] ドロップダウンから、[Ray Tracing Debug (レイトレーシング デバッグ)] を選択して、利用可能なデバッグ ビュー モードから選びます。 

クリックしてフルサイズ表示。

ノイズ除去の品質を評価する

次の操作を実行して、さまざまなレイトレーシング エフェクトのノイズ除去の品質をを評価します。 

  • テンポラル アンチエイリアス および 被写界深度 (DOF) を無効にします。

    • これらの設定は Unreal Engine のレンダラのでリニア カラー空間で実行されています。シャドウとハイライトの間のエイリアスを回避するために、いくつかの HDR カラー重み付け手法を使用しています。

  • ノイズ除去後のピクセル単位のシンブル サンプリングとノイズ除去前のピクセル単位のシングル サンプリングを比較します。 

    • エネルギーの違いとノイズ除去によるシャドウの暗すぎが原因で、結果は正しく見えません。ただし、トーンマッパの非線形操作により、ピクセル単位のシングル サンプリングは明るく見えます。 

    • さらに比較しやすいように、ノイズ除去後の シングル サンプリングをノイズ除去前の マルチ サンプリングに対してピクセル単位でテストする必要があります。

ノイズ除去後のピクセル単位のシングル サンプリング

ノイズ除去前のピクセル単位のシングル サンプリング

ノイズ除去後のピクセル単位のシングル サンプリングは、情報が失われるため安全ではありません。しかし、ノイズ除去前のピクセル単位のマルチ サンプリングと比較すると、結果は整合しています。 

また、ノイズ辞去はピクセルごとに最大 4 つのサンプリングをサポートすることに留意してください。これにより品質が向上し、ノイズを除去せずにピクセル単位のマルチ サンプリングの結果とより一致するようになります。

その他の注意事項

  • シーンでのレイトレーシングの有効無効を速く切り替えるにはコマンド r.raytracing.ForceAllRayTracingEffects を使用します。0 はすべてのエフェクトを無効にします。1 はすべてのエフェクトを有効にします。-1 は前の設定を有効にしてプロジェクトで使用します。

追記

マテリアル 

  • マテリアル コストのテスト

    • 複雑なマテリアルはレイトレーシング機能のパフォーマンスに影響を与えることがあります。コンソール コマンド r.RayTracing.EnableMaterials でパフォーマンス インパクトをテストします。

  • Ray Tracing Quality Switch Replace ノード

    • このノードは、RTGI、RT 反射、RT 半透明などの機能に影響を与えるようなマテリアルから複雑度の低いマテリアルに置き換えます。これは、すべてのレイトレーシング エフェクトに影響するグローバルな変更です。

    • この例では Normal ロジック パスがシーンで表示される通りにレンダリングされます。レイトレーシング パスは単純なロジックを使用して、レイトレーシングで RTGI やリフレクションなどのエフェクトを実装しますが、テクスチャ、法線、粗さのオーバーヘッドが高くなる可能性があります。

      クリックしてフルサイズ表示。

  • レイトレーシングのシャドウを投影します。

    • Cast Ray Traced Shadows のチェックボックスで、このマテリアルがレイトレーシングのシャドウを投影するかどうかを設定します。この設定は、マテリアルがレイトレーシングのシャドウを投影するかどうかに関係なく、ジオメトリ マテリアルに割り当てられた特定の要素を制御するのに適しています。

リフレクション

  • 複数回の跳ね返る反射をレンダリングする場合、レイトレーシング リフレクションの負荷が高くなる場合があります。反射のバウンスが複数回ではない場合、内部の反射マテリアルは黒く表示されます。r.RayTracing.Reflections.ReflectionCaptures を有効にして、反射キャプチャ アクタをレイトレース反射の最後のバウンスとして使用します。

スライダをドラッグすると単一のバウンス RTR、反射キャプチャ フォールバックを行わない 2 つの RTR バウンス、反射キャプチャ フォールバックを行う単一の RTR バウンスが表示されます。

半透明オブジェクトを反射に含む

Post Process Volume の設定の [Include Translucent Objects] から [Rendering Features] > [Ray Tracing Reflections] を有効にして、半透明マテリアルのあるオブジェクトを有効にしてレイトレーシング反射で表示されるようにします。

反射の屈折率 (IOR)

レイトレーシングに屈折を設定および使用するとき、Specular マテリアル入力を使用して半透明マテリアルで屈折または IOR を調節します。Unreal Engine のレイトレーシング機能は、スペキュラ値および IOR 値が組み合わさっており別々に定義することができない Disney BRDF model に続くものです。

マテリアルのスペキュラ値を定義し、ポストプロセス値で屈折プロパティを設定するとき、半透明マテリアルに対して IOR を適切に調節することができます。

ラスターによる半透明表現 | 疑似屈折あり

レイ トレーシングによる半透明表現 | 屈折あり

マテリアル設定:

  • マテリアルの [Two Sided] を有効にする

    • これは必須ではありませんが、片面/非多様体ジオメトリは、ボリューム トラッキングや光伝達のスタックをうまく処理できません。両面マテリアルは正確な結果を提供し、レイ トレーシングによる半透明表現を使用する場合、すべての半透明マテリアルを処理するための推奨方法です。

  • [Lighting Mode]Surface Translucency Volume または Surface Forward Shading に設定します。

  • Specular 入力を使って屈折率を調整します。

    • Refraction 入力はレートレースによる半透明マテリアルに影響を与えません。

ポストプロセス ボリューム レンダリング機能の設定:

  • [Translucency] カテゴリで、[Type][Ray Tracing] に設定します。

  • [Ray Tracing Translucency] カテゴリで、以下の設定を行います。

    • Refraction: Enabled

    • Max Refraction Rays: 使用する光線の最大数を設定します。反対側まで光が通過するのに十分な高い値を設定します。

マテリアル インスタンスを使ってスペキュラ値を操作して簡単に IOR を調節します。

屈折率を調節する

発生する屈折率と光の移動は、マテリアルの Specular 入力とポストプロセス ボリュームの Max Refraction Rays および Refraction を使って調節することができます。

以下の半透明マテリアルは、スペキュラ値 0.04 を使って、マテリアルに光を通すために最大 6 本の屈折光線を使用しています。以下の比較では、半透明マテリアルに対して屈折を有効/無効にした場合の違いを示しています。

レイトレーシングの屈折: | オフ

レイトレーシングの屈折: | オン

Specular 入力に適用した様々な値が半透明マテリアルの屈折率に影響を与えます。

スライダーをドラッグすると、0.01、0.05、0.1 に適用される屈折量が示されます。

ポストプロセス ボリュームの Max Refraction Rays プロパティの様々な値もマテリアルへの光の移動に影響します。1 本のレイ (光線) では十分にマテリアルを避けきれないので暗くなります。レイの数を増やすと、屈折したガラスを通してオブジェクトを見ることができます。ただし、使用するレイの数によっては、暗いままの領域もあります。レイを増やすと、確実にボリュームを避けることができます。

スライダーをドラッグすると、1、3、5 屈折レイの結果が示されます。

片面のマテリアル屈折

片面マテリアルを使用することでレイトレース屈折を行うことが可能できますが、両面マテリアルの物理的に正確な結果に類似するものの及びません。

レイ トレーシングによる半透明表現 | 片面マテリアル | 屈折あり

レイ トレーシングによる半透明表現 | 両面マテリアル | 屈折あり

ポストプロセス ボリューム プロパティ Max Refraction Rays を片面と両面のマテリアルに使用して、ボリューム内でライトを移動させることができます。ただし、正しい結果が表示されるのは両面マテリアルのみです。レイトレーシング機能を使って すべての 半透明マテリアルを処理する方法として推奨します。

サブサーフェス プロファイル マテリアル用に光の伝達

光源の Transmission プロパティを有効にすると、サブサーフェス プロファイル マテリアル上での光の伝達が可能になります。

ラスター サーフェス プロファイル | 光の伝達

レイ トレーシング サブサーフェス プロファイル | 光の伝達

レイトレーシング シャドウ演算処理中、媒体を通して、シャドウを投影するライトまでの予想されるボリュメトリック スキャタリング距離のを計算するために、散乱シミュレーションが実行されます。スキャタリング距離は、イン スキャタリング効果を計算するためにライティング中に使用されます。

スカイ ライト

天空など、遠くのオブジェクトのキャプチャリングは必要な場合以外はスカイライトに対して無効にします。パフォーマンスの改善とシーンの最適化につながります。UE4 の BP_SkySphere の場合、このオプションはデフォルトで無効になっているため、空から反射を行うと期待したものと異なります。[Details (詳細)] パネル プロパティの [Visible in Ray Tracing (レイトレーシングで表示)] のチェックボックスで有効と無効を切り替えて、オブジェクトの効果を調節します。

レイトレーシング機能の最適化

  • リフレクションと半透明の最大ラフネスを設定する

    • Max Roughness を使って、マテリアル上でのレイトレーシングのリフレクションの閾値を設定します。これはポストプロセス ボリューム内、またはコンソール コマンド r.RayTracing.Reflections.MaxRoughness を使用して実行できます。

  • グローバル イルミネーション、リフレクション、半透明で最大レイトレース距離を設定する

    • これは各機能に対して最大レイトレース距離を設定し、シーンでのコストと寄与度を低下させます。

    • コンソールで、各レイトレース機能に対する MaxRayDistance コンソール変数を設定します。R.RayTracing.* に変数があります。

  • RTGI の最適化

    • [Screen Percentage] と [Sample Per-Pixel] のデフォルトはそれぞれ「50」と「4」になりました。別のデフォルト値を使用するには、コンソール コマンドの r.RayTracing.GlobalIllumination.ScreenPercentager.RayTracing.GlobalIllumination.SamplesPerPixel を使用します。

    • GI へのライト効果は、ライトの Affect Global Illumination プロパティで有効無効の切り替えができます。

レイトレーシングでのジオメトリの注意事項

  • フォリッジやフェンスなど、小さな穴や細かな凹凸があるジオメトリはパフォーマンスに影響を与えることがあります。 

  • 室内環境は室外よりもレンダリングが遅くなります。

    • 例えば、外から光が入るとき、直接光が当たる領域は、間接光が当たる点より速くなります。 

    • また、リフレクションや半透明など、レイトレーシング機能が使用されている場合にさらに考慮する必要があります。

サポートされているレイトレーシング機能

このリストは現時点でサポートされている内容を示すものであり、Unreal Engine 4.23 でサポートされるレイトレーシング機能をすべて包括しているわけではありません。

機能

サポート (あり/なし/一部)

追記

レンダリング パス

ディファード

あり

フォワード

なし

ライトの種類

指向性ライト

あり

スカイ ライト

あり

ポイント ライト

あり

スポット ライト

あり

矩形ライト

あり

ライティング機能

エミッシブ サーフェス

一部

サーフェスでの反射はサポート、光の放出やシャドウのキャストは未サポート

光伝達

なし

半透明シャドウは不透明型として処理されます。つまりマテリアルを通じた、色のないシャドウやライトの伝達です。

エリア シャドウイング

あり

IES プロファイル

あり

ライト関数

なし

ボリュメトリック フォグ

なし

イメージ ベースド ライティング (IBL)

あり

スカイライトで HDRI をサポート。

マテリアル:ブレンド モード

オパック

あり

マスク

あり

半透明

あり

アニソトロピック

あり

マテリアル:シェーディング モデル

デフォルト ライティング

あり

ライティングなし

一部

マスク

一部

マスクされたシャドウのキャストをサポート

サブサーフェスとサブサーフェス プロファイル

あり

Preintegrated Skin

一部

動作しますが、結果が正確にレイトレースされていません。ラスタ パイプラインを使用します。

クリアコート

あり

UE 4.25 では Clear Coat シェーディング モデルに対して大幅な改善が行われました。

両面フォリッジ

あり

ヘア

一部

動作しますが、結果が正確にレイトレースされていません。ラスタ パイプラインを使用します。

クロス

一部

動作しますが、結果が正確にレイトレースされていません。ラスタ パイプラインを使用します。

マテリアル関数

あり

両面

あり

ワールド位置オフセット

あり

スタティックメッシュはアクタごとに有効にされます。

ジオメトリ タイプ

スケルタルメッシュ

あり

スタティックメッシュ

あり

ジオメトリ キャッシュ (Alembic)

あり

ランドスケープ

あり

階層インスタンス スタティック メッシュ (HISM)

あり

インスタンス メッシュ (ISM)

あり

スプライン

なし

プロシージャルなメッシュ

あり

このジオメトリ タイプはレイトレーシングでレンダリングすると高負荷の場合があります。

BSP ブラシ

なし

レベルオブディテール (LOD)

あり

LOD の遷移時のディザリングは未サポート。

ビジュアル エフェクト (VFX)

ナイアガラ

一部

スプライト、リボン、メッシュがサポートされるようになりました。

カスケード

なし

プラットフォーム サポート

マルチビュー (VR と分割画面)

あり

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback