反射キャプチャ

配置された反射プローブを使用して、反射をキャプチャし、反射マテリアルの表面に投影する方法の概要。

Reflection Capture アクタは、カバーする領域の静止画像をキャプチャするためにワールドに配置することができるプローブです。これは、キャプチャされたキューブ マップを周囲の反射マテリアルに再投影する反射方法です。ランタイムにパフォーマンス コストのかからない低コストの反射方法です。

反射キャプチャの形状

現時点において、球とボックスの 2 種類が有効な反射キャプチャの形状です。キューブマップにキャプチャされるレベルの部分、レベルが反射で再投影される形状、およびレベルのどの部分がそのキューブマップからの反射を受け取ることができるレベルの部分 (影響範囲) を制御するために、形状は非常に重要です。

球体形状

現時点で一番便利な形状は球です。反射されるジオメトリの形状と一致することはありませんが、不連続性や角がないため、エラーが均一です。

Sphere Shape

球体形状には、そのキューブマップによって影響を受ける可能性のあるピクセルと、レベルが再投影される球を制御するオレンジ色の影響半径があります。

小さいキャプチャが大きいキャプチャをオーバーライドするので、レベルの周りに小さなキャプチャを配置することで微調整ができます。

ボックス形状

ボックス形状の用途は非常に限られています。通常は廊下や四角い部屋のみに使用することができます。その理由は、ボックス内のピクセルのみが反射を見ることができ、同時にボックス内のすべてのジオメトリがボックスシェイプに投影されるため、重大なアーティファクトが生じる場合が多いからです。

Box Shape

選択時は、投影形状のオレンジのプレビューがボックスに表示されます。このボックスの外側の Box Transition Distance 内のレベルのみをキャプチャします。このキャプチャの影響は、ボックスの内側の遷移距離でもフェードインします。

反射環境を使用するためのレベル設定

リアルな反射を作成する最初のステップは、 ライトマップを使用して間接ライティングを含むディフューズ ライティングを設定することです。設定方法の詳細は「Lightmass」を参照してください。以下は、ビルド後に発生する Lightmass の間接ライティングの機能を妨げる一般的なエラーの一例です。

  • シャドウ キャスティング スカイボックス

  • LightmassImportanceVolume がない。

  • ライトマップ UV がない、または正しく設定されていない。

  • [World Properties][Force No Precomputed Lighting (ライティングの事前計算を非アクティブにする)]True に設定されている。

レベルの拡散色は反射環境によって反射するので、次の操作をすると最高の反射結果が得られます。

  • 直接光に照らされる領域とシャドウがかかった領域のコントラストが確実に大きく異なるようにしてください。

  • 明るいディフューズで照らされた領域は、反射の中でくっきり表れる部分であることを覚えておいてください。

  • 暗いシャドウが適用された領域では、反射が最も見えやすくなります。

  • 反射キャプチャが見るレベルを確認するためにスペキュラの表示フラグを無効にして Lit ビューモードを使用します。

反射環境とうまく機能するようにシーンのマテリアルを設定することは大変重要です。以下の点に留意してください。

  • 平面および鏡面サーフェスでは、シンプルな形状にキューブマップを結合すると誤差が生じます。

  • 曲線ジオメトリまたはラフなサーフェスではこのようなアーティファクトが不明瞭なため、結果に納得してしまいます。

  • 詳細な法線マップを使って、マテリアルのラフネス度を指定して平面な領域に使用することが重要です。これが反射をきれいに見せるコツです。

Curvy and Sharp

Flat and Rough

Flat and Sharp

滑らかな表面+曲線ジオメトリ:適切な反射

粗いサーフェス+平面ジオメトリ:適切な反射

滑らかな表面+平面ジオメトリ:反射が明らかにうまく調和していない

反射させたい領域に反射環境を配置します。シーンは球体へ再投影されるため、反射させたいレベルの一部が半径のちょうど内側へ含まれるように球体キャプチャを配置します。キャプチャはレベル ジオメトリに近くなりすぎないように配置してください。隣接するジオメトリの方が優位となり、後方に位置する重要な詳細がブロックされてしまいます。

光沢のある間接スペキュラ

技術的に言うと、反射環境は間接スペキュラを作成します。間接スペキュラは解析ライトを通じて受け取りますが、明るい方向への反射のみをいくつか作成します。スペキュラは、スカイライトを通じて空からも受け取りますが、スカイライト キューブマップはあまりに距離が遠いため、部分的な反射は作成されません。間接スペキュラは、レベルのすべての部分をすべての別の部分へ反射させます。ディフューズ反応をしないメタルなどのマテリアルには、特に重要な機能です。

