アカウント名:
パスワード:
PS3/PSPにNEOGEOアーカイブスができて、過去のNEOGEOソフトを遊べるっていう噂が出てますね本当だとうれしい
Wiiだと既にバーチャルコンソール化 [snkplaymore.co.jp]されていますね。流石にプログラムそのままではないでしょうが、Xbox 360のXbox Live ArcadeでもいくつかNEO GEO用ソフトを見かけますし、PS3の性能だったら完全再現も難しくないんじゃないですかね。
実機はVDPの出力を即表示させてますが、エミュレータはVDPの出力を一旦仮想ディスプレイとして裏のフレームバッファに書いて、その処理が終わってから表示対象のハードウェアにあわせて画像のコンバートをかけているので最低でも1~2フレーム分は遅れて表示されます。
間違いです。
フレーム毎に・実機ではレンダリングしながら表示・エミュレータではレンダリングを終わらせてから表示という違いだけです。ですから実機とエミュレータでディスプレイに表示されるものに差は出ません。(実機が画面上半分のレンダリング中にあったリアルタイムな外部入力を処理し、それを下半分のレンダリングに反映させる場合は除きますが、そのようなゲームは存在しないでしょう)
> 最低でも1~2フレーム分は遅れて表示されます。
遅れとおっしゃいますが、何が何から遅れるのか理解して書いていますか?
> フレーム毎に> ・実機ではレンダリングしながら表示> ・エミュレータではレンダリングを終わらせてから表示> という違いだけです。
「表示」を行ったら、一瞬で画面に反映されると勘違いしてませんか?
テレビやコンピュータディスプレイなどの「ラスタースキャン」方式での画面表示では、「画面上である瞬間に光っているのは「点」一箇所だけ」で、「それを左上から始めて、右方向にいって画面端にきたら次のラインをまた左から右へ」と繰り返します。
たとえば、解像度が320x240で60fpsなら、1つの点が光っているのは約160nsです。これを320回繰り返して、帰線期間を入れて、横1ライン320ドットの表示にかかる時間が160ns×320+α=約64μsになります。さらにこれを縦方向に240回繰り返して、帰線期間を入れると、1画面縦240ラインの表示にかかる時間が64μs×240+β=約17msかかる、といった形で1走査(1画面の表示)になり、また左上に戻ってこれをずっと繰り返します。
ここで、「エミュレータではレンダリングを終わらせてから表示」を行うと、「表示」を指示してから、「画面を光らせ始める」ことになりますから、「実機ではレンダリングしながら表示」に比べると、1走査分遅れることになります。実際には、「表示を指示した、ちょうどピッタリのタイミングで、左上からの走査が始まる」とは限りませんから、タイミングが悪かった場合も考えると、「1~2フレーム遅れる」という元コメントの主張になります。
たとえ、ダブルバッファリングを行わずに、「ライン単位で表示完了したラインから画面表示のフレームバッファに転送する」ようにしたとしても、エミュレータ内部の「画面操作エミュレーションのタイミング」と実際の「画面表示の走査タイミング」が同期しているわけではありませんから、最短なら1ラインの64μ秒の遅れですみますが、最大で1フレームの遅れが発生します(書き換えたラインが運悪く表示直後だった場合、結局1走査待つことになる)ので、それでも「0~1フレーム遅れる」ことになります。
でもって、それをやっちゃうと画面表示のタイミングのズレで「ティアリング」が発生しますから、普通はダブルバッファリングするんじゃないかな。
なるほど。納得しました。そうなると、ラスタスクロールのことなどを考えると、VDPだけでなく、「CPUを含めた全システムの、1フレーム=17ms間の挙動のエミュレーション」を、「帰線期間、およそ0.8ms間に行う」必要がありますね。
実機の20倍超の速度でエミュレーションができるなら、フレーム遅延無しにできるってことで。NEOGEOぐらいなら可能そうですが、今時の「ゲーム機のエミュレーションはこうなっている」と一般論として語れるものなのでしょうか?
#最近の情勢に詳しくないせいか、にわかに信じがたかったり。
あと、
実機が画面上半分のレンダリング中にあったリアルタイムな外部入力を処理し、それを下半分のレンダリングに反映させる場合は除きますが、そのようなゲームは存在しないでしょう
なんかは、結構あるような気がします。ていうか「入力→処理→出力」の1サイクルが画面表示と同期してないようなプログラムだと、当然「反映される」挙動になりますよね。そうならないようにするためには、処理を画面表示と同期させて、スプライトの座標設定をわざわざ帰線期間の間に行う、という一手間が必要。
もっとも、フレーム遅延が問題になるようなシューティングや格ゲーなんかでは速度調整を行なわないなんてことはないでしょうし、非リアルタイム系のRPGだとかシミュレーションだとかでは速度調整してないでしょうけど、そもそもフレーム遅延が問題になることもなさそうですし、実質問題にはならないと思いますけど。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
私はプログラマです。1040 formに私の職業としてそう書いています -- Ken Thompson
PS3でネオジオソフトがプレイ可能? (スコア:3, 興味深い)
PS3/PSPにNEOGEOアーカイブスができて、過去のNEOGEOソフトを遊べるっていう噂が出てますね
本当だとうれしい
Re: (スコア:1, 参考になる)
Wiiだと既にバーチャルコンソール化 [snkplaymore.co.jp]されていますね。
流石にプログラムそのままではないでしょうが、Xbox 360のXbox Live ArcadeでもいくつかNEO GEO用ソフトを見かけますし、PS3の性能だったら完全再現も難しくないんじゃないですかね。
Re: (スコア:0)
Re: (スコア:2)
だからむしろグラフィック的には負荷は低いと思います。
Re: (スコア:0)
Re: (スコア:2)
実機 V-Blank-In
VM 処理開始
VM V-Blank-Out
VM V-Blank-In
描画処理>BLT
VM 処理終了
実機 V-Blank-Out
特に発生する要因は無いと思いますが・・・
Re: (スコア:0)
実機はVDPの出力を即表示させてますが、エミュレータはVDPの出力を一旦仮想ディスプレイ
として裏のフレームバッファに書いて、その処理が終わってから表示対象のハードウェアに
あわせて画像のコンバートをかけているので最低でも1~2フレーム分は遅れて表示されます。
Re: (スコア:2, すばらしい洞察)
間違いです。
フレーム毎に
・実機ではレンダリングしながら表示
・エミュレータではレンダリングを終わらせてから表示
という違いだけです。ですから実機とエミュレータでディスプレイに表示されるものに差は出ません。
(実機が画面上半分のレンダリング中にあったリアルタイムな外部入力を処理し、それを下半分のレンダリングに反映させる場合は除きますが、そのようなゲームは存在しないでしょう)
> 最低でも1~2フレーム分は遅れて表示されます。
遅れとおっしゃいますが、何が何から遅れるのか理解して書いていますか?
Re:PS3でネオジオソフトがプレイ可能? (スコア:1)
> フレーム毎に
> ・実機ではレンダリングしながら表示
> ・エミュレータではレンダリングを終わらせてから表示
> という違いだけです。
「表示」を行ったら、一瞬で画面に反映されると勘違いしてませんか?
テレビやコンピュータディスプレイなどの「ラスタースキャン」方式での画面表示では、
「画面上である瞬間に光っているのは「点」一箇所だけ」で、
「それを左上から始めて、右方向にいって画面端にきたら次のラインをまた左から右へ」と繰り返します。
たとえば、解像度が320x240で60fpsなら、
1つの点が光っているのは約160nsです。
これを320回繰り返して、帰線期間を入れて、横1ライン320ドットの表示にかかる時間が160ns×320+α=約64μsになります。
さらにこれを縦方向に240回繰り返して、帰線期間を入れると、1画面縦240ラインの表示にかかる時間が64μs×240+β=約17msかかる、
といった形で1走査(1画面の表示)になり、また左上に戻ってこれをずっと繰り返します。
ここで、「エミュレータではレンダリングを終わらせてから表示」を行うと、
「表示」を指示してから、「画面を光らせ始める」ことになりますから、
「実機ではレンダリングしながら表示」に比べると、1走査分遅れることになります。
実際には、「表示を指示した、ちょうどピッタリのタイミングで、左上からの走査が始まる」とは限りませんから、
タイミングが悪かった場合も考えると、「1~2フレーム遅れる」という元コメントの主張になります。
たとえ、ダブルバッファリングを行わずに、
「ライン単位で表示完了したラインから画面表示のフレームバッファに転送する」ようにしたとしても、
エミュレータ内部の「画面操作エミュレーションのタイミング」と
実際の「画面表示の走査タイミング」が同期しているわけではありませんから、
最短なら1ラインの64μ秒の遅れですみますが、最大で1フレームの遅れが発生します
(書き換えたラインが運悪く表示直後だった場合、結局1走査待つことになる)
ので、それでも「0~1フレーム遅れる」ことになります。
でもって、それをやっちゃうと画面表示のタイミングのズレで「ティアリング」が発生しますから、
普通はダブルバッファリングするんじゃないかな。
Re:PS3でネオジオソフトがプレイ可能? (スコア:1, 興味深い)
ええとですね、エミュレータはディスプレイの垂直同期信号と同期して動きます。
nフレーム目の出力が終わり垂直帰線期間に入ると、エミュレータは一瞬でターゲットVDPのエミュレーションをし、n+1フレーム目のレンダリング結果をホストのフレームバッファに書き込みます。n+1フレームの表示の開始時にはレンダリングは終了しています。(AZUCO氏の説明とまったく同じです)
> ここで、「エミュレータではレンダリングを終わらせてから表示」を行うと、
>「表示」を指示してから、「画面を光らせ始める」ことになりますから、
エミュレータは表示は指示しません。表示は1/60毎にホストPCのビデオコントローラが勝手に行います。
エミュレータは垂直帰線期間中、つまり画面に何も表示されていない間に、次のフレームの描画の開始に間に合うようにレンダリングするだけです。
>「実機ではレンダリングしながら表示」に比べると、1走査分遅れることになります。
遅れないことは以上の説明でおわかりいただけたと思います。
Re:PS3でネオジオソフトがプレイ可能? (スコア:1)
なるほど。納得しました。
そうなると、ラスタスクロールのことなどを考えると、VDPだけでなく、
「CPUを含めた全システムの、1フレーム=17ms間の挙動のエミュレーション」を、
「帰線期間、およそ0.8ms間に行う」必要がありますね。
実機の20倍超の速度でエミュレーションができるなら、フレーム遅延無しにできるってことで。
NEOGEOぐらいなら可能そうですが、
今時の「ゲーム機のエミュレーションはこうなっている」と一般論として語れるものなのでしょうか?
#最近の情勢に詳しくないせいか、にわかに信じがたかったり。
あと、
なんかは、結構あるような気がします。ていうか「入力→処理→出力」の1サイクルが画面表示と同期してないようなプログラムだと、当然「反映される」挙動になりますよね。そうならないようにするためには、処理を画面表示と同期させて、スプライトの座標設定をわざわざ帰線期間の間に行う、という一手間が必要。
もっとも、フレーム遅延が問題になるようなシューティングや格ゲーなんかでは速度調整を行なわないなんてことはないでしょうし、
非リアルタイム系のRPGだとかシミュレーションだとかでは速度調整してないでしょうけど、そもそもフレーム遅延が問題になることもなさそうですし、
実質問題にはならないと思いますけど。
Re: (スコア:0)
> 「CPUを含めた全システムの、1フレーム=17ms間の挙動のエミュレーション」を、
> 「帰線期間、およそ0.8ms間に行う」必要がありますね
依存関係を満たしさえすればいいので「全システム」というわけではないですが、(実機がフレーム描画の裏で行っている作業はエミュでもそうできます)
リアルタイム制約があってクリティカルな部分なのは確かです。
> 今時の「ゲーム機のエミュレーションはこうなっている」と一般論として語れるものなのでしょうか?
エミュレーションの正確さを重んじているもの