Archviz Interior Rendering

Unreal Engine のレンダリング機能を使用して写真のようにリアルな建築ビジュアリゼーション インテリアを作成する方法の概要です。

Choose your operating system:

Windows

macOS

Linux

このサンプル プロジェクトは、Epic Games Launcher の [Learn (ラーニング)] タブからダウンロードできます。

Archviz Interior Rendering (建築インテリア レンダリング) は、Unreal Engine 4 (UE4) で可能なリアルなレンダリングを紹介するサンプル プロジェクトです。こちらの小さなアパートのシーンは、様々なシナリオで最良の結果が得られるように既に設定がなされています。このシーンを参考に、独学でテクニックを学んだり、シーン内の要素を自分の作品に再利用したりできます。

このシーンで使われている次のテクニックについて、これから学習していきます。

  • 物理ベースのマテリアルの使用。

  • 独自のマスター マテリアルとインスタンスの設定。

  • レイトレーシングによる動的ライティング テクニックの使用と最適化。

  • 高品質なレンダリング出力とインタラクティブなシーン表示を行うための、様々なレイトレーシング設定のセットを定義する方法の理解。

マテリアル

このサンプルのドキュメントで説明するのは、Unreal Engine に用意されているいくつかのマテリアル機能の概要です。そのため、このセクションで取り上げる概念と機能の詳細を確認するには「 マテリアル 」を読むことを推奨します。

Unreal Engine は、 物理ベースのマテリアル システムを利用しています。このシステムにより、手動で設定した場合よりもライトの動作が実際のライトに近くなります。その結果、より正確なで自然な見た目になります。つまり、物理ベースのマテリアルは、複雑度と相互依存性の低い値を使っても、すべてのライティング環境で同じように最適な外観で表示されるということです。

多くのマテリアルがリアルな外観を持ち、ライティングに対してリアルに反応することが重要です。このサンプル プロジェクトでは特にそうです。高い一貫性と正確性を実現するために、マテリアルでは階層的な親子関係を利用しています。この関係により、「マスター」マテリアルにマテリアルの様々なプロパティや値を調整するための制御可能なパラメータを持たせて、これを子インスタンスに渡すことで、子インスタンスの変更やオーバーライドを簡単に行うことができます。子インスタンス (別名: マテリアル インスタンス ) を使用すると、公開された値を変更およびオーバーライドして、親マテリアルのバリエーションをいくつでも作ることができます。

以下は、調整可能な公開プロパティの例です。

プロパティ名

サンプル

説明

Base Color

スライダーをドラッグすると、BaseColor が変化します。

これは、オブジェクトのマテリアルのベースカラーです。物理ベースのライティングを適用するために任意のテクスチャをベースカラーとして使用できますが、ベースカラーにはライティング情報を含めないようにする必要があります。そしてこれは、単に基本となるマテリアルの生の色でなければなりません。(例として、このプロジェクトのディフューズ テクスチャを参照してください)。

Metallic

スライダーをドラッグすると、金属的な質感が変化します。

これは、マテリアルのサーフェスの金属的な質感を制御します。この値をより金属的な質感に調整することにより、オブジェクト自体のベースカラーに周囲の環境がどの程度映り込むかを制御できます。

Roughness

スライダーをドラッグすると、ラフネスが変化します。

これは、スペキュラ反射の拡散を制御します。「マイクロファセット」効果をサーフェス全体に適用します。値を小さくするとサーフェスが滑らかになり、値を大きくすると粗さが増します。例えば、つや消ししたアルミニウムと鏡面クロムの反射の違いを考えてみてください。

マテリアルをインスタンス化する

プロジェクトに、類似するプロパティを持つ類似するマテリアルを使用するオブジェクトを多数作成する場合、 マテリアル インスタンス と呼ばれる子インスタンスで設定できるパラメータおよび値として、これらを公開するマスター マテリアルを作成すると便利です。

このシーンの大部分のオブジェクトでは、マスター マテリアルや既存のマテリアル インスタンスの単純なバリエーションを作成するためにパラメータ化された、類似するプロパティが使用されています。そのため、単純な値のプロパティを制御したり、マテリアルに使用されているテクスチャのタイプを入れ替えたりすることができます。つまり、必ずしもシーン内のすべてのオブジェクトに個別のベース マテリアルが必要なくなるということです。プロジェクトが効率的になるうえ、GPU のパフォーマンスも効率的になるという利点があります。また、これらのパラメータとプロパティを変更しても、ほとんどの場合において追加のコンパイルは必要ないため、シェーダのコンパイルを最小限に抑えることができます。

MaterialInstancing_DefaultMaster.png

MI_BaseColorTint.png

MI_DiffuseTexture_Alt.png

