事前計算されたビジビリティ ボリューム

事前計算されたビジビリティ ボリュームを使用して、オフラインのカリング方法でレベル内のオブジェクトを動的にカリングする方法の概要を示します。

他のカリング方法と同様に、事前計算されたビジビリティ ボリューム (Precomputed Visibility Volume) は小規模から中規模サイズのワールドのパフォーマンスの最適化に使用され、通常は、ハードウェアに応じて動的オクルージョン カリングが制限されるモバイル型プラットフォーム向けです。 事前計算されたビジビリティ ボリュームには、プレイヤーまたはカメラの位置に基づいて、ワールド内にアクタが存在する場所の可視性 (ビジビリティ) の状態が保存されます。 このため、事前計算されたビジビリティは、ほとんどが静的にライティングされた環境であるプロジェクトや、プレイヤーの移動に制限があるもの、そして 2D プレイ領域を含むプロジェクトで最も役に立ちます。

ビジビリティ セルは、シャドウ キャスティング ジオメトリの上でライティングがビルドされる際に生成されます。 アクタのビジビリティは各セルの位置から保存されます。 事前計算されたビジビリティはオフラインで生成されるため、実行時メモリとライティングのビルド時間の増加を伴うものの、通常はハードウェア オクルージョン クエリによるレンダリング スレッド時間の削減につながります。 このことを念頭に、ビジビリティのカリングを維持するために、このボリュームを配置するのはプレイヤーまたはカメラがアクセス可能な領域にとどめることを推奨します。 

シーン ビューの例

事前計算されたビジビリティによるビジュアリゼーションが有効な状態

設定および使用方法

開始する前に、レベルに対して事前計算されたビジビリティを有効にする必要があります。 [World Settings (ワールド セッティング)] を開いて [Precomputed Visibility (事前計算されたビジビリティ)] セクションに移動します。 [Precompute Visibility (ビジビリティの事前計算)] の隣のチェックボックスをオンにします。

WS_EnablePVIS.png

[Modes (モード)] パネルから [Precomputed Visibility Volume] をレベル内にドラッグして、プレイ可能な領域に合わせてスケーリングします。

最良の結果を得るためのヒントや推奨事項については、下記の「配置」セクションを参照してください。

PVIS_AddVolume.png

事前計算されたビジビリティを機能させるには、まず [Show (表示)] > [Advanced (詳細設定)] > [Precomputed Visibility] に行き、ライティングをビルド して、レベル ビューポートを使って、事前計算されたビジビリティ セル (青色のボックス) を有効にする必要があります。

ボリュームを配置する際は、すべてを取り囲む単一のボリュームを使うのではなく、プレイヤーがアクセス可能な各領域にのみ配置してください。 こうすることで、使用されることのないビジビリティ データを実行時に保存およびロードせずに済みます。

ライトのビルド前の事前計算されたビジビリティによるビジュアリゼーション

ライトのビルド後の事前計算されたビジビリティによるビジュアリゼーション

ライティンをビルド済みの場合は、メイン ツールバーの [Build (ビルド)] ドロップダウンから [Precompute Static Visibility (静的ビジビリティの事前計算)] を選択して、ビジビリティ セルを生成することができます。毎回ライティングを再ビルドする必要はありません。

Tip_buildJustPVIS.png

ビジビリティ セル

ライティング情報をレベルに対して少なくとも 1 回ビルドした後に、事前計算されたビジビリティ ボリュームを好きな数だけ配置して、静的シャドウをキャストするアクタのサーフェスに適用されるビジビリティ セルを生成できます。 静的ビジビリティを生成するには、メイン ツールバーの [Build] ドロップダウン メニューから [Precomputed Static Visibility] オプションを選択します。

事前計算されたビジビリティ セルによるビジュアリゼーション: 無効

事前計算されたビジビリティ セルによるビジュアリゼーション: 有効

[Show Precomputed Visibility Cells (事前計算されたビジビリティ セルの表示)] の表示フラグが有効な場合は、r.ShowRelevantPrecomputedVisibilityCells を使用してカメラ付近のビジビリティ セルのみを表示できます。 こうすることで、一度に画面上に表示されるセルを削減することができます。

