<手順>
- 2種類のStaticMeshアセットを使用したPacked Level Actorを作成し、そのうち一つのISMコンポーネントについてExclude from HLOD Levels=HLOD1~HLOD7を有効にします(HLOD0から指定してもこのパラメータは結果に反映されませんでした。)
- File>New Level > OpenWorldを作成し、作成したPackedLevelActorを配置します。WorldSettingsでHLOD0からHLOD1に切り替わるようなHLOD設定を行います。添付の検証プロジェクトではHLOD0をInstancingとしてHLOD1のApproximateをParentにしています。
- この設定でHLOD Buildを実行しました。Exclude from HLOD Levels=HLOD1~HLOD7としたISMコンポーネントが生成されたHLODメッシュに反映されており、期待した動作と異なっています。
詳細については添付PDFおよび検証用プロジェクトを確認ください。設定方法に問題がある場合、ベストプラクティスをご教授いただきたく思います。バグ等により動作していなかった場合、修正の見込み等をご確認いただきたく思います。
再現手順
<検証環境>
UE5.6.1、Blankプロジェクトを使用。プラグイン等の導入無し。
<テストレベル>
添付プロジェクト内の下記マップをご確認ください。
/Game/Map/TestMap
再現プロジェクトのご用意ありがとうございます。
Exclude from HLOD LevelsはUE4時代の「ワールドパーティションではないレベル」で利用可能なHLOD用パラメータです。
アクターをワールドパーティションレベルに設置したあとの詳細パネルを確認すると Exclude from HLOD Levels が表示されないことに気付くと思います。これはこのパラメータがワールドパーティション用のHLODビルダーであるWorldPartitionHLODBuilderでは考慮されないためです。
またこのパラメータに関する動作の修正は予定されておりません。
特定のHLODLayerでコンポーネント単位の影響の有無を切り替えたい場合にはアクターのHLODLayerパラメータで任意のHLODLayerを割り当てることになります。しかしアクター単位でしか設定されないため、一つのPLAに複数のHLODLayer設定を適用したい場合には対応できません。
この構成に対応するにはUE5.6で利用できるRuntimeCellTransformerを活用することができると思います。
独自のRuntimeCellTransformerを作成して特定のコンポーネントを取り出してアクターにまとめて、それにHLODLayerに振り分けたりすることを検討できると思います。(UWorldPartitionRuntimeCellTransformerISMの実装が参考になるはずです)
なお既にご検討済みかもしれませんが、UWorldPartitionRuntimeCellTransformerISMやFastGeoStreamingのトランスフォーマーもあるため、最適化目的でPLAを利用することのメリットはかなり薄くなっております。
失礼しましたRuntimeCellTransformerはPIE開始時及びクック時に呼び出されますが、HLODのビルド前には呼び出されないようです。
HLODLayerの自動割り当てに使えるような機能が無いか確認中ですので少々お待ちください。
他の手法として検討できるものとしてActorDescMutatorsがあります。この機能はHLOD生成時にも動作しますがアクター単位でのRuntimeGrid割り当てという形になってしまうので今回のようにPLAにまとめてしまうと操作できません。
開発チームとも相談しましたが、HLODビルド用に特定のコンポーネントをアクターから分離しHLODLayerまたはRuntimeGridを割り当てるような機能を実装する方法は提供されておりません。
予め分割単位でアクターを配置し適切なHLODLayerまたはRuntimeGrid割り当て(ActorDescMutatorsによるHLODLayer割り当てはUE5.8で追加予定です)を行うのが適切なソリューションとなります。
また前提として2段階目のHLODLayerは前レベルのHLODLayerのメッシュから生成されるため原理的に特定のメッシュだけを取り除くことはできません。やはりこの意味でもHLODLayerでの分割が必要です。
ご回答ありがとうございます。
RuntimeCellTransformerに関して、追加で確認させていただきたく思います。
RuntimeCellTransformerはPIEに入る際に実行される処理と認識しておりますが、HLOD Build(つまりエディタで完結する処理)の直前に実行しアクターおよびPLAを変換したISMコンポーネントのプロパティ設定する、という用途でも使用可能なのでしょうか?
以上、よろしくお願いいたします。
承知いたしました。引き続きよろしくお願いいたします。
ご回答ありがとうございました!
頂いた情報などを元に、今後の対応を検討したいと思います。
本件についてはクローズしていただいて大丈夫です。