この度ご相談したいと思いましたのはOpenWorldを想定した広さの背景の出力に関してです。
まずこの動画を見て頂きたいと思います。
これは9KM x 9KMを18x18(総数324タイル)のタイルに分けたサンプルで、Biomeも設定済みのものです。
PDGを利用した出力を行っており、unreal_worldcomposition_prepareノードでタイルに分割しております。
それを範囲を小さく絞って出力してBakeを行う様子を撮影しました。
相談したいというのはこのBake時間に関連するものです。
動画を見て頂くとCookOutputに比べてBakeの時間が非常に長く、Bakeの時間の大半はPercistantLevelから出力先レベルへの関連付けの処理に要する時間が大半になります。
例えばLandScape側はFHoudiniEngineBakeUtils::BakeLandscapeObject関数内のLandscapeInfo->MoveComponentsToLevelがほとんどの時間を消費しており、Instance側はAssetRegistryへのRenameがBake内の時間の多くを消費しております。
つまり一旦Percistant Levelに生成してから他のレベルへの出力 という経路が時間がかかるような事態になっております。
現在312タイルすべてを出力できるように18.5.567から追加されたBlueprint、PythoneのAPIで自動処理を組んでみたのですが、24時間以上かかって終わるような状態で現状UE4との組み合わせでの広範囲のマップの管理が難しい状態です。
そのため、相談 というのはCookOutputとBakeをあわせたような機能つまりActorの生成自体をunreal_level_pathアトリビュートへ出力する機能追加、 もしくは他の方法でも短く終わらせるためのTipsはないでしょうか?
広さの参考としては、例えば
・アサシンクリードヴァルハラ 120平方km
・ゴースト・オブ・ツシマ 28平方km
・フォールアウト4 9.84平方km
・レッド・デッド・リデンプション 41平方km
とこのぐらいの広さ相当のゲーム制作をUE4とHoudiniを組み合わせて制作する事を想定すると、上記の部分は是非改善したいと思っています。
一応他の情報としては、大きい広さを作るにあたって現状工夫しているものとしては
1.細かい配置物は、基本的にHISMを使ったクラスタでほどほどの粒度にまとめる事
Clusterノードとアトリビュートのunreal_split_attr,unreal_hierarchical_instancerなどを使用。
2.範囲を絞って出力できるようにした(全域をこの物量のcookOutputするとメモリが数百GB以上かかったため)
3.全域出力のため、18.5.567の機能を使って範囲出力をループして最後まで書き出し続ける機能を作った
これによりメモリ消費を抑えつつ最後まで書き出せるようにしました。
4.タイルを細かくしている根拠はランタイム時のメモリを考慮しての事。つまりマップのStreamingを細かい単位にしたかった。
サンプルシーンは
https://www.sidefx.com/forum/topic/79656/ [www.sidefx.com]
こちらで送ったものと同一になるのですが、別途お渡しした方が良ければ送らせて頂きます。
以上です。こちら相談させて頂く事は可能でしょうか?