お世話になっております。
私たちのプロジェクトは、フォリッジの風揺れやインタラクションに PivotPainter 2 のアニメーション機能を利用しています。
ただし、大量に配置されたフォリッジのWPO計算がボトルネックとなっているため、姿勢計算に必要な処理をインスタンスごとに Compute Shader で実行するパスを追加しようとしています。
これには、GDC2024 で講演された Technical Artist Summit: GPU-Based Foliage-Interaction for ‘Ark: Survival Ascended’ を参考にしています。
これを前提として、これから記述するフォリッジインスタンスごとの姿勢計算パスの大まかな実装方針は下記のようになります。
Unreal Engine の方針に沿って推奨されるものか、確認させて頂きたいです。
また、他に最適な方法があれば、ご教示いただきたいです。
■ シェーダクラスの作成
インスタンスごとの姿勢計算結果をバッファに書き込むシェーダについて、FGlobalShader を継承したシェーダクラスを作成します。
必要に応じて、インスタンスカリングのシェーダクラスも追加します。
また、これらに対応した Compute Shader を追加します。
■ レンダリングパスの追加
パスの追加には、SceneViewExtension と RDG を利用します。
USceneViewExtension を継承したクラスを定義し、BasePass より前のタイミングでインスタンスごとの姿勢をバッファに書き込むパスを追加します。
■ Material Expression Custom Output の追加
Material Editor に記述された Pivot Painter 2 による計算結果をバッファに書き込む Material Expression を追加します。これは UMaterialExpressionCustomOutput を継承します。
入力ピンには、PivotPainter2FoliageShader の姿勢計算結果にあたるノードをつなぎます。
■ Material Expression の追加
PivotPainter2FoliageShader の Output World Position Offset ノードに計算結果を出力するため、バッファを読み込む Material Expression を追加します。
出力ピンの解釈を追加するため、FHLSLMaterialTranslator にコンパイル時の処理内容を追加します。
以上になります。よろしくお願いいたします。