Language:
Page Info
Tags:
Engine Version:

テクスチャ ストリーミングのデータのビルド

バージョン 4.15 からマテリアルやマテリアル インスタンスが修正され、再保存されると、使用される各テクスチャに関連するテクスチャ ストリーミング データを再計算するようになりました。 テクスチャ毎のデータには UV Channel Index と Scale があります。この場合、UV Channel Index はテクスチャをサンプリングするために使われます。Scale はサンプリング前にチャンネルに適用される 乗算係数になります。

ただし、すべてのケースをカバーするわけではありません。サンプリングはワールド位置、メッシュの頂点カラー、任意の UV チャンネルの組み合わせに基づき行われるためです。こうした分析の結果、関連データを見つけることができないことがあります。 エンジンは UV Channel 0 と Scale of 1 の依存関係を前提とします。

編集対象に応じて分析は異なるステップで実行されます。

  1. マテリアル: ユーザーが修正を適用するか、保存した場合に実行します。

  2. マテリアル インスタンス: マテリアル インスタンス エディタが閉じたとき、またはマテリアル インスタンスを保持するパッケージが保存される場合に実行されます。

  3. レベル: "Build Texture Streaming" を実行する場合に、使用されるすべてのマテリアルに対して実行されます。すべてのマテリアルを確実に最新にするためのものです。マテリアルが最新にならない理由は以下のとおりです。

    • 4.15 より前のマテリアルがデータを全く持っていない。

    • マテリアルの親が変更し、インスタンス データが古くなっている。

    • 最後にマテリアルが保存されてから改善が加えられた。

    • バグ フィックスがある。

任意のプリミティブ コンポーネントに対して、使用される各テクスチャの必要な解像度を正確に計算するためのデータは以下の通りです。

  • プリミティブの境界

  • メッシュのテクスチャ座標のサイズ

  • 各テクスチャをサンプリングするためのマテリアル テクスチャ座標のスケール

こうした情報が欠けていると、保守的なヒューリスティックが用いられます。

テクスチャ ストリーミング データをビルドするには

  1. ツールバー[Build (ビルド)] ボタンの横にあるドロップダウン矢印をクリックします。

  2. [Build Texture Streaming (テクスチャ ストリーミングのビルド)] をクリックします。

    BuildTextureStreaming.png

    これにより、ランタイムに使用するコンポーネントとレベル データが生成されます。

    BuildingTextureStreaming.png

これで、最高のクオリティ レベルとサポートされる機能レベルを用いて、すべてのマテリアルのクオリティ レベルとプラットフォームの機能レベルで使用するデータが生成されます。

ランタイムにコンポーネントがビルド プロセスで使われたものよりも少ないテクスチャを用いている場合、未使用のものは無視されます。

ストリーミング データを 4.15 に移行する

4.15 より前に編集したマテリアルはテクスチャ ストリーミング データをマテリアルと共に保存していなかったため、修正または再保存されるまでデータを持ちません。これには、マテリアルの子インスタンスを再保存することも 含みます。データを迅速に移行するには、コンソール コマンド、BuildMaterialTextureStreamingData を使います。

これは、現在メモリにロードされているすべてのマテリアルをパースし、欠けているデータがあれば生成します。更新されたマテリアルは、再保存のためにマーク付けされます。

マテリアル データを調べる

ビルドされているデータは Material Texture Scales ビューモードで調べることができます。このビューモードは計算に成功したものだけを表示し、フォールバック ケースがあれば、undefined として表示されます。 このビューモードはマテリアルのスケールの精度を示し、分析の変更をバリデーションするために使われます。テクスチャストリーミング関連のクオリティの問題があれば、考えうる原因も特定します。

マテリアルのテクスチャ ストリーミング データを調べるには、コンテンツ ブラウザ からマテリアルを選択するか、シーン ビューでプリミティブを選択します。メイン ビューポートの [Texture] タブのラベルの最後に、"(Scene Selection)" または "(Content Browser)" という表記が加えられ、 その選択がどこからのものかを示します。

Scene Selection を使う場合、個々のマテリアルは選択不可であり、UI はすべてのマテリアルからのデータをグループ化します。

NoSelection.png

ContentBrowser.png

SceneSelection.png

選択なし

コンテンツ ブラウザからのマテリアル

シーンで選択されたアクタ

Scene Selection

