
デイ・オブ・パーガトリー
生存者は一人、ゾンビは多すぎるほど。大群、とんでもない量のエフェクト、豊富なバリエーションとカスタマイズを詰め込んだサバイバー系ゲームです。GPUが途中で音を上げないようにするのも大事なテーマ。

大群、どんと来い
独自のECS風シミュレーション、バッチ描画、軽量な衝突判定、プールしたGPUエフェクトで、この混沌をさばいています。

一枚のクアッドで、五桁
ダメージ数値をインスタンス化したクアッドに集約。MSDFグリフとGPU上のアニメーションで、一桁ごとのメッシュを不要にしました。

どこまでも続く地形
ベイクしたプロシージャルテクスチャ、確率的タイリング、高さベースのバイオームブレンドを使った地形チャンクのストリーミング。
もっと詳しく
大規模な敵シミュレーション
キャッシュ効率を意識したデータ構造、軽量な物理・衝突判定、MultiMeshによる描画を、独自のECS風アーキテクチャでまとめています。ゾンビ一体ごとに重いノードの集合を作らずに、大群を扱うための仕組みです。エフェクトの多くはプールしたGPUパーティクルで処理するので、爆発や血しぶき、ソウル回収の演出が重なっても、オブジェクトの生成と破棄を繰り返さずに済みます。
GPU描画と最適化
エフェクト作りでは、見栄えと同じくらい「処理を減らすこと」も意識しています。ジオメトリのバッチ化、オーバードローの削減、不透明・透明マテリアルの使い分けに加え、余白の多いテクスチャで無駄なピクセルを描かないよう、頂点を調整することも。選択的なグロー、軽量な疑似シャドウ、いろいろなシェーダーの工夫で、パフォーマンスを犠牲にせず画面をにぎやかにしています。
独自のMSDFダメージ表示
ダメージ数値にまで、専用レンダラーを作りました。数字一桁ごとにジオメトリを用意する代わりに、一つのダメージ表示を一枚のインスタンス化したクアッドに詰め込んでいます。文字ID、色、方向、タイミング、スケール、エフェクトのパラメーターを、四つのfloatに格納。シェーダーがそれを展開してMSDFグリフを参照し、クアッドの形を調整しながら、ポップ、揺れ、浮遊、点滅まで処理します。すべてGPU上で。
プロシージャル地形のベイク
地面をきれいに見せたかっただけなのに、気づけば地形のプロシージャルベイクシステムになっていました。確率的タイリングでテクスチャの繰り返しを目立たなくし、高さベースのブレンドで複数のバイオーム素材を自然につないでいます。ただ、テクスチャのサンプリングやブレンドを重ねると処理は重くなります。そこで毎フレーム計算する代わりに、チャンクのテクスチャへベイク。複雑な処理はチャンク生成時に済ませ、その後は軽い結果を使えるようにしています。
フレーム予算に合わせた地形ストリーミング
もちろん、地形のベイク自体にも処理時間はかかります。カメラの表示範囲に合わせてプールからチャンクを取得し、新しいベイク処理は設定可能なキューで複数フレームに分散。カメラがワールドを移動しても、地形生成が一度に全部の仕事を抱え込まないようにしています。
キャラクターの着せ替えと強化
キャラクターは、差し替え可能な装備スプライト、色、アニメーションデータを組み合わせて構成しています。頭、服、武器、アクセサリーを自由に組み替えても、服装の組み合わせごとに別のアニメーション一式を用意する必要はありません。ダメージ、移動速度、弾数、攻撃挙動などを変える、ステータスベースの強化システムもあります。着せ替えUIはまだ形になっていませんが、土台のシステムはできています。
2.5D描画と深度ソート
見た目は2Dですが、裏側は実は3Dです。ゾンビ、プレイヤー、死体を深度で並べつつ、独自の座標調整やシェーダーの工夫で、重なり方を整えています。ゾンビは倒れると死体を残しますが、これも独自の深度制御を加えたMultiMeshで描画。何十万体分が積み重なっても、シーンツリーが埋まらないようにしています。異なるレイヤーの間でライティングをそろえるには少し追加の計算が必要でしたが、そのおかげで銃口の光などがシーン全体を自然に照らせます。
































