お世話になっております。
現在、HISM等を使用して草木を大量に配置し、一部のカメラに近い草木のみ揺れ表現を加えたいため、最もポリゴン数が多いLODにのみWPOの変更処理が適用されるようにマテリアルを設定したいと考えています。
そのため、このように設定したところ、予想以上に処理負荷が増大してしまい、こちら確認したところ、WPOを適用した草木のメッシュがいかなるLODの段階であってもRenderVelocityに入力され、負荷につながっていることを確認しました。
<br/>
このため、同一メッシュでも、LODによってWPOを適用しないのであればRenderVelocityにメッシュが入力しないようにしたいのですが、そのようなことは可能でしょうか。
お手数をおかけいたしますが、ご回答宜しくお願い致します。
再現手順
・いくつかの段階のLODを持つ任意のスタティックメッシュとWPOが変更される可能性のあるマテリアルを用意する
・そのスタティックメッシュのLOD0にのみWPOが変更されるマテリアルを適用して、それ以外のLODにはWPOが変更されないマテリアルを設定し、適当なレベルに配置する。
・ShowFlag.VisualizeMotionVectors 1 等で、VelocityMapを確認するとLODがいかなる段階であっても、メッシュがRenderVelocityを描画する。
お世話になっております。
描画されるメッシュが WPO を含むかどうかの判定においては全ての LOD を参照するようになっておりますので、いずれかの LOD が WPO を含むマテリアルを使用しているメッシュは WPO を含むものとして扱われ Velocity がレンダリングされます。
また、この部分の判定を変更するようなオプションも無さそうです。
このことについては以下のソースコードが参考になるかと思います。
PrimitiveSceneProxy.cpp
FPrimitiveSceneProxy::FPrimitiveSceneProxy 関数内(650行目付近)
StaticMesh.cpp
UStaticMesh::GetUsedMaterials 関数
よろしくお願いいたします。
ご回答ありがとうございます
当該の現象を抑制するオプションがないとのこと、承知いたしました。
ソースコードの共有についてもありがとうございます、こちら確認し改善できるか検討させていただきます。
HLODをいくつかの区画に分けて、WPOが不要な部分はマテリアルを差し替えることで、処理負荷の改善が確認できておりますので、一旦はこちらで対応しようかと思います。
ご対応ありがとうございました。