ハードウェア レイ トレーシングのヒントとコツ

ハードウェア レイ トレーシング機能を使用したプロジェクトの開発に役立つトピック集です。

Choose your operating system:

Windows

macOS

Linux

このページでは、 ハードウェア レイ トレーシング 機能で使用できる推奨事項について説明します。

マテリアル 

以下の推奨事項は、マテリアル およびハードウェア レイトレーシング機能に適用されます。

Ray Tracing Quality Switch Replace ノード

このノードを使用して、レイ トレーシング グローバル イルミネーション、反射、透過処理などの機能の負荷を下げるために、マテリアル ロジックのパーツ全体を、それほど複雑ではないロジックに置き換えます。マテリアルでこれらを適用すると、レベルで適用されているこのマテリアルでのレイ トレーシングに影響します。

次の例で、ディフューズ、ラフネス、および法線マップ テクスチャを使用した 法線 ロジック パスを示します。レイ トレーシング パスでは、法線マップ テクスチャを除去し、ラフネス向けの複雑性の低いロジックを使用します。この変更により、レイ トレーシング エフェクト、特にレイ トレーシング グローバル イルミネーションと反射を使用した場合のマテリアルのレンダリングの負荷が低下します。

画像をクリックするとフルサイズで表示されます。

マテリアルごとのレイ トレースによるシャドウ

[Cast Ray Traced Shadows (レイ トレースによるシャドウをキャスト)] チェックボックスを使用して、このマテリアルがレイ トレースによるシャドウをキャストするかどうかを設定します。これは、レイ トレースによるシャドウをキャストする必要があるか、またはする必要がないジオメトリに割り当てられているマテリアルの特定の要素を制御するうえで役立ちます。

マテリアルの負荷をテストする

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

透過処理の屈折率 (IOR)

レイ トレーシングで屈折のマテリアルを設定する場合は、マテリアルの Refraction 入力が半透明マテリアルでの屈折率 (IOR) を制御します。

屈折の量は、オブジェクトに適用されるマテリアルで設定されます。レベルでは、ポスト プロセス設定により、屈折がレイ トレースされるかどうか、および可能な屈折バウンスの最大回数を制御します。

ラスタ透過処理| 偽の屈折

レイ トレースによる透過処理| 両面マテリアル| 屈折あり

マテリアル設定:

  • 使用しているマテリアルで [Two Sided (両面)] を有効にします。

    • これは必須ではありませんが、片面/非多様のジオメトリには、ボリューム トラッキングまたは光線メディア スタッキングを処理するための適切な手段がありません。両面マテリアルでは正確な結果が提供されるので、レイ トレーシングによる透過処理を使用している場合に、すべての半透明マテリアルを処理するための推奨方法は両面マテリアルです。

  • [Lighting Mode (ライティング モード)][Surface Translucency Volume (サーフェス透過処理ボリューム)] または [Surface Forward Shading (サーフェス フォワード シェーディング)] に設定します。 屈折率を制御するには [Refraction] 入力を使用します。

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

  • [Translucency (透過処理)] カテゴリで、[Type (タイプ)][Ray Tracing (レイ トレーシング)] に設定します。

  • [Ray Tracing Translucency (レイ トレーシングによる透過処理)] カテゴリで、次のように設定します。

    • Refraction (屈折): 有効

    • Max Refraction Rays (屈折光線の最大数):使用する光線の最大数を設定します。光が反対側まで通り抜けることができるように十分大きい値である必要があります。

[マテリアル インスタンス]() を使用して、IOR 動的に制御してインスタンスの結果が得られるようにします。

屈折の量を制御する

屈折量および発生する光の通過は、マテリアルでの Refraction 入力を使用することで、制御されます。ポストプロセス ボリューム設定では、[Refraction (屈折)] チェックボックスをオンにし、Max Refraction Rays を 1 より大きい値に設定する必要があります。

以下の半透明のマテリアルは、屈折入力値「0.04」を使用しています。このポスト プロセスでは、Max Refraction Rays を「6」に設定することで、半透明のマテリアルを光が通過するようにしています。

レイ トレーシングによる屈折:| 無効

レイ トレースによる透過処理| 両面マテリアル| 屈折あり

以下の例では、マテリアルの異なる屈折入力値が屈折率にどのような影響を及ぼすかを示しています。

スライダーをドラッグすると、入力が 0.01、0.05、0.1 である場合の屈折の量が示されます。

次の例では、ポストプロセス ボリュームの Max Refraction Rays の値が半透明マテリアルを通り抜ける光のトランスポートに影響を及ぼします。単一光線を使用すると、マテリアルから逃れるのに十分なバウンスがないため、暗いままか黒く表示されます。最大屈折光線数を増やすと、マテリアルから光が逃れる可能性が増加します。すべてのマテリアルまたは光線に最大屈折光線数が必要であるわけではありませんが、より多くの最大屈折光線が必要な場合、一部のマテリアルは必要以上に暗く見える場合があります。

