OpenGLでPSXのグラフィックスをエミュレートする方法は?


13

OpenGLゲームがPlaystation 1ゲームのように見えるように設定するオプション(またはシェーダー)を知りたい。PSXはテレビを使用し、テレビはそのモニターとは異なる方法でレンダリングするため、おそらく100%達成できないことを知っています。ありがとう。:)


1
Wikiページで便利なハードウェア情報を見つけることができます。
ジョナサンコネル

2
最近、LCDモニターを搭載したPCでSNESゲームのCRT感覚を再現するためにシェーダーを作成した人へのリンクがあったことを思い出します。私は確信しました。altdevblogaday.com/2011/07/18/...
dascandy

回答:


24

私の意見では、OpenGLシーンをPSXシーンのように見せるための最も重要な部分は、フィルタリングがオフになっていることを確認し(PS1に最も近い隣人しかいなかった)、Zバッファリングをオフにして(何もなかった)レンダリングすることですペインターアルゴリズムを使用したシーン。

ライティングは頂点ごとにのみ行われ、実際には、グーロードシェーディングされた頂点カラーリングのみのライティングハードウェアはありませんでした。ライティングはソフトウェア駆動であったため、CPU時間の制限内で何でもできるようになりましたが、「ライティング」のような巧妙な高度なものにはあまり余裕がありませんでした。:)ある時点で何とか鏡面反射を得ることができましたが、頂点ごとにシーンがキラキラしているように見えたため、ドロップしました。法線をブレンドするようにスキニングされたメッシュでスペキュラーを動作させることができず、使用に時間がかかりすぎました。

PS1には少しテクスチャスイムもありましたが、OpenGLでそれをどのように実装するのかわかりませんが、本格的な経験をしている場合は、画面の端に近いときにUVを分解しようとするかもしれません合理的な近似が得られます。

また、頂点変換を確認することをお勧めします。PS1にはフロートがなかったため、固定ポイントパイプラインを使用してレンダリングが行われました。これが、アニメーションを再生するときの不安定な動きの原因です。頂点が存在できる位置は非常に多く、16ビットの固定小数点では、それほど多くの位置ではありませんでした。PS1のYouTube動画をいくつか見て、ゲームにどのように影響したかを理解してください。http://www.youtube.com/watch?v = RSV4IBa1pMIカメラが水平に近いときに直線が揺れることを意味していることがわかります。これをエミュレートする良い方法は、PS1のようにソフトウェアであなたの世界を変換し、エミュレートされた画面サイズに常に整数の画面座標を出力することだと思いますサブピクセルにレンダリングできませんでした)。

編集

テクスチャスイムは、PS1に3D補間がまったくないために発生しました。user712092で述べたように、アフィンレンダラーは画面スペースでしか補間できなかったので、対角線はすべて間違っていました。これはnoperspective、補間修飾子をオンにするか、シーンを手動で変換してエミュレートし、xとyの画面座標をそのz値で除算した後に頂点の最終Z値を破棄することで実装できます。


素晴らしい洞察;)
ジョナサンコネル

@リチャードテクスチャスイム?それは遠近補正の部分的または完全な欠如?たとえば、QuakeはNピクセルごとに遠近補正を行いました。
user712092

@Richardだから、a)頂点シェーダーを使用して16ビット固定小数点をエミュレートする必要があることを意味しますb)glVertex3sがそれを解決するかどうかわからないc)いくつかの固定小数点OpenGLライブラリがある。
user712092

3
ワオ。これをどうやって知っていますか?
ashes999

@ ashes999私は10年以上プロのゲーム開発者です。
リチャードファビアン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.