Scene Selection を使う場合、個々のマテリアルは選択不可であり、UI はすべてのマテリアルからのデータをグループ化します。ドロップダウンからテクスチャの選択肢のひとつにカーソルを乗せると、ツールチップに リストされているテクスチャがすべて表示されます。

SingleSelection.png

MultipleSelection.png

単一オブジェクトのシーン選択

複数オブジェクトのシーン選択

Content Browser Selection

コンテンツ ブラウザ の選択を使う場合、テクスチャはそのテクスチャ インデックス、マテリアル名 (複数マテリアルが選択されている場合)、およびテクスチャ名によって特定されます。 テクスチャ インデックスは各マテリアル内の識別子です。表示される精度は使用する GPU 値を、マテリアル分析で計算された値と比較することで 計算されます。

CB_SingleSelection.png

CB_MultipleSelection.png

単一マテリアルのコンテンツ ブラウザの選択

複数マテリアルのコンテンツ ブラウザの選択

All Textures モード

All Textures モードではすべての使用されたテクスチャから最悪のケースが示されます。グローバル値が正確な場合 (ライトグレー)、すべてのテクスチャは正確な値を持ちます。残念ながら このモードには制約があります。同じテクスチャが異なるスケールで複数回サンプリングされると、通常オーバー ストリーミングとして表示されます。これは、 高い解像度を必要とするスケールだけが使用され、より低い解像度を必要とするスケールは分析で無視されるからです。この制約はテクスチャ単位のビューには適用されません。

ビルドの精度

テクスチャ ストリーミングのビルド中に計算されるデータの精度は、以下のテクスチャ ストリーミングの精度のビューモードで調べることができます。

ShowTextureStreamingAccuracies.png

こうしたビューモードでは、ビルドされたデータの精度が表示されます。精度の結果が低すぎたり、高すぎたりする場合 (赤または緑)、手動による コンフィギュレーションの変更 を使ってデータを修正できる場合があります。 テクスチャ ストリーミングのビルドでは、手動の微調整を必要とせずに最良のデータを生成することを目指しています。

OriginalTextureScene.png

上の画像は、以下に示したテクスチャ データをビルドするために使ったシーンです。すべてのビュー モードに対して、以下の表記を使用します。

  • 赤: 2X+ のミップ欠落

  • 黄色: 1 ミップ欠落

  • 白: 良好なデータ

  • シアン: 1 ミップ余分

  • 緑: 2X+ ミップ余分

Primitive Distance Accuracy(プリミティブの距離の精度)

ストリーマーが計算した表示メッシュの距離の精度と、実際の GPU の距離とを比較したものです。ストリーマーは、視点からテクスチャ インスタンスの軸に平行な バウンディング ボックス (AABB、軸平行境界ボックス) からの距離を計算します。このバウンディング ボックスは、テクスチャを使用するコンポーネントの LOD- セクションの AABB を合計することによって、ビルド プロセスで計算されます。

視点が非常に近くなるか、この AABB になると、ジオメトリが AABB に適合しない限り、このモードでは常に 2X+ over として表示されます。GPU の距離は通常 0 になりませんが、ストリーマーが計算した距離 は 0 になるからです。従ってストリーマが計算した距離と GPU の距離の比率は非常に大きくなります。これはエラーではないため、現時点で修正する 必要はありません。

PrimitiveDistanceAccuracy.png

ここで表示される値は、メッシュ コンポーネントの [Streaming Distance Multiplier] を変更することで調整できます。

StreamingDistanceMultiplier.png

Mesh UV Density Accuracy(メッシュ UV の密度の精度)

このビュー モードには、実際の GPU の値と比較して、ストリーマーが使用するメッシュのワールドテクスチャ座標のサイズの精度を示します。このサイズは、ワールド空間単位によるテクスチャ座標の変化に関連しています。 これはテクスチャ座標のテクスチャのサンプリングに対する影響を評価するためにストリーマーが使用します。

UVDensities.png

このビュー モードは比較的視点に依存せず、メッシュの値が不適切な場合は、通常シーン関連ではなく、メッシュ関連のものになります。つまり、あるメッシュに誤ったデータがあれば、このメッシュを使うコンポーネントも 正しくない可能性があります。この値はスタティックメッシュ エディタまたはスケルタルメッシュ エディタで変更できます。これを行うには、メッシュが 適切な 範囲に入るまで StreamingDistanceMultiplierを微調整します。