スライダーをドラッグすると、屈折光線数が 1、3、5 である場合の結果が示されます。

片面および両面マテリアルの屈折

レイ トレースされた屈折は、片面および両面マテリアルの両方で動作し、光がオブジェクトのボリュームを通り抜けることができます。片面マテリアルは屈折をサポートしているものの、両面マテリアルは物理的に正確な結果を提供するため、レイ トレース透明性を使用するすべての半透明マテリアルで推奨されます。

レイ トレースによる透過処理| 片面マテリアル| 屈折あり

レイ トレースによる透過処理| 両面マテリアル| 屈折あり

ポストプロセス ボリュームの Max Refraction Rays プロパティを使用して、光の通り抜けで使用する必要のある屈折バウンス数を設定します。

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

サブサーフェス プロファイル を使用するマテリアルでの光伝達は、光源にレベルに配置されているアクタで Transmission プロパティが有効になっている場合に可能です。

ラスタ サブサーフェス プロファイル| Light Transmission

レイ トレーシングによるサブサーフェス プロファイル| Light Transmission

レイ トレーシングによるシャドウの計算時に、メディアを通過して、シャドウをキャストしているライトまでの、想定されるボリュメトリック散乱距離を計算するために、小規模な散乱シミュレーションが実行されます。この散乱距離は、散乱内でのライトの影響を計算するためにライティングで使用されます。

反射

次の推奨事項は、 反射環境 およびハードウェア レイ トレーシング機能に適用されます。

レイ トレーシング反射キャプチャ フォールバック

レイ トレーシングによる反射は、反射の内に反射を作成する複数のバウンスをレンダリングする場合に、負荷が高くなることがあります。複数のバウンスがなければ、内部反射のマテリアルは黒色で表示されます。より負荷の低いソリューションは、レイ トレースされた反射を使用して、最後のバウンスとしてレベルに配置された Reflection Capture アクタにフォールバックします。

コンソール変数 r.RayTracing.Reflections.ReflectionCaptures で Reflection Capture フォールバックを有効にします。

スライダーをドラッグすると、単一バウンスの RTR、反射キャプチャのフォールバックなしで 2 回バウンスの RTR、反射キャプチャのフォールバックありの単一バウンスが示されます。

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

[Ray Tracing Reflections (レイ トレーシングによる反射)] カテゴリの [Post Process Volume] の設定にある [Include Translucent Objects (半透明オブジェクトを含める)] をオンにすることで、レイ トレーシングによる反射で表示される半透明マテリアルが使用されているオブジェクトを有効にします。

スカイ ライト

スカイ ドーム メッシュのような遠くのオブジェクトのキャプチャは、必要でない限り、スカイ ライトの影響に対しては無効にします。これによりパフォーマンスが節約され、シーンを最適化します。

スターター レベルに含まれる BP_SkySphere スカイ ドーム メッシュおよびブループリントは、デフォルトでこのスカイ ライトの影響を無効にします。これにより、空からの反射が予想とは異なる外観になるものの、ハードウェア レイ トレーシングによりパフォーマンスを節約できます。

オブジェクトの影響は、レベルでオブジェクトを選択すると、[Details] パネルの [Visible in Ray Tracing (レイ トレーシングで可視化)] チェックボックスで有効/無効を切り替えることができます。

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

  • 小さな穴や細かい凹凸があるジオメトリはパフォーマンスに大幅に影響を与えることがあります。たとえば、葉の多い木や茂み、または葉で覆われた格子やフェンスなどが挙げられます。 

  • 室内環境のレンダリングは、屋外環境よりも所要時間が長くなります。これは、多くの場合、光は外から入ってきて、室内を照らすために十分適切にバウンスすると予測されるためです。光に直接照らされる領域は、間接的に照らされる領域よりも迅速にレンダリングされます。また、こういった状況では、反射、透過処理などその他のレイ トレーシング機能に関する考慮事項ことが、パフォーマンスに影響します。

ハードウェア レイトレーシング機能の一般的な最適化

  • [Reflections] および [Translucency Maximum Roughness (透過処理の最大ラフネス)] を設定する

    • Max Roughness を使用して、マテリアルでのレイ トレースによる反射のしきい値を設定します。これはポストプロセス ボリューム内のプロパティ、またはコンソール コマンド r.RayTracing.Reflections.MaxRoughness を使用して設定します。

  • [Global Illumination]、[Reflections]、および [Translucency] の [Maximum Ray Distance (光線の最大距離)] を設定する

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

    • コンソールを使用して、レイ トレースによるこれらの各機能に対して MaxRayDistance コンソール変数を設定します。これらの変数は r.RayTracing.* にあります。

  • レイ トレースによるグローバル イルミネーションの最適化

    • [Screen Percentage (スクリーン比率)] と [Samples Per Pixel (ピクセルあたりのサンプル数)] のデフォルト値はそれぞれ 504 です。異なる値が必要な場合は、コンソール コマンド r.RayTracing.GlobalIllumination.ScreenPercentage`および r.RayTracing.GlobalIllumination.SamplesPerPixel` を使用します。

    • グローバル イルミネーションに対するライトの影響は、[Affect Global Illumination (グローバル イルミネーションに影響)] の有効/無効を切り替えることで、各 Light アクタに対して設定できます。

