3D Imposter スプライトをレンダリングする

Choose your operating system:

Windows

macOS

Linux

13.jpg

インポスタ (Imposters) はスプライトであり、フリップブック (パラパラ漫画) スタイルのテクスチャを使用して、あらゆる可能なビュー、または少なくともテクスチャ シートに無理なく入れることができる数のビューからのスタティックメッシュのビューを格納します。結果として、マテリアルとライティングという点で、オリジナルのメッシュに非常にマッチしたスプライトが得られます。ただし、フレーム間で幾分ポッピングがあるでしょう。つまり、すべての用途で完璧というわけではありません。ゆっくりとは動かない、カメラの近くを通過しない「数多くの」オブジェクトをレンダリングする必要がある場合に、非常に役立ちます。

初期設定

一連のインポスタ テクスチャをベイクしてから、インポスタ スプライトを作成します。これを行うには、 RenderToTexture_LevelBP Render Type を、 Render 3D Imposter Sprites に設定し、 Capture Settings を選択し、 Render 3D Imposter Sprite 設定を調整します。

settings_3.png

プロパティ

説明

Imposter Static Mesh

インポスタ作成対象のスタティックメッシュです。

Imposter Material Array

これは配列であり、複数のマテリアル ID を持つメッシュの各インデックスに対してマテリアルを指定することができます。

インポスタ マテリアル配列にあるマテリアルの法線マップ入力で "Tangent to Local" に設定された Transform ノードを使用する必要があります。その理由は、このトップダウン方式が強制する同じカメラを使用する代わりに、カメラが あるであろう 位置の方向から見たワールドの法線を表したいからです。法線マップ テクスチャがなければ、0,0,1 変換された Tangent->World を単に使用します。

Frames around Z

インポスタが Z 軸周囲にいくつのフレームを格納するかを決めます。数が大きくなるほど、最終結果でのモーション中の「ポッピング」が少なくなりますが、テクスチャの解像度が低くなるか、非常に大きなテクスチャ サイズを使用する必要が生じます。

Mesh Scale

最終的なインポスタ スプライト マテリアルで、エッジのにじみの問題があれば、メッシュを若干スケールダウンできます。これは、メッシュが非常に密接にその球体の境界に一致していて、メッシュが各グリッドセルのエッジに近づくという稀なケースに限り必要になります。必要な場合に限り調整してください。スケールが小さくなるほど、失われる解像度が大きくなるからです。

Aspect Ratio 1 by

この設定では不均一なテクスチャを作成できるようにします。デフォルト 1 では、インポスタのグリッドは正方形になります。設定が 2 であれば、アスペクト比は 2:1 になります。設定が 4 であれば、アスペクト比は 4:1 というようになります。"Full 3D Imposters" ではアスペクト比を正方形に保ち、"Single Rotation Axis" モードを使用する場合にのみ変更することをお勧めします。注意:この設定名はわかりずらいため、将来変更される可能性があります。

Imposter Enum

これは、以下の2 種類のインポスタ ベイクの中から選択できるドロップダウンです。"Full 3D Imposters" と "Single Rotation" 軸です。Full 3D Imposters は上と下を含むすべてのアングルで表されます。"Single Rotation Axis" は、Z 軸周囲のみでメッシュを回転させます。これは木、大きな建物、一般的なスカイボックス要素など水平線に接している遠くの LODに対して理想的です。Single Rotation 軸の方が、格納する必要があるものが少ないためテクスチャ メモリを効率的に使用します。

Single Rotation Axis rotation

この設定は、シングル回転軸オプションが選択された時のみ使用される回転開始の設定です。カメラに対して相対的に必要な向きにメッシュを向けることができます。

メッシュ法線

インポスタ作成元メッシュのマテリアルでいくつかの微調整が必要になります。

  1. インポスタを作成しようとしているスタティックメッシュのマテリアルを開きます。

  2. マテリアル ノードを選択します。

  3. Tangent Space Normal を無効にします。

  4. Transform ノードを、マテリアル グラフのマテリアルノード上の法線マップ/計算と法線入力ピンとの間に追加します。

    法線マップまたは法線計算がない場合、0,0,1 (Blue) に設定された Vector 3 を追加し、それを代わりに使用します。

  5. Transform ノードで、Source プロパティを Tangent に設定します。

  6. Transform ノードで、Destination プロパティを Local に設定します。

setupYourMesh.png

インポスタのレンダリング

必要なフレーム数でインポスタを構成したら、インポスタ テクスチャのレンダリングは、オリジナルの「マテリアルのタイリング」ステップと同じようなものになります。

Capture Settings (キャプチャ設定) で必要なバッファ ターゲットを選択します。 High resolution screenshot (高解像度スクリーンショット) ウィンドウが開いていることと、 Include buffer visualization (バッファ視覚化を含む) オプションが有効であることを確認します。 New Window でゲームを Play し、 ~ キーを用いて コンソール を呼び出し、コンソールで "ke * rendertextures" と入力し、Enter キーを押します。

