課題:血まみれのフロア
Let Them Come: Onslaught’s の VFX における課題は、画面上に常時表示される敵の数と、一度に何体キルできるかという点でした。ゲームのプロトタイプを作成した当初は、敵がバースト ゲームプレイ キューをトリガーし、地面に残された血痕デカールと、プレイヤーへのフィードバックとして飛び散る血をスポーンさせていました。特に武器をアップグレードすると、一度に多数の敵が倒される可能性があることがすぐにわかりました。そのため、カオスを極めたアクションを実現しながら、数がボトルネックにならないように、これらを最適化する必要がありました。
血痕デカールについては、当初は、殺戮の痕跡を残し、プレイヤーが辿った道筋 (そしてプレイヤーが去った後に残されたもの) を示すブレッドクラムの軌跡として配置されました。問題は、これらのデカールが大量にスポーンされることでした。効果を発揮させるためには長時間残しておきたかったのです。つまり、大量のデカールがすぐに積み重なってしまうということでした。また、デカールの重なりの問題にも対処する必要がありました。近距離の多くの敵を倒すと、デカールが互いに重なり合い、頻繁にパフォーマンスの問題が発生していたのです。
フロアに大量の血痕 (そして酸!) のマーカーを生成するために、Niagara を使用して、ワールド空間領域の配列をレンダー ターゲットにレンダリングするシステムを作成しました。この配列は 256 個のエントリの固定長で、ループ処理されます。つまり、256 個のエントリを使い切ると、1 番目のエントリが 257 番目のエントリに更新され、以降も同様の処理が継続されます。この個数はちょうど良い設定だと感じました。その後エントリを再利用するまでに、地面をかなり血みどろの状態にできるからです。
現在は、敵が倒されると、デカールをスポーンするのではなく、敵自身のデータ (位置、半径、マテリアル タイプ) を、ワールド内に永続的に存在する「Splat Manager」ブループリント アクタに送信しています。
このマネージャーはデータをグローバル Niagara システムに送信し、システムは Grid2D データ インターフェースを使用して、HLSL (ハイレベル シェーディング ランゲージ) でこれらの領域をグローバル レンダー ターゲット マスクに書き込みます。このシステムは大部分が、Terrible Posture Games のテクニカル ディレクター、Chris Zuko 氏の作業に基づいて構築されています。レンダー ターゲットには、それぞれの血だまりまでの距離を入力します。距離範囲は、入射半径によって定義されます。これらの距離はすべて組み合わせられ、1 つの一貫したマスクが作成されます。
このマスクは、複数のレイヤー (血のレイヤー 1 つと、酸のレイヤー 1 つを含む) で構成されており、環境サーフェス シェーダーでサンプリングすることで、必要な場所に血だまりのレイヤーを適用できます。
このマネージャーは、現在レンダリングされている領域のワールド空間における原点の位置と、その領域のワールド空間単位サイズを追跡します。これらの変数は、Material & Niagara Parameter コレクション内で更新され、コンテンツに公開されます。
血だまりのマスクは、ワールド内の必要な位置に座標を自動的にマッピングする複数のマテリアル関数として公開されました。アーティストは、座標の再作成について気にかけることなく、0.0 ~ 1.0 のウェイト値だけでサーフェス エフェクトを操作することができました。ほとんどのサーフェスでは、入力された距離マップを基にワールド空間のノイズ サンプルをいくつか実行し、形状を歪ませて環境に自然に溶け込むようにしています。
最終的に歪んだマスクは、サーフェス シェーダー内のマテリアル属性をブレンドするために使用され、血みどろで残酷なビジュアルを実現します。
飛び散る血の FX
最適化におけるもう 1 つの重要な焦点は、特に敵の死の際に生成されるパーティクル システムの量を削減することでした。デカールの量の問題と同様に、画面上の死亡時の爆発の量も問題でした。この場合、オーバードローの問題というよりは、スポーンされ、管理される Niagara システムの数が問題でした。
プロジェクト中に Unreal Engine 5.3 にアップグレードしましたが、その主な目的は、Niagara データ チャンネルを利用することでした。VFX とゲームプレイ キューを少しリファクタリングすることで、すべての飛び散る血イベントをデータ チャンネル経由で単一の Niagara システムに送信できるようになりました。その結果、毎回新しい Niagara システムをスポーンするのではなく、正しい場所で飛び散る血を再生できるようになりました。これは血溜まりの場合と非常によく似た仕組みです。敵が死亡すると、イベントの場所やサイズ/強度など、自身の情報がワールド内の管理システムに送信され、その情報が Niagara データ チャンネルに送信されます。
死亡時の FX の「流血なし」バージョンを実装する段階になったとき、このアプローチによって処理がシンプルになりました。流血なしバージョンのエフェクトは流血バージョンと並行して実装され、ゲーム オプションに応じて切り替えられました。
死亡エフェクト用の Niagara データ チャンネル パスでは、特定のエンティティ向けにカスタムの死亡エフェクトを実装したかったため、すべての死亡エフェクトを 100% カバーしているわけではありません。このパスは死亡エフェクトの約 80 ~ 90% をカバーしながら、必要に応じて拡張してカスタマイズすることもできます。
その結果、プレイヤーは生き残るために戦い抜いた惨状を目にすることができ、戦場はパフォーマンスに影響を与えることなく、プレイヤーの勝利を記憶に留めることができます。Let The Come: Onslaught のリリースされた今、ぜひご自身でこれらの効果を実際に体験していただければ幸いです。