Impostor Baker プラグインは、遠距離レンダリングで詳細度 (LOD) メッシュとして使用するための複雑なジオメトリの単純化表現をベイクアウトする方法を提供します。 この Imposter Baker を使用して生成できるインポスタには主に次の 3 種類があります。
Full Sphere Impostor (フル球形インポスタ) は、オブジェクトの周りのすべての角度のビューをキャプチャーし、レンダリングします。
Upper Hemisphere Impostor (上部半球インポスタ) はテレインの上からのビューのみをキャプチャーし、レンダリングします。 このオプションでは、通常テレインの上にあり、非常に遠くから、下から見ることができないオブジェクトの品質が向上します。 使用されないビューをレンダリングしないことにより、処理リソースを節約します。
Traditional Billboard LOD (従来のビルボード LOD) では、固定された水平角度で周囲からキャプチャーし、上からのビューを表すための上からの単一画像をキャプチャーするというより古い技術を使用します。 これらの画像は、視野角に基づいてそれぞれのスプライト カードに配置されます。 反対を向いているカードはディザ エフェクトを使用してフェードします。
最初の 2 つのタイプのインポスタは、同じ技術に基づいています。 ツールは、オブジェクトの周りを指定されたビューの数だけキャプチャーします。 レンダリング時、インポスタ マテリアルは、現在のカメラ ビューに最も近い 3 つのキャプチャーされたフレームを見つけ、ブレンドし、実際の視野角により近い表現を生み出します。 この 3 つのフレームは単一スプライト平面上にレンダリングされます。
インポスタは、常にビューアのパースペクティブからの単一ブレンド スプライト フレームをレンダリングすることにより、角度によってはまったく正確には見えない特定の固定のパースペクティブ スプライト平面を使用するビルボードと比較して、よりスムーズでリアルな 3D ジオメトリのシミュレーションを提供します。 次の動画はこの違いを示しています。
左:インポスタ、右:ビルボード
フォートナイト バトル ロイヤル (FNBR) では、Nanite が無効の場合、すべての樹木に Upper Hemisphere Imposter を使用しています。これにより、遠くから見える島に広がる樹木の品質が良くなります。
インポスタとビルボードを比較する
インポスタとビルボードの違いは、インポスタは 9 つの頂点を持つ 8 つの三角形を含む 1 枚のスプライト カードを使用し、ビルボードは合計 81 の頂点を持つ 72 の三角形を含む 8 枚のカードを使用することです。 つまり、ビルボードの表現は、インポスタの表現を 8 倍の数の頂点と三角形で表現していることになります。
インポスタは、最も近い 3 つのフレームをブレンドするため、インポスタのピクセル シェーダーの負荷は大きいにもかかわらず頂点の数が少ないため、一般的にビルボードよりもはるかに早くレンダリングします。モバイル向けのインポスタ レンダリングは単一フレーム サンプルにフォールバックします。 また、ビルボードのマスクされたマテリアルのオーバードローも悪化します。 ビルボードを使用する主な利点は、(3x3 グリッドで) 9 つのビューのみがキャプチャーされるため、テクスチャでより高い解像度を得ることができることです。
距離のあるフォリッジには、インポスタの XY フレーム分布に 12 の値を使用します。 フォートナイト バトルロイヤルのほとんどのアセットに対して行います。 この結果、12 フレーム x 12 フレーム、合計 144 フレームが使用されます。
Imposter Baker プラグインを有効にする
開始する前に、Unreal Engine で、対象プロジェクトに対して ImposterBaker プラグインを有効にします。 これを行うには、[Edit (編集)] メニューから、[Plugins (プラグイン)] ブラウザを開きます。 プラグインは、[BUILT-IN (ビルトイン)] > [Mesh (メッシュ)] カテゴリにあります。
Unreal Engine 5.5 およびそれ以降のバージョンでの Impostor Baker プラグインの変更点
より多くのユースケースをカバーしながら Impostor Baker を使いやすくする新機能があります。 改善点は次のとおりです。
Impostor Baker は、マテリアル アセット上に配置されたマテリアルを切り替える必要なく GBuffer を使用してレンダリングできるようになりました。
Impostor Baker は、マテリアルが使用するすべてのカラー マップとスカラー マップ、および指定した組み合わせでスカラーがマッピングするチャンネル パックをレンダリング出力できるようになりました。
Impostor Baker に、「プリセット」としてデータ アセットに自動的に保存される値のレンダリングと微調整のためのフル アセット エディタが含まれるようになりました。
クリック 1 つでテクスチャとメッシュ データを自動的に直接ソース アセットに保存できるようになりました。
Impostor Baker に、指定されたプリセットを使用した複数のメッシュのインポスタのレンダリングとそのすべての保存ができるバッチレンダラが含まれるようになりました。
[No Parallax (視差なし)]、[Single BumpOffset Parallax (単一 BumpOffset 視差)]、[Full Iteration Parallax (フルイテレーション視差)] をインポスタ エディタまたは結果として得られたマテリアル インスタンスから直接切り替えられるようになりました。
インポスタ エディタを使用する
以下のセクションでは、Impostor Baker エディタのさまざまなセクションについて説明します。
インポスタ エディタ ウィジェット
インポスタ エディタ ウィジェットを使用するとインポスタのカスタマイズと作成を完全に制御できます。
プリセット ウィジェット
プリセット ウィジェットを使用してインポスタを生成することで、複数のインポスタを一度に生成および保存できます。
このウィジェットのいずれかにアクセスするには、コンテンツ ブラウザの任意のスタティックメッシュ アセットを右クリックし、[Scripted Asset Actions (スクリプト化されたアセットアクション)] > [Impostor Baker (インポスタ ベイカー)] のオプションを選択します。
プリセット データアセット
[Preset DataAsset (プリセット データアセット)] にはインポスタ エディタを開いたときに初期化されたすべてのデフォルトが含まれています。 これは、設定を一定に保つことで多くのインポスタを繰り返しレンダリングするときに時間を節約できます (個別設定の説明は下記を参照してください)。
上にあるボタンを使用して設定プリセットを次のように変更できます。
[Load Settings (読み込み設定)]:データアセットからの設定をインポスタ エディタに適用します。
[Apply to DataAsset (データアセットに適用)]:現在のインポスタ エディタ設定をデータアセットに適用します。
[New DataAsset (新規データアセット)]:[Asset Saving (アセットの保存先)] で指定されたパスに新規データアセットを作成します。
プロジェクトの DefaultEditor.ini (\(Your Project Root)\config\DefaultEditor.ini) で、インポスタ エディタまたはプリセット レンダラを起動するときにデフォルトで使用するデータアセットを指定できます。 次の情報を .iniファイルに含めます。
[/ImpostorBaker/BP/EUW_Impostor_Editor.EUW_Impostor_Editor_C]
DefaultSettingsAssetPath=/Game/ImpostorPresets
[/ImpostorBaker/BP/EUW_Generate_Impostor_using_Preset.EUW_Generate_Impostor_using_Preset_C]
DefaultSettingsAssetPath=/Game/ImpostorPresetsそして、DefaultSettingsAssetPath がプロジェクトで作成したデータアセット (またはプラグインとともにインストールされたデフォルト) を示すよう変更します。
ベイク設定
[Bake settings (ベイク設定)] のセクションにはインポスタの生成に影響する主な設定が含まれます。
| ベイク設定 | 説明 |
|---|---|
Static Mesh (スタティックメッシュ) | どのスタティックメッシュ アセットにインポスタを生成するかを決定します。 |
FramesXY (フレーム XY) | 各軸にいくつのサブフレームを生成するかを決定します。 たとえば、値 16 では 16x16=256 のサブフレームを作成します。 |
Color Maps to Render (レンダリングするカラー マップ) | インポスタ ベイカーがインポスタのためにどのフル カラー マップをレンダリングするかを決定します。 インポスタの大多数は、BaseColor と法線のみを必要とします。 カラー マップ出力オプションの全リストは次のとおりです。
|
Channel Packed Masks (チャンネル パック マスク) | カスタム スカラー マップのレンダリングと、単一のテクスチャの異なるカラー チャンネルへの結果のパッキングを提供します。 オプションは以下のとおりです。
|
Impostor Type (インポスタの種類) | レンダリングするインポスタの種類を決定します。 オプションは以下のとおりです。
|
Resolution (解像度) | 結果として得られるテクスチャに使用するテクスチャ解像度。 Epic Games は、フォートナイト バトルロイヤルなどのプロジェクトには解像度 2048 を使用します。 |
マテリアル設定
[Material settings (マテリアル設定)] のセクションには、インポスタが使用するマテリアルの設定と、結果として得られるマテリアルに適用するさまざまな設定が含まれます。
| マテリアル設定 | 説明 |
|---|---|
Hemisphere Material (半球マテリアル) | インポスタに使用する親マテリアルを決定します。 通常変更する必要はありません。 設定はベイク設定で選択したインポスタの種類に基づいて各タイプに適したデフォルトを表示します。 |
Sharing Model Override (共有モデル オーバーライド) | 現在の共有モデルを利用可能なシェーディング モデルに変更する方法を提供します。 |
Parallax Mode (視差モード) | 以下の 3 つのモードを切り替えます。
|
Constant Specular (定数スペキュラ) | チャンネル パック マスク配列でレンダリングされるスペキュラ マップがない場合にスペキュラに使用する値を設定します。 スペキュラ マップがレンダリングされる場合、このオプションは非表示になります。 |
Constant Roughness (定数ラフネス) | チャンネル パック マスク配列でレンダリングされるラフネスマップがない場合にラフネスに使用する値を設定します。 ラフネスマップがレンダリングされる場合、このオプションは非表示になります。 |
Constant Opacity (定数オパシティ) | チャンネル パック マスクでレンダリングされるオパシティ マップがない場合にオパシティに使用する値を設定します。 オパシティ マップがレンダリングされる場合、このオプションは非表示になります。 |
Subsurface Color (サブサーフェス カラー) | レンダリングされるサブサーフェス カラー マップがない場合にサブサーフェス カラーに使用する値を設定します。 このカラーは BaseColor に対して乗算され、(BaseColor Alpha のオパシティ マスクに保存される) 距離フィールド アルファを使用してマスクされます。 サブサーフェス カラー マップがレンダリングされる場合、このオプションは非表示になります。 |
Scatter Mask Min (最小散乱マスク) | これは、散乱が有効になる最小値を設定し、距離フィールド アルファをこのインポスタのサブサーフェス スキャッタリングとして使用できるようにします。 これを行わなければ散乱によって失われてしまうセルフシャドウイングの一部を回復させるという利点があります。 |
Scatter Mask Length (散乱マスクの長さ) | これは、距離フィールド アルファを使用して作成したスキャッタリング マスクのエッジ グラデーションの幅を設定します。 これを行わなければ散乱によって失われてしまうセルフシャドウイングの一部を回復させるという利点があります。 |
Mask Offset (マスクのオフセット) | この値は、距離フィールド アルファを使用して作成したマスクのオフセットを拡大または縮小します。 |
ビルボード設定
[Billboard Settings (ビルボード設定)] は、([Bake settings (ベイク設定)] にある) [Impostor Type] が [Traditional Billboards] に設定されている場合のみ表示されます。 インポスタの種類には、ビルボードを具体的に調整する設定があります。
| ビルボード設定 | 説明 |
|---|---|
Center XY On Mesh Pivot (メッシュ ピボット上の中心 XY) | この設定はデフォルトでは無効です。 無効にすると、スタティックメッシュは、その境界の中心を回転するカメラでキャプチャーされます。 これは通常、キャプチャーされたフレーム内にオブジェクトが確実に留まるようにします。 場合によっては、特に樹木では、通常は木の幹にある境界の実際の中心は、正確なピボットの位置ではない場合があります。 これにより、カメラが結果として得られるビルボードの周りを回転するにつれて、少しオフセットした幹のゴーストが一時的に見えるというアーティファクトが発生する場合があります。 この設定を有効にすると、XY 上のメッシュ ピボットを中心としてキャプチャーされるよう強制され、このアーティファクトが修正されます。 この設定を中心の近くにピボットがないメッシュに使用すると問題が発生する可能性があります。 |
Reference Plane Top (参照平面上部) | 上面に向いたカードの参照平面をずらします。 値は 0 から 1 の間で正規化され、0.5 はメッシュの中間点を表します。 この設定を変更すると、上部のカードをスタティックメッシュの最も幅が広い部分に配置します。 松の木を使用したこの例では、上部のカードは多少押し下げられ、アーティファクトの軽減に役立っています。 |
Reference Plane Sides (参照平面側面) | この設定は、[Reference Plane Top] と同様に機能しますが、法線に沿って側面の平面をずらします。 どこでも範囲のほとんどを占める非常に密度の高いオブジェクトをキャプチャーし、視差オプションを有効にしているのでなければ、通常、この設定を調整する必要はありません。 |
Use Sprite Vertex Shader (スプライト頂点シェーダーを使用) | この設定は、視差オプションを有効にする場合のみ有効にするようにしてください。 UV がジオメトリの境界を超えてオフセットしてしまうため、クリッピングが表示されます。 下の例は、メッシュの下部の周りにクリッピングが確認できる極端な例を示しています。 この設定のエフェクトは、マスクされたオーバードローを悪化させるため、控えめに使用してください。 |
ブループリントに公開されていない、追加の設定を制御する追加のビルボード マテリアル インスタンス値がありますが、より高度なケースでは、これらの設定をまだ調整することができます。 主なカテゴリは、トランジションのディザリング量を定義する [Dithering (ディザリング)] 設定と、カードがカメラに背を向け始めると削除するしきい値を定義する [Vertex Shader (頂点シェーダー)] 設定です。
アセットの保存先設定
[Asset Saving (アセットの保存先)] 設定は、アセットがどこに保存されるかを定義します。
| アセットの保存先設定 | 説明 |
|---|---|
New Asset Path (新規アセットのパス) | テクスチャとマテリアルのフォルダの位置。 デフォルトでは、パスはスタティックメッシュから相対です。 相対パスの場合は、パスを「 |
New Asset Texture Prefix (新規アセット テクスチャ プレフィックス) | これは、新しいテクスチャ アセットの名前の先頭に追加されるプレフィックスです。 |
New Asset MIC Prefix (新規アセット MIC プレフィックス) | これは、新規マテリアル インスタンス定数アセットの先頭に追加されるプレフィックスです。 |
Use Relative Path (相対パスを使用) | ソース メッシュに相対的なパスを設定します。 これが無効の場合、パスは、プロジェクト コンテンツ フォルダまたはプラグインの名前にアセットを配置するために「 |
スタティックメッシュ アセットの名前は常に特定のプレフィックスに追加され、その後に各マップ名が続きます。 たとえば、「S_Tree_01」という名前のスタティックメッシュがある場合、結果として得られる BaseColor は、上の画像に表示される値に基づいて「T_Impostor_S_Tree_01_BaseColor」となります。
詳細設定
[Advanced (詳細)] 設定には、編集する必要があまりない値が含まれます。
| 詳細設定 | 説明 |
|---|---|
Capture Using GBuffer (GBuffer を使用したキャプチャー) | 有効の場合、インポスタ データをキャプチャーするために GBuffer が使用されます。 これは、すべての不透明なマテリアルとマスクされたマテリアルに有効ですが、透過では機能しません。 ソース メッシュに半透明のマテリアルが含まれる場合、インポスタ エディタはビューポートで赤色のテキストで警告します。 このプライグインの以前のバージョンでは、まず各マテリアルにマテリアル関数「Impostor Capture Switch」を配置することが必要でした。 これはもう必要ではありませんが、場合によってはまだ配置することが望ましいこともあります。 使用例としては、これをフォートナイト バトル ロイヤルを使用してマテリアルを修正し、特定のワールドベースの色付け効果を削除することで、インポスタ マテリアルを生成後に動的に色付けできるようにする方法があります。 |
Orthographic (正投影) | True の場合、正投影レンダリングを使用してキャプチャーを行います。 この設定を変更することはほとんどないはずです。 視差のあるマテリアルはあとで正確なパースペクティブを再現するため、パースペクティブ レンダリングはほとんど必要ありません。 しかし、正投影レンダリングを使用して正しくキャプチャーできない特定のマテリアル エフェクト (フレネルなど) があるため、そのようなケースではこの設定を無効にできます。 |
Camera Distance (カメラ距離) | 正投影が無効の場合のみ使用されます。キャプチャーの距離を設定します。 |
Scene Capture Resolution (シーン キャプチャー解像度) | 各サブフレームをキャプチャーする解像度。 プロセスの一部にシーン キャプチャー テクスチャの MIP マップ チェーンが必要なため、この設定の値は自動的に最も近い 2 の累乗に丸められます (具体的には、最後のスプライト ジオメトリ カットアウトの生成)。 最終のテクスチャの各サブフレームの解像度の少なくとも 2 倍の値に設定し、結果がスーパーサンプリングされるようにします。 たとえば、最終テクスチャが 16 XY フレームの 4096 の場合、各サブフレームは 256x256 になります。 デフォルトシーンキャプチャー解像度である 512 は、サブフレームが、より良いアンチエイリアス結果が得られる 200% のスクリーン比率でレンダリングされることを意味します。 |
Show Floor In Preview Scenes (プレビュー シーンでフロアを表示) | ビューポートでのフロア メッシュの表示を切り替えます。 結果に影響はありません。 |
Impostor Casts Shadows (インポスタがシャドウをキャスト) | プレビュー ビューポートでインポスタがシャドウをキャストするかどうかを切り替えます。 これはキャプチャー処理や結果として得られる作成されたアセットに影響を与えません。 |
Shader Debug Mode (シェーダー デバッグ モード) | キャプチャーされたすべてのフレームのグリッドを表示するマテリアル上のデバッグ オーバーレイを切り替え、(ディザリングされたシャドウを表示することによって) カメラと太陽光の両方でこのグリッドを通してカメラ レイの位置を特定します。 最も近い 3 つのビュー フレームを含む現在の「三角形」も表示され、その位置でブレンドのウェイトによって色付けされます。 |
Show Debug Values (デバッグ値を表示) | インポスタ エディタの内部にある、さまざまなデバッグ情報 (使用されているマテリアル インスタンス ダイナミクス、境界やピボットのさまざまな統計情報など) を表示する、デバッグと呼ばれる詳細設定の新しいカテゴリを表示します。 問題のデバッグにのみ役に立ちます。 |
Show Render Targets (レンダー ターゲットの表示) | さまざまマップやシーン キャプチャー MIP のレンダー ターゲットの全配列を表示する、レンダー ターゲットと呼ばれる詳細設定の新しいカテゴリを表示します。 時折、調査に役立つ可能性があります。 |
Manual S RGB Retainer Box (手動 S RGB 保持ボックス) | 現在、インポスタ エディタはバグのため FPreviewScene をガンマ カーブなしでレンダリングします。 このチェックボックスによって、sRGB カーブを適用するために UMG 保持ウィジェットを使用する回避策を有効にできます。デフォルトでは有効です。 |
プレビュー モード
インポスタをプレビューするため、さまざまな方法でビューポートを制御できます。 デフォルトでは、構成可能な[Swap by Distance (距離による入れ替え)] の値に基づくビューポートはソース メッシュとレンダリングされたインポスタを入れ替えますが、[Side-by-Side (横並び)] ビューに設定して両方を表示することも、[Impostor Only (インポスタのみ)] の表示を強制することもできます。
横並びビューは、ソース メッシュとインポスタの違いを見つけて表示することができる表示モード設定と併用すると便利です。 このビューは、特に定数スペキュラやラフネスの値をキャプチャーすることなく近似値を求める場合に役立ちます。
次の例は、インポスタとオリジナル ソース メッシュの両方の法線を一緒に表示したビューポートです。
L キーを押したまま、マウスをクリックしドラッグすることで太陽光を回転できます。 左クリックしドラッグするとカメラをオービットでき、右クリックしてドラッグ、またはマウスホイールを使用して前後に移動できます。
親マテリアル
インポスタのベース親マテリアルは、コンテンツ ブラウザの「Engine/Plugins/ImposterBaker Content/Materials/Parents」にあります。 調べるには「M_Imposter」という名前のマテリアルを開きます。
チャンネル パック マスクのセット 1 つを含むインポスタ動作のコアは、次の 1 つの関数に組み立てられています。
定数スペキュラの値をパスするセクションは、次のとおりです。前の画像に示した関数のすぐ右側にあります。 この関数も、距離フィールド アルファでマスクされたビルトイン サブサーフェス スキャッタリングを処理します。
オプションのカラー マップ
レンダリングできる追加のオプションのカラー マップ (エミッシブ、サブサーフェス、接線) は、この関数を使用するマテリアルにすでに接続されています。 ツールは自動的に静的スイッチを切り替え、レンダリングされたときに正しいものが有効になるようにします。
次の関数を使用して、Lit テクスチャ (現在はどこにも接続されていない) などのカラー マップや含まれるチャンネル パック テクスチャとともに得られる 4 つを超えるスカラー マップをマテリアルに追加することができます (上の画像で説明した関数の下のマテリアルにあり、切断されています)。
スカラー マップ
ラフネス、スペキュラ、クリア コートなど、レンダリングできる追加のスカラー マップは、このマテリアル関数を使用してすでに接続されており、これも静的スイッチを自動的に切り替えて、レンダリングされるテクスチャと、それに対応するカラー チャンネルを有効にします。
従来のビルボードの親マテリアルは、コンテンツ ブラウザの「Engine/Plugins/ImposterBaker Content/Materials」にあります。 「M_Billboard_01_Inst」という名前のマテリアルを開きます。
/Script/Engine.Material/ImpostorBaker/Materials/Parents/M_Billboard_01_Inst
上のインポスタ マテリアルとまったく同じに設定してあります。従来のビルボードのマテリアル レイアウトを理解するには、それらの画像を参考にすることができます。 マテリアル関数は同じように名前が付けられますが、名前に「_Billboard」が含まれます。 ロジックも基本的に似ていますが、関数の内部詳細のみが異なります。
GBuffer なしでレンダリングする
透過をキャプチャーする場合、またはキャプチャー中に特定の機能を無効にする必要がある特殊なケースでは、[Capture using GBuffer (GBuffer を使用したキャプチャー)] を無効にし、マテリアル関数「ImpostorCaptureSwitch」をメッシュが使用するグラフの最後に配置する必要があります。
[Capture using GBuffer] を無効にしても、マテリアル関数「ImposterCaptureSwitch」を含まない場合、キャプチャーされたインポスタは、正確にレンダリングされず、多くのアーティファクトが発生します。 これは、マテリアルがベース カラーとライティングを深度と解釈するため出力に視差が適用され、レンダリング エラーが発生するためです。
この問題の重大さに関するコンテキストについては、直接引用されたデベロッパーからの次の言葉を考慮してください。
「[Capture using GBuffer] をオフにしても、マテリアルに上記の関数がなければ、キャプチャーされたインポスタは、基本的に不幸なアーティファクトを吹き出しつづける蒸し器のようなものです。これは、マテリアルがベース カラーとライティングを深度と解釈して、元の情報を失った意味のないピクセルのかたまりに視差をつけるためです。
残念なインポスタは、現時点でのインポスタ症候群の悪いケースです。その設定は有効ですらありません」
プリセットを使用して複数のインポスタを生成する
複数のスタティックメッシュにインポスタを生成するには、スタティックメッシュを選択し、右クリックしてコンテキスト メニューから [Scripted Asset Actions (スクリプト化されたアセット アクション)] > [Impostor Baker (インポスタ ベイカー)] > [Generate Impostor Using Preset (プリセットを使用してインポスタを生成)] を選択します。
設定プリセットを設定し、スタティックメッシュに最後の LOD ですでにインポスタがあるときに取るべきアクションを決定したら、[Generate and Save Impostors (インポスタを生成し保存)] をクリックします。
[Present Dialogue (ダイアログを表示)] を設定した場合、既存のインポスタを検知すると処理が一時停止します。 ポップアップ ダイアログを選択し、最後の LOD を置き換えるか、新しい LOD を追加するか、あるいはこのステップを完全にスキップするか、取るべきアクションを選択するまで処理を一時停止します。 これは、インポスタ エディタ内から起こる可能性もあります。
フル反復的視差モード
フル反復的視差モードは、オリジナル メッシュが使用するすべてのチャンネルのデータをインポスタがキャプチャーしている限り、オリジナルとほとんど見分けがつかないレンダリングが可能です。 隣接するフレームから各ピクセルの最良のレイ結果を選択し、基本的に隣接するフレームからコーナーをトレースします。 このオプションの名前は [Depth Derived Weights (深度由来のウェイト)] です。
以下は、スペキュラ、ラフネス、クリア コート、メタリック マップを 1 つのチャンネル パック テクスチャにキャプチャーしながら、カラー キャリブレータを使用して単一視差と反復的視差を比較した例です。 これは、ブレンドのアーティファクトを拡大する、とても厳しいテストです。