平面反射

鏡のような反射を作成するために使用できる Planar Reflection アクタの概要。

Unreal Engine (UE) は、リアルタイムでの平面反射 (Planar Reflection) をサポートしています。スクリーンスペース反射 (SSR: Screen Space Reflection) よりも反射を正確に見せることができますが、レンダリング負荷は高くなります。これは、平面反射機能が、反射方向から再びレベルを正確にレンダリングするためです。

Banner image

スクリーンスペース反射と平面反射の比較

レンダリングをするなら、スクリーンスペース反射の方が平面反射よりはるかに効率的ですが、信頼性は劣ります。以下の画像の比較は、スクリーンスペース反射と平面反射の限界を示しています。

スクリーンスペース反射

平面反射

  • スクリーンスペース反射: 左の画像はスクリーンスペース反射の限界を示しています。画像の端あるいはプールの一部で、反射が消え始めるカメラ ビューに向かってかなりの量の漏れが発生していることに注目してください。これは、SSR はオフスクリーンのオブジェクトを反射することができないためです。

  • 平面反射: 右の画像は同じレベルですが、平面反射を有効にしました。プールのサイドと端でさえも画像に漏れがまったくなく、反射が一定かつ正確であることに注目してください。これは平面反射がオフスクリーンのオブジェクトを反射することができるからです。

平面反射を有効にする方法

プロジェクトでこの機能を使用するには、以下の手順を行います。

  1. メイン メニュー パネルで [Edit] を開き、[Project Settings] を選択します。

    Open Project Setting menu

  2. [Project Settings (プロジェクト設定)] メニューから [Rendering] > [Reflections] セクションに進みます。

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

  3. [Support global clip plane for Planar Reflections (平面反射のグローバル クリップ プレーンをサポート)] の横にあるチェックボックスをクリックします。

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

    平面反射を有効にした後、UE エディタを再起動しないと、Planar Reflection は使えません。

  4. プロンプトが表示されたら UE Editor を再起動します。

    Restart UE Editor

  5. UE Editor を再起動したら、[Place Actors] パネルの [Visual Effects (ビジュアル エフェクト)] セクションで、[Planar Reflection Actor] を選択してレベルへドラッグします。

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

  6. Planar Reflection アクタをレベルに配置したら、G キーを使ってこのアクタの表示 / 非表示を操作できます。MoveRotateScale ツールでも、Planar Reflection アクタの配置やサイズをうまく調整して、レベルのニーズに合わせることができます。

近くの反射マテリアルは、Planar Reflection アクタがレベルに追加されるとすぐに自動的に反映されます。レベルに配置されたスタティック メッシュも、法線で反射を歪めることで波のシミュレーションが可能です。

Planar Reflection アクタのプロパティ

Planar Reflection アクタには、反射の様子を大胆に変更できる様々なプロパティがあります。以下の表はこれらのプロパティの説明、および Planar Reflection の様子がどのようになるかの説明です。

Planar Reflection properties

プロパティ

説明

Normal Distortion Strength

平面の反射を歪めるときの法線の強さを制御します。

Prefilter Roughness

Planar Reflections テクスチャをプリフィルタするラフネス値です。低解像度のテクスチャを非表示にする場合に便利です。この値が大きいほど GPU 負荷も大きくなります。

Distance from Plane Fadeout Start

反射平面からこの距離でピクセルを受け取って、平面反射の平面反射のフェードアウトを開始します。

Distance from Plane Fadeout End

反射平面からこの距離でピクセルを受け取って、平面反射の平面反射を完全にフェードアウトします。

Angle from Plane Fade Start

反射平面からこの角度の法線のピクセルを受け取って、平面反射の平面反射のフェードアウトを開始します。

Angle from Plane Fade End

反射平面からこの角度の法線のピクセルを受け取って、平面反射の平面反射を完全にフェードアウトします。

Show Preview Plane

エディタで作業中に反射平面の表示を切り替えます。平面反射に影響は与えません。

詳細なプロパティ

Prefilter Roughness Distance

プリフィルタ ラフネス値が到達する距離です。

Screen Percentage

ダウンサンプル パーセンテージを使用すると、平面反射のレンダリングにかかる GPU 時間を短縮できます。平面反射によって生み出させる反射の質に直接影響します。

Extra FOV

反射テクスチャへのレンダリングに使用する追加の FOV です。法線ひずみにより、反射テクスチャ外の読み取りが発生している場合に便利です。値が大きくなると、平面反射にレンダリングが必要なオブジェクトと三角ポリゴンが増えるため、レンダリングのスレッドおよび GPU コストが増大します。

Render Scene Two-Sided