レイ トレーシングの立体角および距離ベースのカリング

レイ トレーシングを使用しているシーンでは、カメラ ビューの外側のオブジェクトがシーン内に存在する必要があり、特に、反射率の高いサーフェスでは、レンダリングにかかる負荷が増大することがあります。表示されていないまたは不要なオブジェクトをカリングすると、最適化に役立ち、パフォーマンスをある程度回復させることができます。

レイ トレーシングでは、シーン内のオブジェクトをカリングする次の複数の方法が提供されています。カメラからの距離でカリングする方法と、カメラの背後の領域を投影し (つまり、角度)、個々のオブジェクトの境界をテストして、カリングする、まったくカリングしないか、あるいはその両方を同時に行うかを判断する方法があります。使用するカリングのタイプを設定するには、コンソール変数 r.RayTracing.Culling で以下のいずれかの値を使用します。

  • 0:カリングは無効です。

  • 1: カメラの背後にあるオブジェクトを、距離と立体角でカリングします (デフォルトのカリング方法)

  • 2: カメラの前および背後にあるオブジェクトを、距離と立体角でカリングします

  • 3: カメラの前および背後にあるオブジェクトを、距離 または 立体角でカリングします

値が大きいほど、ワールド内のより多くのオブジェクトをカリングします。

また、レイ トレーシングのコンソール変数 (r.RayTracing.*) では、2 つのコマンドを使用して、立体角によるカリング (角度および半径) を設定します。

  • Angle: オブジェクトの境界がテストされてカリングするかどうかが判断される、カメラの背後の投影領域の角度 (度単位) を設定します。この角度を大きくすると、多数のオブジェクトが積極的にカリングされます。

  • Radius: 指定された半径の外側にあるすべてのオブジェクトがカリングされます。デフォルトでは、この半径は 100 メートル (10000 cm、10000 Unreal 単位) に設定されています。

これらを使用したレイ トレーシングのコンソール変数の 2 つの例としては、r.RayTracing.Culling.Angle`と r.RayTracing.StaticMeshes.WPO.CullingRadius` があります。

距離ベースのカリングが必要な場合は、すべての Radius 変数を「-1」に設定する必要があります。

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

ハードウェア レイ トレーシング機能はノイズ除去アルゴリズムに大きく依存しています。このアルゴリズムでは、できる限り少ないピクセル数で、その他の部分を直感的に理解できるようにするためにノイズ除去で異なるものを構成します。次の手順を実行すると、さまざまなレイ トレーシング エフェクトのノイズ除去品質を評価できます。

  1. [Temporal Anti-Aliasing (テンポラル アンチエイリアシング)]および[Depth of Field (被写界深度)] を無効にする。

    1. どちらも、Unreal Engine のレンダラではリニア カラー空間で実行されていて、何らかの HDR カラー重み付け手法を行って、シャドウとハイライトの間のエイリアスを回避します。

  2. ノイズ除去ありのピクセルごとの単一サンプルとノイズ除去なしのピクセルごとの単一サンプルを比較する。 

    1. 結果はエネルギーの違いのため不正確に見え、ノイズ除去によりシャドウが暗くなりすぎます。しかし、ピクセルごとの単一サンプルは、トーンマッパのノンリニア処理により、明るく見えるようになります。 

    2. 適切に比較するために、ノイズ除去ありのピクセルごとの 単一 のサンプルと、ノイズ除去なしのピクセルごとの 複数 のサンプルをテストします。

ノイズ除去ありのピクセルごとの単一サンプル

ノイズ除去なしのピクセルごとの複数サンプル

ノイズ除去ありのピクセルごとの単一サンプルは、情報が欠落しているため、完全なものにはなりません。しかし、ノイズ除去なしのピクセルごとの複数サンプルと比較すると、結果に一貫性があります。 

ノイズ除去ありのピクセルごとの単一サンプルは、情報が欠落しているため、完全なものにはなりません。ただし、ノイズ除去なしのピクセルごとの複数サンプルと比較すると、結果に一貫性があります。

This page was written for a previous version of Unreal Engine and has not been updated for the current Unreal Engine 5.0 release.