マスター マテリアル (デフォルト値)

マテリアル インスタンス:ベースカラーの色合いを変更

マテリアル インスタンス:ディフューズおよび法線テクスチャを入れ替え

マスター マテリアルを使用する

マスター マテリアルのセットアップと使用は、Unreal Engine の発展的なワークフローです。プロジェクトの詳細に進む前に、このページの「マテリアル インスタンスを使用する」セクションを確認する、または以下のドキュメントで UE4 のマテリアルについて学習することを推奨します。

また Unreal オンライン学習 ポータル コースの 「 Materials - Exploring Essential Concepts (マテリアルの基礎概念) 」も参照してください。

マスター マテリアルを設定するときは、プロジェクトのニーズをあらかじめ考えておくことが重要です。つまり、マテリアル インスタンスのパラメータとして、デザイナーやアーティスト向けにどのプロパティを公開するのが合理的なのかを考えるということです。汎用性の高いマスター マテリアルを使用すると、チームのメンバーが親マテリアルに設定されているデフォルト値やプロパティを消去することなく、影響を最小限に抑えてプロジェクトにすばやく変更を加えることができます。

このシーンの多くのオブジェクトに割り当てられたマスター マテリアルは M_MasterMaterial と呼ばれています。

プロジェクトのマスター マテリアルを設定するときは、次のことに注意してください。

  • マテリアルにどのタイプのオブジェクトを適用するのか考えます。

    • Transparent、Opaque、Masked など、マスター マテリアル タイプを Blend Mode ごとに分類することを推奨します。

    • ベースカラー、ラフネス、法線などにはタイリング テクスチャの使用を推奨します。ユニークなテクスチャ マップは汎用性が低く、オブジェクトに適用すると追加の作業が必要になる場合があるからです。

  • どのプロパティと値を公開するのが合理的かを考えます。

    • Blend Mode に Opaque または Transparent を使用している場合は、アーティストやレベル デザイナーによる変更が効率的に行える柔軟性を実現しつつ、特定のオブジェクトの外観を定義できるように、合理的なプロパティや値は何かを考えてください。

マスター マテリアル M_MasterMaterial の中で、一般的なパラメータがどのように設定されていて、子インスタンスを使用して好きなだけバリエーションを作れるようになっているのかを見ていきましょう。 BaseColor のパスは以下の通りです。

BaseColorPath.png

  • BaseColor というテクスチャ パラメータを使用してテクスチャ アセットが指定されています。テクスチャ アセットはマテリアル インスタンスでオーバーライドして、法線やディフューズなどの互換性のあるテクスチャ タイプに交換できます。

  • BaseColorTint という Vector4 パラメータは、マテリアル インスタンスで有効になっているときにテクスチャ アセットの色を変更するために使用されています。これは、テクスチャではなく、オブジェクトの色をわずかにまたは大幅に変更する際に便利です。

  • UseBaseColorTint? および UseBaseColorTexture? という 2 つのスイッチ パラメータは、ベースカラーやその色合いを設定する様々なパスを有効にするために使用されています。これらのパラメータの一部を有効または無効にすることで、このマテリアルのインスタンスに表示されるパラメータが公開または削除されます。

このマスター マテリアルには、テクスチャを指定したり、テクスチャの上に色を付けるといったような追加のコントロールもあります。ただし、これほどの柔軟性が常に必要となるわけではありません。プロジェクトのニーズと、アーティストやレベル ザイナーにとって何が合理的かを考え、最適な方法を選んでください。

マテリアル インスタンスを使用する

公開したいパラメータとデフォルト値を決めてマスター マテリアルを設定したら、マテリアル インスタンス アセットを作成するマテリアル アセットの独自のインスタンスを作成できます。

これを行うには、[Content Browser (コンテンツ ブラウザ)] で任意のマテリアル アセットを右クリックし、コンテキスト メニューから [Create Material Instance (マテリアルインスタンスの作成)] を選択します。

CreateMaterialInstance.png

インスタンスを開くと、ビューポートにマテリアルのプレビューが表示されます (1)。右側のパネルの、 [Parameter Groups (パラメータ グループ)] カテゴリには、オーバーライドできる公開されたプロパティと値がすべて表示されます (2)。

MaterialInstanceEditor.png

[General (一般)] カテゴリの [Parent (親)] 割り当てボックスには、このマテリアル インスタンス アセットの親マテリアルがあります。親マテリアルに指定できるのは、マテリアルまたはマテリアル インスタンス アセットのいずれかです。

MaterialInstanceParent.png

親が必ずしもマスター マテリアルであるとは限らず、別のインスタンスである可能性もあることに注意してください。良い使用例は、布地や木材のマテリアルを作成し、異なる色のバリエーションを作成する場合です。