シーンを両面としてレンダリングするかどうかを指定します。反射面によってクリップされたオブジェクトの「下」で通常の歪みが読み取られるアーティファクトを非表示にするのに役立ちます。この設定を有効にすると、明るい空である可能性のある背景ではなく、クリッピングされた領域にメッシュの背面が表示されます。これを有効にする場合は、水面が反射をブロックしないため、水面を Hidden Actors に追加してください。

LOD Distance Factor

LOD で使用される距離をスケーリングします。シーン キャプチャでメイン ビューよりも低い LOD を使用することでシーン キャプチャ パスを高速化するには、1 より大きい値に設定します。

Planar Reflection アクタの Scene Capture プロパティ

Planar Reflections アクタでは、いくつかのプロパティを使って、キャプチャされるリアルタイム反射のパフォーマンス負荷を制御することができます。

Scene Capture properties

プロパティ

説明

Primitive Render Mode

シーン キャプチャにレンダリングされるプリミティブを制御します。

  • Render Scene Primtive (Legacy) : シーンのすべてのプリミティブをレンダリングします。

  • Render Scene Primtives : Hidden Actors リストに追加されたものを除き、シーンのすべてのプリミティブをレンダリングします。

  • Use ShowOnly List : Show Only Actors リストにあるアクタのみをレンダリングします。

Capture Source

キャプチャ ソース タイプを制御します。

  • Scene Color (HDR) in RGB, Inv Opacity in A;

  • Scene Color (HDR) in RGB, 0 in A;

  • Final Color (LDR) in RGB

  • Scene Color (HDR) in RGB, Scene Depth in A;

  • Scene Depth in R;

  • Device Depth in RGB;

  • Normal in RGB (Deferred Renderer only);

  • Base Color in RGB (Deferred Renderer only);

  • Final Color (HDR) in Linear sRGB gamut;

  • Final Color (with tone curve) in Linear sRGB gamut.

Capture Every Frame

キャプチャのコンテンツをフレームごとに更新するかどうかを指定します。無効にすると、コンポーネントは読み込み時に 1 回と移動する時に 1 回更新されます。

Capture on Movement

移動の際にキャプチャのコンテンツを更新するかどうかを指定します。ブループリントから手動でキャプチャする場合は無効です。

Always Persist Rendering State

Capture Every Frame が無効になっていてもレンダリング ステートを保持するかどうか指定します。モーション ブラーとテンポラル アンチエイリアシング (TAA) のベロシティの計算が可能になります。

Hidden Actors

シーン キャプチャで非表示にするためにレベルで使用できる選択されたアクタのリスト。

Show Only Actors

Use ShowOnly ListPrimitive Render Mode を使用するときに、このシーン キャプチャによってレンダリングされるレベル内で使用できるアクタのリスト。

Max View Distance Override

値が 0 より大きい場合、シーン キャプチャでレンダリングされたプリミティブに対して最大レンダリング距離 (センチメートル) を設定します。反射する平面が玄関や部屋のように閉ざされた領域である場合、反射からのカリング距離オブジェクトに使用することができます。

Capture Sort Priority

複数のキャプチャ コンポーネント間の相互依存を解決するため、GPU でシーン キャプチャをソートするためのフレーム内のキャプチャ優先度です。最も値が高いものが優先されます。

Use Ray Tracing if Enabled

このキャプチャのレイトレースを使用するかどうかを指定します。このプロジェクトでレイトレースを有効にする必要があります。

Profiling Event Name

GPU のプロファイリング時にプロファイリング イベントの名前を設定します。レベルで複数の Planar Reflections を使用している場合に、どの Planar Reflections が使用されているか認識するのに便利です。

詳細なプロパティ

General Show Flags

一般的な機能表示フラグで、一部の機能とアクタをレンダリングからシーン キャプチャに切り替えるために使用されます。たとえば、アンチエイリアシング、フォグ、スタティックメッシュ、スケルタルメッシュなどです。

Advanced Show Flags

一般的な高度な機能表示フラグで、一部の機能とアクタをレンダリングからシーン キャプチャに切り替えるために使用されます。たとえば、フォリッジ、インスタンス化されたスタティックメッシュ、Paper 2D スプライトなどです。

Post Processing Show Flags

ブルーム、自動露光、モーション ブラーの表示フラグをレンダリングからシーン キャプチャに切り替えます。

Light Types Show Flags

シーン キャプチャへレンダリングされているスカイ ライトの表示フラグをレンダリングからシーン キャプチャに切り替えます。

Lighting Components Show Flags

アンビエント オクルージョンとダイナミック シャドウの表示フラグをレンダリングからシーン キャプチャに切り替えます。

Lighting Features Show Flags