Material Texture Scale Accuracy(マテリアル テクスチャのスケールの精度)

マテリアルで使われるテクスチャのほとんどは、Mesh UV Densities のひとつのスケーリングされた値を使ってサンプリングされます。テクスチャ ストリーミングのビルドでは、どのテクスチャ座標を使うか、サンプリングされた各テクスチャにどのスケールを適用するかを計算しようとします。 これは多くの理由から失敗するかもしれません。その場合、ストリーマーはテクスチャがテクスチャ座標 0 およびスケール 1 でサンプリングされたとみなします。

MaterialTexture.png

標準のものに加えて、黒白のチェッカーボードは、何らかの理由でビルドで必要なシェーダーがビルドできなかったことを示しています。マテリアルは多くのテクスチャをサンプリングするため、このビューモードでは すべてのサンプリングされたテクスチャに対して最悪のエラーを示します。2 つの極値 (過少ストリーミングと過剰ストリーミング) がチェッカーボードに表示されます。ひとつは最悪のオーバー サンプリングを示し、もうひとつは最悪のアンダーサンプリングを示します。

テクスチャ毎の個々のエラーは、コンソール コマンド、r.Streaming.AnalysisIndex X を使って調べることができます。この場合、 X は 0 から 31 の間の値になります。

必要なテクスチャ解像度

このビューモードでは、現在ストリーミングされているテクスチャ解像度と必要なテクスチャ解像度との関係を表示することができます。

RequiredTextureRes.png

このビューモードは Material Texture Scale と類似点がありますが、テクスチャ ストリーミング データの精度を示すのではなく、現在ロードされているテクスチャ解像度の有用性を 絶対的な方法で示します。

テクスチャに対してロードされた解像度はロジックとメトリクスの組み合わせで決まります。例えば、テクスチャは解像度が欠けているかもしれません。それをロードする十分なスペースがないからです。または、 解像度が高すぎる場合があります。将来の使用に備えてテクスチャ プールにより高いミップがキャッシュされているからです。ストリーマーは通常、一番高い解像度を必要とするコンポーネントによって操作されます。そのため、 あるコンポーネントでテクスチャのビヘイビアを調べるのは、その解像度を操作するコンポーネントである場合に限り意味があります。

こうしたことから、このビューモードは管理されている環境でテクスチャ ストリーマーのビヘイビアを調べるのに最適です。これを行うための有用なセットアップは、以下を設定することです。

r.Streaming.DropMips 2

これは、ストリーマーに可視ミップだけを維持するように指示します。したがって、キャッシュとプリフェッチを無効にします。カメラを動かすことで、ストリーマーが適時に適切なミップをロード、アンロードするかを確認します。

テクスチャ選択メニューには、選択したコンポーネントのマテリアルで選択されているテクスチャが 32 よりも少なければ、テクスチャ単位の選択が表示されます。テクスチャをこのように選ぶと、 それを使うすべてのシーン コンポーネントで表示されます。

RequiredRes_TextureSelection.png

制約と既知の問題

  • 必ずしもすべてのマテリアルが分析によってサポートされているわけではありません。現在、デカールとランドスケープのマテリアルはサポートされていません。分析で使用するシェーダーが生成されない場合もあります。 こうした場合、均一にダークグレイのプリミティブが表示されます。すべての問題に対する詳細なログをコンソール コマンド、log TextureStreamingBuild level all から有効にすることができます。

  • マテリアル インスタンスは親が変更されて再保存されたが、子インスタンスが再保存されたなかった場合、非推奨のデータを持つことがあります。これはテクスチャ ストリーミング データがマテリアルで保存されているが、 親マテリアルの修正が子マテリアル インスタンスの再保存をトリガーしないためです。

  • ランタイムにエンジンはテクスチャ名を使ってマテリアルのストリーミング データにアクセスします。これは、パフォーマンスを良好に保ちながら、ランタイムにアセットへのハード リファレンスを防ぐためのものです。つまり、 同じ名前を持つ複数のテクスチャがひとつのマテリアルで使用されていると、両方のデータからの必要な解像度が両方のテクスチャに適用されるからです。

  • Material Texture Scales ビューモードで使われるシェーダーは永続的ではありません。例えば、シェーダーのコンパイルやマップのロードなど、ある種のオペレーションが行われると欠落したり、削除されることがあります。 再度ビューモードを選ぶと欠落しているシェーダーを再生成します。

Tags