このプロジェクトで使用されているマテリアルとマテリアル インスタンスを調べるには、「 Content\Materials 」フォルダ内を確認します。

独自のインスタンスの作成方法に関する詳細については「 マテリアル インスタンス 」を参照してください。

シーンのライティング

このインテリア建築シーンの ルックアンドフィール は、主にライティングのセットアップ方法と、シーンで使用されるオブジェクトやマテリアルとの相互作用によって定義されています。このシーンでは、ソフトなエリアシャドウ、画面外にあるオブジェクトからの正確な反射、リアルタイム グローバル イルミネーションに対して、最新の Unreal Engine の レイトレーシング 機能を多く使用しています。

セットアップの考慮事項

このシーンのフォトリアルな外観を実現しているライティングには、複数のタイプのライトと設定を用いたいくつかの追加のライティング セットアップが使用されています。

このシーンには、次のタイプのライトとセットアップが含まれています。

  • 主光源としての指向性ライト。

  • 窓を通した空のディフューズ効果をシミュレートする複数の矩形ライト。

  • 物理的なライティング強度に一致するポストプロセス ボリュームの露出値。

レ トレーシング機能

ライティング

このインテリア シーンは、動的ライティングと レイトレーシング 機能のみを使用した空からの環境光で、太陽からの単一の光源を使用して照らされた様子を模倣しています。このセットアップは、シーン全体に対して均一に光が分布するようにし、過度なシャドウが発生する可能性のある領域を減らしています。レイ トレース シャドウを使用すると、アパートの多くの領域で、ソフト シャドウイングに対する良好なエリア フォールオフとシャープなコンタクト シャドウを得ることができます。

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

シャドウ マッピング

このセットアップを機能させるためには、次のものを使用します。

  • 太陽として機能する単一の指向性ライト。

  • 窓から差し込む光を模倣したソフト イルミネーションを発生するエリア ライト。日光として機能させる必要はありません。

デフォルトのライティング |指向性ライトと矩形ライト

指向性ライトのみ

反射

このインテリア シーンには多数の反射サーフェスが含まれており、そのラフネスは様々です。鏡のようなサーフェスもあれば、半光沢のあるサーフェスや、ラッカー仕上げが擦り切れた床を模したサーフェスもあります。これらの反射をシーンに追加して得られる質感は、レイトレーシングなしでは実現できません。

ArchVisReflections.png

レイトレーシング機能を使用しない場合の反射は、大抵、画面に表示されるものを反射するだけの限定的な画面空間エフェクトを使用したものか、部屋の画像をキャプチャする静的キューブマップを使用したものであり、動的ではありません。レイ トレース反射を利用すると、サーフェスにシーン全体を反射させたり、複数回バウンスさせた相互反射 (反射内の反射) を作成したりできます。

反射を最適化する

このシーンで反射を設定した際は、品質の低下を最小限に抑えつつ、負荷を低くすることに特に注意が払われました。以下に、自身のプロジェクトで同様の結果を得るために活用できるいくつかの提案と最適化を示します。

光沢と反射のあるサーフェス

レイ トレース反射を最適化する際にまず考えるべきことは、シーン内にあるマテリアルの滑らかさ (粗さ) の程度です。この情報を知っていると、シーン内の反射を最適化する方法を早い段階で決定できます。その結果、後で調整する必要のない効率的なパフォーマンスを早いうちから維持できます。

反射率の高いサーフェスをシーンで多数使用する場合、

下記の 2 つの方法が考えられます。

  • マテリアル レベルでラフネス / 光沢を制御する。 このワークフローでは、シーン内のオブジェクトに割り当てられたマテリアルを使用して、より細かく制御が可能です。適切に用意したマスター マテリアルを使用すると制御が簡単になりますが、特定のラフネスを必要とするマテリアルやマテリアル インスタンス内では手動で調整する必要があります。

  • ポスト プロセス内でラフネス / 光沢を制御する。 このワークフローでは、ポストプロセス ボリュームの Max Roughness プロパティに設定された指定のしきい値にラフネスを制限することにより、シーン内のすべてのオブジェクトに影響を与えます。

これらのワークフローは二者択一ではなく、簡単に組み合わせることができます。このサンプルには、シーンを正確に描写する必要のある反射サーフェスがたくさんあります。つまり、このプロジェクト早い段階で最高の柔軟性を得るには、マテリアル レベルでラフネスを制御するのが合理的でした。その結果、後でシーンを最適化する際に、シーンで使用されるマテリアルのパフォーマンスと品質の妥当なバランスを取るのがはるかに簡単になりました。

多重反射バウンスとノイズ低減