ディフューズのみ

反射のみ

フル ライティング

Full Scene

反射環境はいろいろなポイントで静的レベルをキャプチャし、それを球体などシンプルな形状へ再投影します。アーティストは、Reflection Capture アクタを配置することでキャプチャする場所を選択できます。反射は配置調整のため、編集中はリアルタイムで更新されますが、実行時は静的です。 キャプチャしたレベルをシンプルな形状に投影すると、反射のおおよその視差がわかります。各ピクセルは複数のキューブマップをブレンドして最終結果を表示します。小さい ReflectionCapture アクタが大きいアクタをオーバーライドするので、必要に応じて領域の反射の視差精度の微調整ができます。ブループリントの部屋の真ん中にキャプチャを配置した後に、部屋の隅に小さなキャプチャを配置することによって反射を微調整します。

さまざまな光沢をもつマテリアルは、キャプチャしたキューブマップからブラー ミップマップの生成によってサポートされています。

Varying Glossiness

ただし、非常にラフなサーフェスへキューブマップ反射を使用すると、ローカル オクルージョンがないために大量のライトが漏れることになり、オーバーレイ表示の明るい反射となってしまいます。Lightmass で生成されるライトマップ データを再利用してこの問題を解決します。マテリアルの粗さに基づいて、キューブマップ反射効果をライトマップの間接スペキュラと混ぜ合わせますとても粗いマテリアル (完全にディフューズ) は、ライトマップの結果に収束します。 効果の混ぜ合わせは、本質的にライティング データ (キューブマップ) の非常に精度の高い部分と、別のライティング データ (ライトマップ) の低周波の部分を結合したものです。

これを正しく機能させるには、ライトマップに含むことができるのは間接ライティングのみにします。つまり、粗いサーフェスの反射品質を改善できるのは、固定ライトからの間接ライトのみということです。静的ライトタイプはライトマップに直接ライティングを放つため、反射キャプチャと一緒に使用しないでください。 ライトマップと混ぜるためには、マップに意味のある間接ディフューズ ライティングが必要であり、かつ結果を確認するためにライティングがビルド済みでなければならないことにご注意ください。

シャドウイングなしのラフな表面上での反射

シャドウイングあり

反射キャプチャのライティング ミックス

反射キャプチャ アクタを使用する場合、UE は反射キャプチャからの間接スペキュラと、ライトマップからの間接ディフューズ ライティングをミックスします。これにより、リークを減らします。反射キューブマップは空間の一点のみでキャプチャーされますが、ライトマップはそれを受けるすべてのサーフェスで計算されてローカルのシャドウイング情報を含むからです。

Reduce Lightmap Mixing On Smooth Surfaces:オフ

Reduce Lightmap Mixing On Smooth Surfaces:オン

ラフなサーフェスではライトマップをミックスするとうまく機能しますが、滑らかなサーフェスでは Reflection Capture アクタからの反射がスクリーン スペースの反射や平面反射のような他の方法からの反射に対応しなくなります。このため、ライトマップのミックスは非常に滑らかなサーフェスでは行われなくなりました。ラフネス値 0.3 のサーフェスは、ライトマップのミックスをフルに受けて、ラフネス値 0.1 以下でライトマップのミックスなしにフェードアウトします。また、反射キャプチャと SSR がはるかにうまく対応するようになり、2 つの間の遷移がわかりずらくなります。

ライトマップのミックスと既存コンテンツ

デフォルトで、ライトマップのミックスは有効にされているので、既存コンテンツに影響します。滑らかなサーフェスで反射のリークがあると、より目立ってしまいます。対応策としては、反射プローブを追加で配置してリークを減らす方法があります。古いライトマップのミキシング動作に戻すことも可能です。メイン メニュー パネルで [Edit] を開き、[Project Settings] を選択します。

Open Project Settings

手順は、[Edit] > [Rendering] > [Reflections] を選択し [Reduce lightmap mixing on smooth surfaces (スムース サーフェス上のライトマップ ミックスを減らす)] のチェックを外します。

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

UE コンソールで以下のコマンドを調節すると、ライトマップ ミックスの量の微調整ができます。

  • r.ReflectionEnvironmentBeginMixingRoughness (default = 0.1)

  • r.ReflectionEnvironmentEndMixingRoughness (default = 0.3)

  • r.ReflectionEnvironmentLightmapMixBasedOnRoughness (default = 1)

  • r.ReflectionEnvironmentLightmapMixLargestWeight (default = 1000)

