【UE5】HLODを掘り下げてみよう

【UE5】HLODを掘り下げてみよう

以前紹介した記事だが覚えているだろうか?

この中でHLODレイヤーについて話をしたが、デフォルト設定のまま使用(ビルドも含め)することはあまり好ましくないと思うので、もうすこし掘り下げて説明します。

とはいうものの、全然情報がない!

一つ言えるのは公式ドキュメントはWorldPartitionシステムに準拠していない!
そのため、参考にならない!と断言できます!

というか、WorldPartitionシステムでHLODの設定はHLODレイヤーで行うように変更されたようだ

これは、難儀なことになりそうだ・・・。

■HLODレイヤーについて

この中のレイヤータイプ、これが今回の説明になりそうだ。

このレイヤータイプには

この五つが用意されている。

  • Instanced
    セル内のメッシュをまとめてインスタンススタティックメッシュ(InstancedStaticMesh:ISM)にする
    効果:表示メッシュのみになり、複数のISMで構成される。末端のLODで表示されます。

       所感:デフォだな
  • Merged Mesh
    一つのスタティックメッシュにまとめる
    効果:1コンポーネントになり合成マテリアルになる

       所感:アクタをマージと変わらないような・・・、頂点数に依存してしまう。
  • Simplified Mesh
    一つのスタティックメッシュにまとめ、さらにリダクションもしてくれる!
    効果:頂点数の削減

       所感:こちらもアクタをマージ1と変わらないようだが、使える気もする
  • Approximated Mesh
    ボクセル化して近似メッシュを作成してくれる
    効果:近似化

       所感:CitySampleはこちらを使用しているようだ

※どうもアクタをマージと酷似している内容に思える。
 HLODは未完成なのかもしれない・・・。

  • Cell Size
    ストリーミングの設定と同じ
  • Loading Range
    同じくストリーミングの設定と同じ

■アクタにも設定が必要

  • Include Component in HLOD
    HLODにコンポーネントを含めるかどうかのチェック
  • Include Actor in HLOD
    HLODにアクタを含めるかどうかのチェック
  • HLOD Layer
    HLODレイヤーを指定できます。
  • HLOD Batching Policy
    強制的にメッシュセクションでバッチを行うのか?
    もしくはInstancingでバッチを行うのか?を選択
  • Exclude from HLOD Levels
    特定のレベルのHLODから除外するかどうか指定できる

■まとめ

HLODのセルやロード範囲の設定はWorldPartitionに一蓮托生に思える。
(※WorldPartitionを使用しなければそんなことも言うことはないが)


そのため、別段設定というものは不要にも思えるが、大量のアクタが存在する場合は注意して設定した方がよいだろう。
グリッドサイズ25600→12800にするなど決めてた方がよさそうだ。

一つのセルの中に大量にある場合の方がビルド時間は少なくなる。ただしHLOD生成時に大量のメモリを使用するため、ビルド時間が多くかかってしまう。そのためギリギリまで配置を変更するなどの調整は行わない方がよさそうだ。

すべては計画を立てて行う必要がありそうだ!

それにしても、公式も内容が曖昧、世に出ている動画や記事も中途半端となっているのが難儀だ・・。
ここで出たまとめも中途半端なため、検証をしっかりと行った方がよさそうである。
またその時は記事を更新しますので、また一読のほどよろしくお願いします!

ちなみに、

公式:https://dev.epicgames.com/documentation/ja-jp/unreal-engine/hierarchical-level-of-detail-outliner-in-unreal-engine

↑↑こちらで紹介している「階層LODアウトライナー」だが、WorldPartitionを使用したレベルデータでは使用できないので注意してほしい。

■詳細

  1. マージアクタについての記事を過去に作成しているので一読してみるとよいかも ↩︎

コメントは受け付けていません。