フォトリアルな結果を得るには、シーン内での反射の精度が非常に重要となります。このような建築ビジュアリゼーション シーンではなおさらです。ただし、複数の反射バウンスを反射内で使用する場合、リアルタイムでレンダリングすると負荷が重くなってしまいます。

まず、マスター マテリアルで RayTracingQualitySwitchReplace 式を使用して、マテリアル レベルで簡単な最適化を行うところから開始します。このノードを作成すると、レイトレーシング機能に関する個別のパスをマテリアルに設定して、それほど複雑ではないマテリアル出力を使用できます。このプロジェクトでは、BaseColor、Metallic、Roughness の入力のみを使用します。レイトレーシング エフェクトに関するこの単純なマテリアル パスを作成することで、品質への影響を最小限に抑えつつ、負荷をある程度抑えることができます。

テレビに反射した床のマテリアル MI_Floor を見ると、マテリアル アセットの Mip Bias (ミップ バイアス) によって制御されるマテリアル インスタンスの低解像度テクスチャ ミップを使用していることがわかります。鏡のようなマテリアルや一部のデバッグ ビューモードを使用しない限りは、レイ トレース反射に対してマテリアル内でこのような最適化が行われていることに気付くのは難しいでしょう。

FloorMipBias.png

床、壁、天井などの大きなサーフェスの場合、この最適化によりフレーム時間をいくらか取り戻すことができます。 M_RTMasterMaterial マテリアルを開いて、 RayTracingQualitySwitchReplace を使用したグラフの動作を確認してください。

この比較では、ビューポートの [Reflections (反射)] ビューモードが有効になっており、レベル内のサーフェスのはっきりとした反射を確認できます。すべてのミップ レベル (0) を使用している場合、テクスチャのフル解像度をシーンのストリーミングに利用できます。床のテクスチャは 4k のテクスチャです。ミップレベル 5 を使用する場合、表示されるテクスチャの解像度は 128 です。この設定を使用すると、このシーンで品質低下を最小限に抑えつつ、フル解像度よりも効率が良くなります。

ミップ バイアス:5 |テクスチャ解像度:128

ミップ バイアス:0 |テクスチャ解像度:4096

テクスチャで使用可能なミップ レベルを確認するには、テクスチャ アセットを開き、ツールバーの [Mip Level (ミップレベル)] チェックボックスをオンにします。次に、プラス、マイナス、またはスライダーを使用して、プレビューのミップ レベルを設定します。

UE4 のレイトレーシングでの最適化には、もう 1 つオプションがあります。最後のバウンスとして Reflection Capture (反射キャプチャ) を使用するレイ トレース反射のフォールバックです。これには、レイ トレース反射バウンスの使用を減らし、サーフェスでの黒色の相互反射を制限することにより、負荷を削減できるという利点があります。反射バウンスが複数あると負荷は指数関数的に増えることから、プロジェクトが実行時のパフォーマンスに関係している場合は法外な負荷がかかることになります。

次のコンソールコマンドで Reflection Capture フォールバックを有効にします。

r.RayTracing.Reflections.ReflectionCaptures 1

レイ トレース反射 |最大バウンス:2 |反射キャプチャ フォールバック:無効

レイ トレース反射 |最大バウンス:1 |反射キャプチャ フォールバック:有効

この組み合わせを使用すると、レイトレーシングによる反射しか使用していない場合に発生する黒色の反射などのアーティファクトが少なくなります。相互反射の多いこのようなオブジェクトでは、フォールバックの使用と 2 回のバウンスを組み合わせると、さらに良い結果を得ることができます。

ReflectionCaptures3.png

反射に次の最適化とワークフローを適用しても、複数回の反射バウンスを使用した際に反射で生成されるノイズの量を減らすことができます。反射の [Samples Per Pixel (ピクセルごとのサンプル)] 設定を増やすと、シーンのパフォーマンスを犠牲にしてノイズを減らすこともできます。これは、反射率の高いサーフェスが多いエリアで特に顕著となります。以下に、反射時に発生するノイズを減らすその他の方法をいくつか示します。

  • RayTracingQualitySwitchReplace ノードを使用して、マテリアルとそのテクスチャの複雑さを軽減します。マテリアル パス全体ではなく、レイトレーシング マテリアル パスを使用してマテリアル入力を評価することにより、反射のノイズを低減します。法線や滑らかなサーフェスなどのテクスチャは、レイトレース反射でノイズを生成しやすい傾向にあります。

  • [Texture Sample (テクスチャ サンプル)] の [Mip Bias] プロパティを使用して、テクスチャの詳細度を制御します。低品質のテクスチャを使用すると、テクスチャの詳細度が高い高品質のテクスチャに比べてノイズが生成される可能性が低くなります。

グローバル イルミネーション