リフレクション プローブの編集

リフレクション プローブを編集する場合、確実に正しい結果となるように様々なことを覚えておく必要があります。次のセクションで、その内容、そして最高品質の反射をプロジェクトで行う方法を説明します。

リフレクション プローブで Custom HDRI Cubemap を使う

リフレクション プローブは、反射データに使うキューブマップを指定するだけでなく、キューブマップの大きさも指定できます。これまで UE では、反射プローブが使用するクック済みのキューブマップの解像度をハードコード化していました。今回のリリースで、デベロッパーは必要とするパフォーマンス、メモリ、品質にするために最も適した解像度を選択できるようになりました。以下の画像では、Captured Scene オプションと Specified Cubemap オプションを使った場合の違いが分かります。

Captured Scene

Specified Cubemap

プロジェクトのリフレクション プローブにカスタム HDRI キューブマップの使用を指定するには、以下の手順を行います。

  1. まず、HDRI キューブマップ テクスチャが使用できる状態であることを確認してください。プロジェクトに HDRI キューブマップ テクスチャがなければ、スターター コンテンツに 「HDRI_Epic_Courtyard_Daylight」 というテクスチャがあります。

    Select HDRI Asset in the Content Browser

  2. [Visual Effects (ビジュアル エフェクト)] セクションの [Place Actors] パネルで、Sphere Reflection Capture アクタを選択してレベルへドラッグします。

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

  3. レベルに配置されている リフレクション プローブ アクタを選択して [Details (詳細)] パネルの [Reflection Capture (反射キャプチャ)]] セクションで、[Reflection Source Type (反射ソース タイプ)][Captured Scene (キャプチャしたシーン)] から [Specified Cubemap (指定したキューブマップ)] へ変更します。

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

  4. レベルでリフレクション プローブを選択した状態で、コンテンツ ブラウザから使用する HDRI テクスチャを選択します。次に、Reflection Capture アクタの Reflection Capture で、コンテンツ ブラウザから HDRI テクスチャを Cubemap 入力へドラッグします。

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

  5. メイン メニューの [Build] をクリックして [Build Reflection Capture] を選択して、指定した新しい HDRI キューブマップ テクスチャで使えるようにします。

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

リフレクション プローブの解像度の調整

Reflection Capture アクタに使用している HDRI キューブマップの解像度をグローバルに調整するには、以下の手順に従います。

  1. まず、メインツールバーから [Project Settings (プロジェクト設定)] を開いて、[Edit (編集)] オプション、次に **[Project Settings (プロジェクト設定)] を選択します。

    Open Project Settings

  2. [Project Settings (プロジェクト設定)] メニューから [Engine (エンジン)] > [Rendering (レンダリング)] セクションの [Reflections] オプションを開きます。[Reflection Capture Resolution] オプションで、指定した HDRI キューブマップの大きさの増減を調節することができます。

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

    キューブマップ解像度は 2 のべき乗 (16、64、128、256、512、1024) でのみ機能します。2 のべき乗以外の値を使用すると、使用可能な解像度に最も近い値に切り上げ処理が行われます。また、高い解像度を使用する場合は GPU メモリを消費するため、パフォーマンスが著しく低下することに十分留意してください。

反射キャプチャの解像度を 1481632641282565121024 に設定すると、以下のようになります。

スライダーをドラッグすると、解像度が反射の見え方に及ぼす影響を確認することができます。

スカイライトの反射解像度の調整

リフレクション プローブと同様に、スカイライトにも反射用に使用している HDRI キューブマップの解像度の定義と調節ができます。UE プロジェクトでこの機能を使用するには、以下の手順を行います。

  1. [Lights] セクションの [Place Actors] パネルで、[Skylight] を選択してレベルにドラッグします。

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

  2. そのスカイライトを選択して [Details (詳細)] パネルの [Light] セクションで [Real Time Capture] を無効にして [Source Type (ソースタイプ)] を [SLS Specified Cubemap (SLS 指定したキューブマップ)]** へ変更します。

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

  3. [Cubemap] セクションのドロップダウン ボックスをクリックして、リストから HDRI キューブマップを選択します。

    Select HDRI cubemap texture

  4. 選択したキューブマップに対して Cubemap Resolution 入力の値を変更して解像度を調節することができます。

    Change Cubemap Resolution

    キューブマップ解像度は 2 のべき乗 (16、64、128、256、512、1024) でのみ機能します。2 のべき乗以外の値を使用すると、使用可能な解像度に最も近い値に切り上げ処理が行われます。また、高い解像度を使用する場合は GPU メモリを消費するため、パフォーマンスが著しく低下することに十分留意してください。