ライト機能の一般的な表示フラグをレンダリングからシーン キャプチャに切り替えます。たとえば、距離フィールド アンビエント オクルージョン (DFAO)、ライト関数、スクリーン スペース リフレクション (SSR) などです。

Hidden Show Flags

ライティングとポストプロセスの表示フラグをレンダリングからシーン キャプチャに切り替えます。

平面反射の制約

平面反射を使うとかなり現実的な反射を作成できますが、この機能には以下のような制約があります。

  • 平面反射を使用すると、シーン全体が 2 回レンダリングされるので、レンダリング スレッドと GPU でフレーム時間の半分の時間を割り当てる必要があります。

  • ワールドに置かれた平面反射数を制限します。1 ではまだ多すぎることが多いです。

  • 適切な大きさにして、見えない時にカリングできるようにします。

  • レベル内でレンダリング中の負荷が、そのまま Planar Reflection アクタのレンダリングの負荷になります。この機能を有効にすると、負荷はスクリーン比率に合わせてスケールしないので、トライアングルとドローコールのあるシーンではほとんどのパフォーマンス問題が発生します。

平面反射のパフォーマンス

プロジェクトで平面反射を有効にして使用すると鮮明で十分正確な反射を行うことができますが、プロジェクトのパフォーマンスに直接影響がでます。次のセクションでは、平面反射を有効した場合にモバイル デバイスのみならずハイエンド PC プロジェクトにも見られるパフォーマンスの影響を見てみましょう。

Kite & Infinity Blade Grass Lands プロジェクトを使って、平面反射のパフォーマンスに及ぼす影響を説明します。このプロジェクトは Epic Games LaincherMarketplace から見つけることができます。

平面反射のパフォーマンスと Kite のデモ

Kite Demo のランドスケープ テレインのサイズと変わる高さのために、レベル全体を囲むために単一の Planar Reflection アクタを追加しスケールすると機能しなくなり、パフォーマンスは非常に悪くなります。その代わり、Planar Reflection アクタはそれを必要とするレベルのエリアに合うように戦略的に配置およびスケールします。以下の画像で、Kite デモで使われた水面上で平面反射に与えるビジュアルの影響を確認できます。

平面反射 オフ

平面反射 オン

平面反射は、レベルの見かけを大胆に変更しますが、パフォーマンスにもかなりの負荷を与えます。左側の 平面反射をオフにした 画像を見ると、レベル全体のレンダリング所要時間は 31 分です。右側の 平面反射をオンにした 画像では、レベル全体のレンダリング所要時間は 29.19 分です。これに平面反射のレンダリングに 23.07 分かかるので、平面反射を有効にした場合のシーンのレンダリングの合計所要時間は 52 分になります。

GPU Visualizer for Level with Planar Reflection Off

GPU Visualizer for Level with Planar Reflection On

平面反射オフ

平面反射オン

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

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

Kite では完全に動的なライティングとシャドウイングが使われているために、平面反射はレンダリングに 31 分かかります。Planar Reflection に再びレンダリングを行う場合、固定 / 事前計算されたライティングとシャドウイングを使用しているレベルの方がはるかに効率的です。

平面反射のパフォーマンスと Infinity Blade Dungeons

Infinity Blade Elven Ruins マップのサイズとレイアウトの関係で、平面反射は 1 つだけ必要で、レベルに配置された既存の水のスタティックメッシュに合わせてスケールされます。こちらの画像では、平面反射を追加することで Elven Ruins マップ内の水に生じた視覚的な印象をの変化が分かります。

平面反射 オフ

平面反射 オン

平面反射を追加すると水が生き生きと見えますし、パフォーマンスに及ぼす影響も Kite Demo と比べるとかなり小さいです。左側の平面反射をオフにした画像を見ると、シーンのレンダリング所要時間は 11 分です。右側の平面反射をオンにした画像を見ると、シーンのレンダリング所要時間は 1.67 分なので、レベルのレンダリングには約 13 分かかります。

GPU Visualizer for Level with Planar Reflection Off

GPU Visualizer for Level with Planar Reflection On

平面反射オフ

平面反射オン

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

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

Elven Ruins マップのレンダリング所要時間が 1.67 分だったのに対して、Kite Demo では 23.07 分になる原因は、Elven Ruins に使用したスタティックメッシュとマテリアルのビルド方法です。Elven Ruins マップとそのコンテンツはモバイル デバイス用に作られています。1 つのアセットに使われているトライアングル数とマテリアル インストラクション数に注意してください。このため、平面反射を Elven Ruins マップで有効にすると、Kite Demo と比べてマップに使用しているアセットの複雑度とサイズが大幅に削減されるので、負荷が低くなります。

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