レイ トレースされたグローバル イルミネーション (RTGI) を使用すると、光源からシーンを動的に照らすことができます。このプロジェクトでは、パフォーマンスを改善するいくつかの最適化とともに、いくつかのイルミネーション メソッドを使用しています。

イルミネーション メソッド

Unreal Engine は、シーン内の動的な間接ライティング用に、2 つのレイ トレースされたグローバル イルミネーション メソッドを提供しています。

  • Brute Force は、Final Gather よりも低速ですが精度の高いメソッドを使用します。このメソッドでは、アーティファクトを減らして品質を高めるために、複数回のバウンスを使用し、サンプル数を増やす必要があるため、パフォーマンスは犠牲となります。

  • Final Gather は、Brute Force よりも高速ですが精度の低いメソッドを使用します。このメソッドでは、ピクセルあたりのサンプル数が多い間接ライティングを 1 回のバウンスだけ使用します。複数のフレームにわたって負荷を償却し、実行時のパフォーマンスを戻します。

このプロジェクトを静止画で見ても、目に見えるほどの顕著な品質の違いはありません。しかし、これら 2 つのメソッドにはパフォーマンス面で顕著な差があります。

これらのメソッドは両方とも、何らかの形でサンプルで使用されています。エディタでの作業とリアルタイムでのシーンのレンダリング中は、Final Gather メソッドが使用されます。このメソッドは、レベルのポストプロセス ボリュームにデフォルトで設定されています。 シーケンサ を使用して高品質のムービーをレンダリングする時は、Brute Force メソッドを使用してシーンがレンダリングされます。(詳細については、以下の「シネマティックス」セクションを参照してください)。

画面比率とピクセルごとのサンプル

シーンのパフォーマンスとイルミネーションを向上させる 1 つの方法は、RTGI Screen Percentage ( r.RayTracing.GlobalIllumination.ScreenPercentage ) およびポストプロセス ボリュームの [Ray Tracing Global Illumination (レイトレースによるグローバル イルミネーション)] にある [Samples Per Pixel (ピクセルごとのサンプル)] プロパティを調整することです。

この背景にあるアイデアは、RTGI の画面比率を下げながらサンプル数を増やすと、品質の低下を最小限に抑えながらアーティファクトを減らし、シーン内にあるライティングの統一性を高めることが可能ということです。ただし、このトレードオフ関係が効果的なのは、ある一定のレベルまでです。例えば、RTGI の [Screen Percentage (画面比率)] を「50」、ピクセルあたりのサンプルを「16」に設定した場合、RTGI の [Screen Percentage] を「100」、ピクセルあたりのサンプルを「4」に設定した場合と同じになります。

RTGI メソッド:Brute Force |RTGI の画面比率:100 |RTGI のピクセルごとのサンプル:4

RTGI メソッド:Brute Force |RTGI の画面比率:50 |RTGI のピクセルごとのサンプル:16

グローバル イルミネーションでライトを最適化する

以下に、このプロジェクトで RTGI のパフォーマンスを向上させるために使用されている手法をいくつか紹介します。

  • 各 Light アクタには、RTGI への寄与を無効にするオプションがあります。余分な GI ノイズを引き起こしているライトがある場合、このオプションを使用すると、そのライトは GI に寄与しなくなるため、パフォーマンスを向上させながら、これらのタイプのアーティファクトを減らすことができます。プロパティ [Affect Ray Tracing Global Illumination (レイトレースによるグローバル イルミネーションに影響)] を使用して、ライトの GI に対する寄与を切り替えます。

  • パスに大きなオクルーダがあるライトは、シーンで生成されるノイズが多くなる傾向があります。

    • ライトごとの GI に対する寄与を無効にします。

    • 半径を調整するか、オクルードされないように移動します。

    • そのようなライトの前にある大きなオブジェクトを削除または調整して、オクルージョンを増やします。

  • RTGI とレイ トレースしたアンビエント オクルージョン (RTAO) を使用します。

    • プロジェクトの最終的なレンダリングでより価値を持つ設定を判断します。RTGI を使用している場合は、ポストプロセス ボリュームから RTAO を完全に無効にし、[Ambient Occlusion (アンビエント オクルージョン)] カテゴリにある [Intensity (強度)] を「0」に設定します。

  • ジオメトリに穴があるオブジェクトがシーン内に多数ある場合、レイトレーシングのノイズ削減を行う際に問題が生じる可能性があります。場合によっては、 RayTracingQualitySwitchReplace 式 (上記の「 Reflections 」セクションを参照) でノイズを減らすことができます。

その他の最適化、ヒントとコツ

マテリアルのミップ バイアスと RayTracingQualitySwitchReplace 式