複数のリフレクション プローブ データのブレンド

Reflection Capture アクタに異なる HDRI キューブマップを与えると、異なる複数のキューブマップ リフレクションをブレンドすることができます。UE プロジェクトでこの操作を行うには、以下の手順に従います。

  1. まず リフレクション プローブ を最低 1 つレベルに追加し [Reflection Source Type (反射ソース タイプ)][Specified Cubemap (指定したキューブマップ)] に変更して HDRI テクスチャを Cubemap 入力へつなぎます。

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

  2. レベルにリフレクション プローブを複製または追加して、黄色の影響半径が最初のリフレクション プローブと交わるように 影響半径 を配置 / 調整します。

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

  3. 新規に複製 / 作成した Reflection Probe アクタを選択し、[Details (詳細)] パネルの [Cubemap] セクションで、HDRI キューブマップを別のものに変更します。

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

  4. メイン メニューの [Build] をクリックして [Build Reflection Capture] を選択して、指定した新しい HDRI キューブマップ テクスチャで使えるようにします。

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

視覚化する

反射の設定を簡単に理解するために [Reflection Override] ビューモードが追加されました。 このビューモードは全ての法線を滑らかな頂点法線へとオーバーライドして、 すべてのサーフェスを完全なスペキュラ (鏡面反射) および全体的に滑らかにします (鏡のような効果)。このモードでは Reflection Environment 機能の制限事項やアーティファクトも顕著になるため、 定期的に Lit (ライティング有) へ切り替えて、 通常の状態 (凸凹な法線、さまざまな光沢、薄暗いスペキュラ) で反射の見え方を確認することが重要です。

Reflection Override

ライティングのコンポーネントへ分離する場合に便利な表示フラグが新規に追加されました。

フラグ

説明

Lighting Components > Diffuse

ディフューズを無効にすると、すべてのライティング手法でディフューズ効果が非表示にされます。

Lighting Components > Diffuse

スペキュラを無効にすると、すべての反射手法でスペキュラ効果が非表示にされます。

Lighting Features > ReflectionEnvironment

反射環境機能が無効にされますが、その他の反射機能はアクティブなままです (SSR、解析的スペキュラ)。

パフォーマンスへの配慮

Reflection Environment のコストは、スクリーン上のピクセルに影響を及ぼすキャプチャの数に依存します。 このシーンのディファード (遅延) ライティングにとても似ています。反射キャプチャは、影響を及ぼす半径に制約されるため、 カリング処理の効率が非常に良いです。光沢はキューブマップ ミップマップを通じて実装されるため、 シャープまたはラフな質感の反射では、パフォーマンスが若干異なります。

制限事項

  • このメソッドではおおよその反射しか得られません。具体的に言うと、オブジェクトの反射はシンプルな形状への投影となるため、実際のレベルのオブジェクトと一致することはほとんどありません。多数のキューブマップが一緒にブレンドされているため、多様なバージョンのオブジェクトを反射へ作成する傾向があります。鏡面反射の要因となる平面、滑らかなサーフェスにはこうしたエラーが顕著に表れます。反射とこれらのアーティファクトを分散させるために、詳細な法線マップとラフネスを使用します。

  • キューブマップへのレベルのキャプチャは、ゲームセッションから離れて実行しなくてはいけないため処理が遅くなります。従って、静的レベルから反射を受け取ることはできても、動的オブジェクトを反射させることはできません。品質を重視する場合は、ライト関数 (r.reflectioncapture.enablelightfunctions 1) を有効にしてライトのビルド時またはレベル開始時にボリュームや複雑なライトのキャプチャを改善することができます。

  • エラーを削減するために、レベルのディフューズのみがキャプチャされます。純粋にスペキュラ サーフェス (メタル) は、キャプチャ中のディフューズであるかのようにスペキュラを適用させます。

  • 両サイドの壁で別々のライティング条件が使用されていると、かなりの漏れ光が発生します。片方の壁は正確な反射効果をもたらす設定にできますが、反射はもう片方の壁側へ常に漏れてしまいます。

  • DX11 ハードウェアの制限により、レベルのキャプチャに使用するキューブマップは全て片側が 128 です。ワールドは一度に最大 341 の反射のキャプチャが可能です。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル