StaticMeshのランタイムでのメモリを減らしたく、MeshStreamingを検証しています。
設定や挙動について質問します
1. 確認として…
MeshStreaming無効
MinimunLODを条件によって0,1 と切り替える
と設定した場合、LOD0ぶんのランタイムメモリは常に確保される という理解ですが あっているでしょうか
(1つのPKGを 複数の機種、スケーラビリティで切り替えて利用する想定です)
2.MeshStreamingが効いていることを確認する方法はあるでしょうか?
たとえば、NumStreamedLODsを複数段階に変更したMeshを配置してPKGを作成し、
コンソールコマンドで それぞれのMeshのメモリを確認する といった確認ができるとありがたいです。
3.特定の機種・条件によってLOD0のランタイムメモリを確実に確保させない方法はありますか?
たとえば、
MeshStreaming有効
r.Streaming.PoolSizeForMeshes 0
NumStreamedLODsを条件によって0,1で切り替え、
とすれば、条件によってLOD0のランタイムメモリを確保するか切り替え可能 と考えてよいでしょうか。
お世話になっております。
1: MinimumLODですが、こちらはStatic Meshのアセットの設定にあるMinimuLODで良かったでしょうか?memreportにより、MinimumLODをあげたことによりそのメッシュがランタイムで確保するメモリが減ったことを確認いたしました
2: ListStreamingRenderAssets AssetType=StaticMesh のコマンドでどのメッシュがどれだけストリーミングされているかリストすることが可能です。こちらで足りますでしょうか?
LogContentStreaming: CurrentLOD=0 WantedLOD=2 MaxAllowedLOD=0 NumLODs=4 NumForcedLODs=0 LastRenderTime=0.000 BudgetBias=0 Group=Unknown LogContentStreaming: CurrentLOD=0 WantedLOD=0 MaxAllowedLOD=0 NumLODs=4 NumForcedLODs=0 LastRenderTime=0.000 BudgetBias=0 Group=Unknown
3: r.StaticMesh.StripMinLodDataDuringCookingを1にしってアセットのクックを行うことで、そのプラットフォームのパッケージ自身にminimumLODよりも詳細なLODを搭載しないように設定するのは如何でしょうか?
御参考になれば幸いです
お世話になっております。こちらトラッキングのミスにより返答が遅れてしまいました。大変申し訳ございません。
こちらですが、Meshもストリーミング対象になるため、それらをトラッキングするためにはストリーミングプールを確認する必要があるかと思います。Stat StreamingOverviewを使用することで、ストリーミング対象のメッシュの内訳を確認できますのでこちらお試し頂けますでしょうか?
[Image Removed]
また、StripMinLodDataDuringCooking はクック時にパッケージに入れるアセットのLODをそもそも削除してしまう機能のため、今回の様にスケーラビリティでアセットのLODを動的に変更したい場合は不適な設定と思われます。もしもパッケージにてハイポリのLODなども削除してもかまわない場合、こちらの設定をオンにしてクックし、プラットフォーム上での動作を一度ご確認頂けますと幸いです。
この度はご返答が遅れてしまい大変申し訳ございませんでした。
承知しました。また何か問題がございましたら気兼ねなくご質問ください。
回答ありがとうございます! 自分の認識が間違っていたこともあり、少々追加で質問します。
■1について
確かにmemreportの数値は減っていました。自分の確認ミスだったようです。すみません。
■2について
ありがとうございます。ListStreamingRenderAssets コマンドにて有効化されていることを確認できました。
■3について
すみません自分が変な説明をしてしまったので、改めて質問します。
スペックに応じて、利用するLODの最低値を切り替えたいです。そしてメモリが減っている様子を確認したいです。良い設定方法&確認方法はあるでしょうか?
手元で試してみたこと:
MeshStreamingを有効化したうえで、QualityLevelMinLODを設定しました。様子をスクショで貼ります。
ListStreamingRenderAssets での LOD の数値は変わっています。
memreportにて、StaticMeshのResExcKBの数値は変わりませんでした。
(そもそも、MeshStreamingのメモリ削減効果はmemreportで確認できるものなのか あまりよくわかっていません…)
(またr.StaticMesh.StripMinLodDataDuringCooking も試してみましたが、結果は↑と同じくResExcKBは変わりませんでした。スペックによる切り替えを行いたいので 今回の設定では正しい動作のようには思います。)
[Image Removed]
よろしくお願いします。
ありがとうございます!
Stat StreamingOverview の情報でMeshのメモリ削減量を確認できました。
スペック毎のLOD切り替えについては、標準機能では明示的にレベルを指定することが難しそうでした…
チーム内で相談してみます。