Texture Sample 式で、それぞれ Mip Bias (ミップ バイアス) 入力を使用できます。この入力は単純な浮動小数点値を受け取り、値に応じて、使用しているテクスチャに対してどのミップを使用するかを制御できます。ミップは、テクスチャの特定の詳細度です。ミップ値が低いと品質が高くなり、値が高いと品質が低下します。Mip Bias プロパティを RayTracingQualitySwitchReplace ノードと組み合わせて使用すると、レイトレーシング エフェクトで使用する最大品質のミップ レベルを指定できます。

これにより、表示されない可能性のあるミップ品質に対して費やす GPU 時間を削減できます。例えば、マテリアル M_RTMasterMaterial では、アルベドの Mip Bias がパラメータとして「-1」に設定されています。このマテリアルは床、天井、壁でのみ使用されることから、これらのマテリアル インスタンスは、より高いミップ バイアス値を使用しながら、品質の低下を最小限に抑えます。この床で使用しているミップ バイアスは「5」です。

この手のコツは、すべてのマテリアルやサーフェスで効果があるわけではありませんが、パフォーマンスを少しでも良くしようとプロジェクトを最適化する際には試す価値があります。また、一部の反射 (特に鏡のようなサーフェスで生じるもの) で見られるノイズの量を減らすことができます。

定数のカラー値 vs テクスチャ

マスター マテリアルを作成する際、マスター マテリアルをシンプルな色にする場合は、テクスチャは使用せず、 Vector4 式を含めることを推奨します。テクスチャとサイズによっては、テクスチャが必須でない場合、とりわけテクスチャなしで同じ見た目を実現できる場合には、テクスチャの使用が GPU のリソースの浪費の原因となる可能性があります。また、この式を使用すると、プロジェクトが肥大化せず、維持しやすいという利点があります。この特定のマテリアルを後で調整する必要がある場合、テクスチャ アセットを操作するよりも、この式を通じてマテリアル インスタンスのパラメータとして変更を行う方がはるかに簡単です。

シネマティック レンダリングのシーケンサとポスト プロセスを使用する

このサンプルでは、レイトレーシングを使用したコンテンツの表示方法をいくつか紹介します。各表示方法では、ユースケースに応じて様々な設定が使用され、品質とパフォーマンスのバランスを取っています。このプロジェクトでは、全部で 3 つのユースケースを取り上げ、紹介しています。それは以下の通りです。

  • リアルタイム フレーム カウントを維持しながら、代表的な最終レンダリングの機能や品質でエディタ内で作業する。

  • 一貫性のあるパフォーマンスを得るための品質のトレードオフを最小限に抑えながら、エディタ内のシーケンサでシネマティックをリアルタイムで実行する。

  • 非リアルタイム設定で、シーケンサでシネマティックをレンダリングする。

エディタで作業するとき、またはエディタ内のシネマティックまたは非リアルタイムのシネマティックを実行するとき、入るモードの品質とパフォーマンスのバランスをとるために、バックグラウンドで変更される設定があります。

以下の概要と異なるモード間を移動する場合、コンソール変数を使用して、レイトレーシングによるグローバル イルミネーションとレイトレース反射で品質とパフォーマンスのバランスが制御されるように設定します。以下のコンソール変数が「-1」以外の値に設定されている場合、ポストプロセス ボリュームの設定で指定された値がオーバーライドされることに注意してください。例えば、コマンド r.RayTracing.GlobalIllumination が「2」に設定された場合、コンソール変数値が「-1」に戻されるまで、ポストプロセス ボリューム設定の [Ray Tracing Global Illumination (レイトレーシング グローバル イルミネーション)] の [Type (タイプ)] で選択されたメソッドは無視されます。

エディタ内の設定

エディタ内設定は、プロジェクトの読み込み時に使用される設定と、シーン内での作業中に使用される設定です。これらの値は、主にエディタのデフォルト値、またはレベルのポストプロセス ボリューム内で設定された値を使用します。ここで使用している値は、レイトレーシング機能をリアルタイムで使用する場合の品質とパフォーマンスのバランスが取れたものを示しています。

設定

注記

r.RayTracing.GlobalIllumination

2

これにより、Final Gather GI メソッドが設定されます。

r.RayTracingGlobalIllumination.ScreenPercentage

設定なし (デフォルト:50)

r.RayTracing.GlobalIllumination.SamplesPerPixel

16

r.RayTracing.GlobalIllumination.RenderTileSize

設定なし (デフォルト:0)

r.RayTracing.Reflections.MaxRoughness

設定なし (デフォルト:0.6)

r.RayTracing.Reflections.SamplesPerPixel

設定なし (デフォルト:1)

r.RayTracing.Reflections.Shadows

2

