#memo

indiedev太郎

HLOD (Hierarchical Level of Detail)について

UE4 4.16.1
SimplygonSDK 8.2.228.2800


HLODの概要

通常のLODはアセット一つの中で頂点数を減らすという処理に対して、HLODは遠景の複数のアセットをまとめ、DrawCallを下げるといった処理をやっている
UE4でこの機能を設定するためには、Clusterの生成(指定) -> ProxyMeshの生成の2プロセス(HLODのビルド)を行う

有効化・準備

  1. 適当なマップを開き、World Settings > LODSystem > Enable Hierarchial LODSystemをチェック
  2. Window -> Hierarchical LOD Outlinerより、設定windowを表示

HLOD設定、Cluster設定

Hierarchical LOD Outliner内下部、LODSystemより、Hierarchical LODSetupの数を適当に増やす
この設定は、WourldSettings下部のものと同期している

https://i.gyazo.com/948418b208ce3843470a87a48a7b3b0f.png

Hierarchical LODSetup内には、Cluster generation settings, Mesh generation settingsの二つが内包されていて、生成時のlevelに応じて自動で設定されている

Cluster generation settings
Desired Bound Radius 自動クラスタリング時、このサイズに複数メッシュが含まれている場合同一クラスタとなる
Desired Filling Percentage 自動クラスタリング時のフィルファクタ、フィルファクタとは
Min Number Of Actors to Build クラスタのビルド時、内包するアクタの必要最小数
Mesh generation settings
Simplify Mesh これをEnableにすることで、HLOD生成をSimplygonに渡し、MeshReductionも行うようにする、後述


Cluster自動生成

Clusterの設定が終わったら、Hierarchical LOD Outliner左上のGenerateClustersより、自動クラスタリングを行う
生成されたクラスタは、Hierarchical LOD OutlinerにLOD毎に一覧表示されている

https://i.gyazo.com/0629722abf753bb21f73ceb2d1542748.png

Hierarchical LOD Outlinerでクラスタを選択すると、Viewport内に選択されたクラスタが表示される

Cluster手動設定

Hierarchical LOD Outlinerで、クラスタ内に含まれるアセットを手動で移動することが出来る、自動生成後に、必要であれば手動でクラスタ構成を編集する
また、クラスタクラスタを含むことが出来、高いHLODでは、低いHLODに有るクラスタを内包することができる
World Outilinerから直接アセットをドラッグアンドドロップすることで、完全に任意なクラスタの定義を行うことも可能

https://i.gyazo.com/f7831fbb11eb2d5c99fbac4debef1494.png
Hierarchical LODVolumeというVolumeをレベル内に配置し、自動クラスタリング時のクラスタのガイドとすることが出来る

https://i.gyazo.com/b49d4e9896804caea6d1bd024046c029.png
自動クラスタリング時に、このVolumeを尊重しクラスタリングを行う


ProxyMeshの生成

Clusterの設定が済んでいる状態で、Hierarchical LOD Outliner上部 Generate Proxy Meshesをクリックすることで、ProxyMeshが生成される

https://i.gyazo.com/8e2de0a2d3d12faecf39fcd0cfeb04dc.png

Levelのmapファイルが保存されているディレクトリ内にHLODというディレクトリが新たに作られ、その内部に生成されたProxyMeshやテクスチャ類が保存されている
クラスタ毎に作成されたProxyMeshはHierarchical LOD Outlinerでクラスタをクリックすることでそれぞれ確認することが可能


SimplygonによるProxyMesh生成

Hierarchical LODSetupの Mesh generation settings -> Simplify Mesh がEnableであれば、ProxyMeshの生成をUE4ではなくSimplygonで行うようになる
SimplygonGridと通信するために、エディタ設定を行う必要がある

https://i.gyazo.com/13302c0579f68fb09a09ea6281fcf622.png

EditorPreferences > General > Miscellaneous > Simplygon Swarm にて、Use Simplygon distributed proxy serverにチェック
次に、SimplygonSwarmを起動する、Windowsのスタートメニューより、Simplygon Grid > Simplygon Processing Agentを起動

ここでGenerate Proxy Meshesを行うと、Simplygonで非同期のProxyMesh生成タスクが開始される、
しばらく待っているとHierarchical LOD Outliner内のクラスタが逐次更新され、Simplygonにより生成されたProxyMeshが確認できるようになる


ProxyMeshの確認

Hierarchical LOD Outliner上部にあるForced viewing levelスライダを動かすことで、指定したHLODを表示することが出来る、NoneではAuto
また、StaticMeshなどのLODとは異なり、オリジナルアセット -> HLOD0 -> HLOD1 ... の順に変化していく

https://i.gyazo.com/2eb32b67ca689d6fd8c8fb207f0186f8.png

Viewport内でViewModeをHierarchicalLodsにすることで、色によってHLODレベルを確認することも可能