このシーンの場合、事前計算されたビジビリティ ボリュームが配置されており (緑色)、ライティングもビルド済みで、壁と戸口でオクルードされたアクタがいくつかあります。

下の画像では、セル内にアクタの位置を保存することで、事前計算されたビジビリティがどのように機能することをわかりやすく示すために、壁と戸口の一部を非表示にしてあります。 画像下のスライダをドラッグしてカメラの位置を変え、カメラの位置と保存先のセルに基づいてビジビリティの状態が変わることを確認してください。

この例の画像では、オクルードされるアクタのビジビリティの状態を明確に示すために、事前計算されたビジビリティ セルが非表示になっています。

事前計算されたビジビリティが生成されると、セルの位置から表示すべきアクタの情報がセルに保存されます。 この例では、セルには何を表示すべきかについての情報があるため、壁やドアなどのオクルードするアクタを非表示にすることができ、カメラが事前計算されたビジビリティ セル内にある限り、オクルードされたアクタは表示されません。これにより、一部のタイプのゲームやプラットフォームに対しては、これがトレードオフとして最適なカリング方法となります。

ゲームプレイに対してセル プレイ領域の高さを設定する

事前計算されたビジビリティを使用する際は、スケールはゲームに依存するものであるため、ビジビリティのパラメータはそれぞれのゲーム向けに設定する必要があることに注意してください。

ゲームごとに設定するには、「[Unreal Engine Root Directory]/Engine/Config」フォルダにある「BaseLightmass.ini」ファイルで設定を変更します。 「DevOptions.PrecomputedVisibility」セクションを見つけます。

[DevOptions.PrecomputedVisibility]
bVisualizePrecomputedVisibility=False
bCompressVisibilityData=True
bPlaceCellsOnOpaqueOnly=True
NumCellDistributionBuckets=800
CellRenderingBucketSize=5
NumCellRenderingBuckets=5
PlayAreaHeight=220
MeshBoundsScale=1.2
VisibilitySpreadingIterations=1
MinMeshSamples=14
MaxMeshSamples=40
NumCellSamples=24
NumImportanceSamples=40

これらの設定のうち、「PlayAreaHeight」の設定に注目してください。 この値は、ビジビリティ セルがあるサーフェスの上の高さ (Unreal の単位) を表します。 ゲームでは、これがサーフェスの上でカメラが到達できる最も高い位置であり、通常は最も高いプレイヤーの視点に、ジャンプした際の高さを加えたものです。

この設定ファイルで「PlayAreaHeight」やその他の設定を変更しても、エンジンを再起動する必要はありません。 設定ファイルを変更したら保存して、メイン ツールバーの [Build] メニュー ドロップダウンから [Precompute Static Visibility] を使用します。

プレイ領域の高さ: 220 (デフォルト)

プレイ領域の高さ: 650

ThirdPerson テンプレートを使用する際は、このゲーム タイプ向けに設定すべき PlayAreaHeight を判断するために、考慮する必要のある事項がいくつかあります。

pvis_findingcameraheight.png

  1. カメラの最も高い回転ポイントを見つけます。

    1. ThirdPerson テンプレート内では、カメラでキャラクターの周りを 360 度回転させることができます。 最も高い位置は、地上のサーフェスからおよそ「395」単位の位置です。

  2. プレイヤーのジャンプの高さ。

    1. プレイヤーは、およそ「210」単位の高さまでジャンプできます。

  3. カメラを配置できる最も高い位置。

    1. カメラを配置できる最も高い位置 (365 単位) にプレイヤーがジャンプする高さ (210 単位) を加えることで、セル内でのカメラの最も高い位置は「615」単位になります。

垂直方向の回転においてカメラを維持するためには、PlayAreaHeight が少なくとも 615 単位でなければならないことがわかっているので、カメラをビジビリティ セル内に確実にとどめるために、多少のバッファを加えます。 バッファを加えた高さは 650 単位になります。 このゲーム タイプとカメラの動きについては、セルに対してこれくらいの高さにすることが理に適っています。 ただし、PlayAreaHeight の値を高く設定するに伴い、より多くのアクタのビジビリティの状態を保存する必要があるため、より多くの実行時メモリが必要になることに注意してください。