この値は、エリアシャドウを使用するように反射を設定します。

[Post Process Volume] で、[Samples Per Pixel]、[Ray Tracing Reflections] の [Max Roughness]や [Shadows] のタイプなど、上記の設定の一部を確認できます。

InEditorPPVSettings.png

ランタイム シネマティック シーケンサの設定

シーケンサを使用してランタイム シネマティックを実行すると、以下に概説するプロパティの値が変更されます。ここで示す値は、このシーンとシネマティック中に用いられる様々なショットのバランスが取れたものです。

設定

注記

r.RayTracing.GlobalIllumination

2

これにより、Final Gather GI メソッドが設定されます。

r.RayTracingGlobalIllumination.ScreenPercentage

100

RTGI の [Screen Percentage (画面比率)] を 100 パーセントに設定します。

r.RayTracing.GlobalIllumination.SamplesPerPixel

4

r.RayTracing.GlobalIllumination.RenderTileSize

設定なし (デフォルト:0)

r.RayTracing.Reflections.MaxRoughness

0.4

反射のしきい値を上げて反射の量を減らし、実行時のパフォーマンスを向上させるように [Max Roughness (最大ラフネス)] を設定します。

r.RayTracing.Reflections.SamplesPerPixel

2

使用するサンプル数が少なくなるように [Samples Per Pixel (ピクセルごとのサンプル)] を設定します。これにより、反射サンプルの量が減り、実行時のパフォーマンスが向上します。

r.RayTracing.Reflections.Shadows

設定なし (デフォルト:1)

この値は、ハード シャドウイングを使用するように反射を設定します。

これらの設定では、エディタ内シネマティックの品質を高めるためにいくつかの変更を加えています。変更内容とその理由に関するいくつかのメモを下記に示します。

  • RTGI の [Screen Percentage (画面比率)] を増やした一方で、RTGI の [Samples Per Pixel (ピクセルごとのサンプル)] は減らしました。前のセクションで示したように、RTGI の [Screen Percentage (画面比率)] を「50」、[Sample Per Pixcel (ピクセルごとのサンプル)] を「16」にしたエディタ内設定は、この変更と同等です。ただし、実行時の負荷はほぼ同じで、品質はいくらか良くなります。

  • シーン内の反射の量を減らすために [Reflections (反射)] の [Max Roughness (最大ラフネス)] のしきい値を変更しました。これにより、フレームレートが 24 フレーム / 秒 (FPS) の割り当てを超えないようになります。反射の量をわずかに減らしていることから、反射に対して大きな [Samples Per Pixel (ピクセルごとのサンプル)] が不要となります。そのため、ランタイム シネマティックの場合、これは 4 spp から 2 spp と半分になり、このようなタイプの変更を行うとパフォーマンスのバランスが再び取れるようになります。

ランタイム シネマティックを開始する

  1. メイン ツールバーから、 [Cinematics (シネマティックス)] を選択し、 [archviz_cine_MASTER] トラックを選択します。

    Seq_Cine_Master.png

  2. シーケンサー ウィンドウが開きます。左側の [Shots (ショット)] トラックの横にある [Camera (カメラ)] アイコンをクリックします。

    Sequencer_Master.png

    これにより、ランタイム シネマティックのビューポートがカメラにロックされます。

  3. メイン ツールバーを使用して、 レベル ビューポート 内で [Play (プレイ)] ボタンをクリックしてエディタで再生します。

  4. [Sequencer (シーケンサー)] ウィンドウで [Play (プレイ)] ボタンをクリックして、レベル ビューポートでシネマティックを開始します。

    Sequencer_Master_Play.png

非ランタイム シネマティック シーケンサの設定

シネマティック シーケンサを実行すると、値がリアルタイムには適さないものに変更されます。ここでの値はシネマティックのバーンアウトのレンダリングには理想的ですが、使用しているグラフィック カードと設定によってはレンダリングに数時間以上かかる場合があります。

NVIDIA Quadro RTX 8000 を使用した Epic デベロッパー仕様のマシンでは、以下の設定でこのシネマティックをレンダリングすると、約 8 時間かかります。

設定

注記

r.RayTracing.GlobalIllumination

1

これにより、Brute Force GI メソッドが設定されます。

r.RayTracingGlobalIllumination.ScreenPercentage

100

RTGI の [Screen Percentage (画面比率)] を 100 パーセントに設定します。

r.RayTracing.GlobalIllumination.SamplesPerPixel

16

RTGI の [Samples Per Pixel (ピクセルごとのサンプル)] に「16」を設定し、パフォーマンスを犠牲にして品質を向上させます。

r.RayTracing.GlobalIllumination.RenderTileSize

64