renderTextures.png

イメージが保存されたことを示すポップアップ メッセージが表示されます。このメッセージは実際にフォルダの場所にクリック可能なリンクです。リンクをクリックできない場合は、以下に保存されたテクスチャがあります。

\YourProject\Saved\Screenshots\Windows\

BaseColor.png DecalMask.png WorldNormal.png

法線マップのほとんどが青で一部が明るい赤/緑の場合、Tangent から Local space の法線にシフトするスタティックメッシュのマテリアル セットアップの手順の 1 つをスキップしたのかもしれません。

インポスタのインポート

UE4 の High Resolution Screen Shot 機能は、.bmp ファイルをエクスポートするため、画像編集ツールでファイルをロードし、.tga ファイルとして保存する必要があります。その後は、他のテクスチャと同じようにインポートできます。

法線マップ テクスチャの調整

法線マップ テクスチャで以下のようにいくつかのプロパティを変更する必要があります。

  1. コンテンツ ブラウザ で法線マップを ダブルクリック して開きます。

  2. [sRGB] プロパティを無効にします。

  3. Compression Settings TC_Default に設定します。

  4. テクスチャを保存します。

normalSettings.png

インポスタ マテリアルの作成

これでレンダリングしたインポスタ イメージ一式が用意できました。こうしたテクスチャを利用するには、ImposterUV マテリアル関数を コンテンツ ブラウザ でクリックして Imposter Material Graph にドラッグし、この関数を使用してマテリアルを作成する必要があります。

imposterMatNodeCB.png

imposterNode.png

この関数は、マテリアルの UV、法線、WorldPositionOffset をセットアップします。インポスタのセットアップに合わせて定義する必要があるパラメータを以下に示します。

入力 ピン

説明

Frames X (S)

インポスタの X 軸のフレーム数です。例えば、Z 軸周囲で 16 回転を指定した場合、X 軸上には 16 フレームあることになります。

Fixed Z (B)

インポスタを "Single Rotation Axis" で使用する場合にのみ True に設定される Boolean オプションです。これは計算の負荷をかなり小さくします。

Frames Y (S)

Y 軸上のフレーム数です。正方形のアスペクト比に対して、これは常にフレーム Y と一致します。アスペクト比 2:1 を入力した場合、Y フレームはX フレームの半分になります。

SpriteWidth (S)

結果として得られるスプライトの幅です。

SpriteHeight (S)

結果として得られるスプライトの高さです。

Position (V3)

デフォルトで AbsoluteWorldPosition になり、ほとんどの場合、そのままにします。関数を使用して変わったアングルでインポスタを表示させたり、場所を表すためにカスタム データを使用したい場合に使用できます。

VertexShaderZrotation (S)

これはデバッグのみの設定です。この機能では、全範囲にわたり滑らかに補間するのではなく、スプライトの Z 回転を個別のステップのセットに分けます。これにより、インポスタがどのようにベイクされるかによってポッピングの見た目が悪くなるのを防ぎます。スムーズなスプライトの補間では、インポスタは各フレームの遷移で回転しすぎるように見えます。値が 1 と等しい場合、それを修正します。無効になるとどのようになるかをみるために、この値を 0 に設定することができます。上記で目立つのは、ほとんどインポスタのメッシュです。

Rotation (S)

インポスタのスプライトは、指定した軸周りを回転することができます。これにより、同じインポスタ スプライトの様々なコピーをワールド内でランダムに回転させて、同じものには見えないようにすることができます。

Rotation Axis (V3)

この設定は現在無効になっています。回転軸は常にデフォルトで 0,0,1 すなわち Z 軸周りになります。任意の回転軸をサポートしようとするといくつかの問題がありましたが、将来的に対応予定です。

Normals (V3)

これは法線マップ テクスチャになります。指定した回転値に合致するように法線を回転させます。

出力ピン

説明

TransformedNormals

変形した法線マップを含みます。マテリアルの Normal 入力に接続します。

WorldPositionOffset

スプライトを向いているカメラの WPO を含みます。World Position Offset 入力に接続します。

UVs

インポスタのテクスチャの UV です。マテリアルに配置するインポスタのテクスチャは、UV としてこの出力を持ちます。これには、法線マップを含みます。この法線マップは、"Normals" 入力で関数にループバックするように見えます。

Phase2UVs

まだ完全には実装されていない実験的な機能です。2 つ以上のテクスチャ ルックアップを持つ機能の始まりであり、1 フェーズ先、1 フェーズ後、およびポッピングを減らすためにその間でフェード/ディゾルブします。

マテリアルは以下のようになります。

Normal map テクスチャから入力を取る Constant Bias Scale ノードがあることにお気づきでしょう。これはワールド空間法線の色を再調整するために必要です。

フル インポスタの例

11.jpg

シングル回転軸インポスタの例

13.jpg

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