事前計算されたビジビリティ ボリュームのオーバーライドを使用する

Precomputed Visibility Override Volumes (事前計算されたビジビリティ ボリュームのオーバーライド) により、事前計算されたビジビリティ ボリュームの自動生成の結果が望ましくない場合に、ワールド内のアクタの位置におけるアクタのビジビリティを手作業でオーバーライドすることができます。 また、これらはパフォーマンスの最適化にも使用され、プレイヤーがアクセス可能な領域にのみ配置することを推奨します。

配置

[Modes (モード)] パネルから [Precomputed Visibility Override Volume] をレベル内にドラッグして、プレイ可能な領域に合わせてスケーリングします。

pvis_overridevolume_addtoscene.png

プラス記号 ([+]) のボタンを使用して、配列のリストに必要な数だけ要素を追加します。 

pvis_overridesettings.png

追加したそれぞれの要素について、スポイトのアイコンまたはドロップダウンを使用してアクタもしくはレベルを追加します。

pvis_overridesettings_selectActor.png

詳細については、「ビジビリティおよびオクルージョン カリングの設定」 ページを参照してください。

関連する統計情報

事前計算されたビジビリティのパフォーマンスを確認する際は、Initviews (初期ビュー) および Memory (メモリ) の統計情報の確認から始めることをお勧めします。 これら 2 つの統計情報パネルには、事前計算されたビジビリティのパフォーマンスと、プロセスでの実行時に使用しているメモリの量が表示されます。

Stat Initviews (ビュー初期化の統計)

「stat initviews」 コマンドを使用して、レベル内での事前計算されたビジビリティの有効性を表示します。

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

統計

説明

Statically Occluded Primitives (静的にオクルードされたプリミティブ)

視錐台カリング後に、事前計算されたビジビリティによって不可視と判断されたプリミティブの数を表示します。 これが表示されるのは、カメラ ビューがビジビリティ セル内にある場合のみです。

Occluded Primitives (オクルードされたプリミティブ)

事前計算されたビジビリティと、動的オクルージョン システムの両方によって不可視と判断されたプリミティブの数を表示します。

圧縮解除オクルージョン

事前計算されたビジビリティの圧縮解除にかかった時間を表示します。 大きなボリュームまたはより小さなセルのサイズにより、使用されるメモリが増加することがあり、その場合は圧縮解除にかかる時間に影響を及ぼします。

統計値が表示されない場合は、カメラがビジビリティ セルの外にあるか、事前計算されたビジビリティがまだ生成されていない可能性があります。

StatInitviews2.png

静的にオクルードされたプリミティブの数が予想より低い場合は、 [World Settings] > [Precomputed Visibility][Visibility Aggressiveness (ビジビリティの積極性)] を確認します。 積極性を高く設定するとより多くのアクタがカリングされますが、角の周辺でアクタがポップアップ表示されるなど、ビジビリティ関連のエラーをより多く発生させる原因ともなります。

Stat Memory (メモリの統計)

「stat memory」 コマンドを使用して、ゲームに割り当てられているメモリの使用量に関する情報、特に事前計算されたビジビリティのメモリ情報を表示します。

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

[Precomputed Visibility Memory] 統計には、事前計算されたビジビリティに現在使用されている、実際の実行時メモリの使用量が表示されます。

StatMemory2.png

Play-in-Editor (PIE) モードでは、エディタと PIE の両方のメモリ使用量が同時にカウントされるため、この統計情報は正確では ありません。 正確な結果を得るには、エディタをゲーム ビュー モードまたはスタンドアローン ゲーム モードで使用してください。

制限事項

事前計算されたビジビリティには次の制限事項が適用されます。

  • 可動アクタは扱いません。

  • 透過マテリアルやマスクされたマテリアルなど、不透明ではないマテリアルは扱いません。

  • セルを配置できるのはサーフェスの上のみです。 飛行モードのプロジェクトではあまり効果はありません。

  • ストリーミング レベルは効率的には扱えません。 すべてのデータはパーシスタント レベルに保存されています。

  • 静的シャドウをキャストするトライアングルのみオクルードします。

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