GPU に送信されるピクセル タイル サイズを設定します。高品質のレンダリングでは、タイムアウト検出のトリガーなしでドライバのクラッシュを防ぐことができます。

r.RayTracing.Reflections.MaxRoughness

0.8

反射のしきい値を下げるように [Max Roughness (最大ラフネス)] を設定します。反射の量は増えますが、実行時のパフォーマンスは低下します。

r.RayTracing.Reflections.SamplesPerPixel

4

より多くのサンプル数を使用するように [Samples Per Pixel (ピクセルごとのサンプル)] を設定します。これにより、反射内のサンプルの量は増えますが、実行時のパフォーマンスは低下します。

r.RayTracing.Reflections.Shadows

設定なし (デフォルト:1)

この値は、エリアシャドウを使用するように反射を設定します。

エディタ内でシーケンサを実行すると、UE4 エディタがロックしてしまうことがあります。これらの設定は、シーケンサの [Render Movie Settings (ムービー レンダリング設定)] を使用してビデオをレンダリングする際に使うことを意図しています。(以下の次のセクションを参照してください)。

シネマティック シーケンスをムービーとしてレンダリングする

  1. レベル ビューポートのメイン ツールバーから、 [Cinematics (シネマティックス)] ドロップダウンを選択し、 [archviz_cine_MASTER_MaxQuality] トラックを選択します。

    Seq_Cine_MaxQuality.png

  2. シーケンサ シネマティック ウィンドウが開きます。ツールバーで カチンコの形 をしたアイコンを選択して、 [Render Movie Settings (ムービー レンダリング設定)] ウィンドウを開きます。

    Sequencer_MaxQuality.png

    このウィンドウには、このシーケンサ シネマティックをレンダリングするための設定がすべて含まれています。

    RenderMovieSettings.png

  3. 使用する [Image Output Format (画像出力形式)] をドロップダウンから選択します。

    CapMovieImageOutput.png

    このビデオでは、 「Image Sequence (bmp) (画像シーケンス (bmp))」 とプロ用のビデオソフトウェアを使用し、それらをレンダリングして最終的なビデオにコンパイルしています。

  4. ここには、他にもビデオのレンダリングに選択できる多くのオプションがあります。例えば、レンダリングする [Resolution (解像度)] や、これらの画像の保存先ディレクトリなどを選択できます。

  5. 準備ができたら、下部にある [Capture Movie (ムービーキャプチャ)] ボタンをクリックします。すると、プレビュー ウィンドウが開きます。

    CaptureMoviePreview.png

品質を向上させるには、時間を犠牲にしますが、コンソール コマンド r.ScreenPercentage を使用して、ビデオや画像シネマティックをレンダリングするときに、[Screen Percentage (画面比率)] を「150」といったような、より高い値に設定します。このページのトップにあるシネマティックは、この方法を使用してレンダリングしています。画像シーケンスの解像度を 1920x1080 に設定し、画面比率を変更してスーパーサンプリングしています。

シーケンサで値を制御する

    1. レベル ビューポートのメイン ツールバーから、 [Cinematics (シネマティックス)] ドロップダウンを選択し、 [Edit Existing Cinematic (既存のシネマティックスの編集)] リストからシーケンスを選択します。

    ControllingSeq1.png

  1. 選択したシーケンサ シネマティック ウィンドウが開きます。ツールバーで、 [レンチの形] をしたドロップダウン メニューを選択し、 [Open Director Blueprint (Director ブループリントを開く)] を選択します。

    Seq_OpenDirector.png

この SequenceDirector ブループリントには、次のものがあります。

SequencerDirector.png

  1. このシーケンスの RTGI 設定のセットおよびリセットに使用するタブです。

  2. [Variables (変数)] カテゴリには、以前に「ランタイム シネマティック シーケンサの設定」および「非ランタイム シネマティック シーケンサの設定」セクションで説明したコンソール変数と、その値を持つ配列変数があります。

  3. 配列変数を選択すると、その配列要素と値が [Default Value (デフォルト値)] カテゴリの下に表示されます。例えば、シーケンサ シネマティック「archviz_cine_MASTER」で、 RTGI_CVars_On 変数を選択して配列の値を見ると、このページの「ランタイム シネマティック シーケンサの設定」セクションの下の表にリストされている値と一致しています。

謝辞

このシーンにおけるデザイン作業を主導し、シーンの雰囲気と環境を構築してくださった 「www.sciontidesign.com」 の Pasquale Scionti 氏に感謝申し上げます。Pasquale 氏は初期リリース以来、Unreal Engine とそのレイトレーシング実装に関する熱心なユーザーであり、彼のおかげで開発は後押しされてきました。 彼の Web サイトの特別なセクション では、Unreal Engine での彼の作品の詳細を確認できます。

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