godot-psxlike — Godot shaders for accurate PSX rendering

Godot 4プロジェクトで単純な低解像度フィルターを超えてPS1特有の画面を作りたいなら、`godot-psxlike`はレンダリング過程における複数の制約をまとめて扱う。このアドオンは、頂点スナッピング、遠近補正なしのテクスチャマッピング、モデル単位のディザリング、フォグとライティングの処理を組み合わせ、現代のGPUによる滑らかな出力をPS1に近い方式へ変える。 · 画面の揺れだけでは不十分な

Godot 4プロジェクトで単純な低解像度フィルターを超えてPS1特有の画面を作りたいなら、godot-psxlikeはレンダリング過程における複数の制約をまとめて扱う。このアドオンは、頂点スナッピング、遠近補正なしのテクスチャマッピング、モデル単位のディザリング、フォグとライティングの処理を組み合わせ、現代のGPUによる滑らかな出力をPS1に近い方式へ変える。

画面の揺れだけでは不十分な理由

頂点スナッピングは、頂点を画面座標のピクセルグリッドに合わせて動かすことで、階段状の揺れを生み出す。そこにaffine texture mappingを加えると、カメラの角度に応じて表面のテクスチャが歪んで見える。低解像度とポストプロセスだけでは作りにくい当時の3Dの動きを表現するには、この二つの効果を組み合わせる必要がある。

奥行きと光もスタイルの一部

アドオンは、三角形ごとに一つの平面深度値を使う深度バッファと、独自のライティングシステムを提供する。これにより、現代的なピクセル単位の深度処理よりも、重なり合う物体で粗く予測しにくい結果が生じる可能性がある。大きな面は近くのジオメトリを隠したり、テクスチャの歪みを目立たせたりするため、必要な領域をより小さな三角形に分割する設計が重要になる。

適用手順と選択肢

リポジトリのaddons/psxlikeフォルダをプロジェクトのaddonsにコピーした後、プラグインを有効化してプロジェクトを再読み込みする。その後、非透明オブジェクトにはpsx_opaque、透明オブジェクトにはpsx_transparentマテリアルを適用し、レンダラーと相互作用するライトはpsx_lightグループに入れる。ディザリングは画面全体へのポスト処理ではなくモデル単位で調整できるため、HUDや特定のオブジェクトの可読性を保つ必要がある場面に向いている。

忠実度の範囲

このアプローチはPS1の表現上の制約をシェーダーで再現するが、オリジナルのハードウェアのすべての動作をそのまま複製するものではない。特に大きなメッシュのテッセレーション密度は、奥行きとテクスチャの歪みの印象に直接影響する。そのため、レトロ効果をプロジェクト全体に一律適用するよりも、カメラからの距離とオブジェクトの大きさに合わせて、メッシュ構成とフォグの強度も併せて調整する方が安定する。

出典: godot-psxlike公式GitHubリポジトリ