チケット #30666

フルスクリーン時描画遅延が発生する

登録: 2013-02-02 14:37 最終更新: 2015-12-24 00:26

報告者:
担当者:
チケットの種類:
状況:
完了
コンポーネント:
マイルストーン:
優先度:
5 - 中
重要度:
5 - 中
解決法:
修正済み
ファイル:
なし
投票
点数: 0
No votes
0.0% (0/0)
0.0% (0/0)

詳細

Win7で、NVIDIAのドライバを使用していると、フルスクリーン時大体3フレーム遅延している模様。

ウィンドウ状態の時は問題ない。

#28914の109~111番目のコメントより、チケットを株分けした。

チケットの履歴 (15 件中 3 件表示)

2013-02-02 14:37 更新者: yyagi
  • 新しいチケット "フルスクリーン時描画遅延が発生する" が作成されました
2013-02-02 15:45 更新者: yyagi
コメント

rev512で対応。 いわゆるフルスクリーンモード(解像度をVGAにすることによるもの)にするのではなく、 ウインドウ最大化かつBorderStyle=Noneで対応するようにしてみた。

2013-02-03 11:09 更新者: sf298yen
コメント

チケット切っていただきありがとうございます。

yyagi.com/DTXManiaGR_095_WASAPI_20130202.zip ⇒

フルスクリーンにしてもVSyncWait.Onで60fpsでも描画遅延を感じなくなりました(WASAPI/ASIO)(感激。
他のグラボやオンボではどうなるのかの情報も欲しいですね。私は持ってませんが(悩


'暫定対応かと思いますが、一応記述します。

VSyncWait.Onだとカクツキます。大体45-60fpsと不安定でした。
ワイドスクリーンだと横長になるので、アスペクト比維持するか否か選択できると嬉しいです。
(動画での人物がふくよかになるので一部の方には切実な問題かも?逆に喜ぶ人もいる?(謎)


DTXManiaのHD化まだかなー(期


'横道

Windowモードでは起動するごとに位置がズレるので、位置を記録して毎回同じ位置に表示できるようにすることは可能でしょうか?
2013-02-04 02:22 更新者: yyagi
コメント

カクツキは、単純に640x480以外のサイズの時全てで発生しているようです。

DirectX的には、BackBufferからFrontBufferへの転送時のスケーリング負荷が大きいと言うことなのでしょう。 これを改善するにはBackBufferのサイズをウインドウサイズに合わせろということなのでしょうけれども、 描画関連を全部見直さないといけなくてヤバいです。

というわけで、申し訳ないのですが、一旦旧方式の解像度切り替えフルスクリーン方式に戻しました。 (ウインドウのスケーリング方式を使う場合は、ウインドウ右上の最大化ボタンを押していただければほぼ近いものになります)

将来的には(HD化の時にでも)BackBufferの作り方を見直すことになると思いますが、解像度切り替え方式での描画遅延改善方法がないか、もう少し考えてみます。最初は tp://www2.tky.3web.ne.jp/~yosshin/prog_memo/latency/091029.html の「Lock Unlock Flip のタイミング」の内容そのものかなと思ったのですが、今の設計は結果的にこれの対策通りになっています。(ゲーム進行と画面描画が一体化している。)

HD化の予定については、viviさんに聞いて下さい(ぉ

横道については、必要に応じてチケット発行をお願いします。(理由を添えることをお忘れ無く。でないとコレジャナイものができる可能性があります)

2013-02-04 09:23 更新者: sf298yen
コメント

カクツキは、単純に640x480以外のサイズの時全てで発生しているようです。 …略… 将来的には(HD化の時にでも)BackBufferの作り方を見直すことになると思います

了解しました。首をのばしてます。
個人的にはWindowモードでも問題はないのでこのまま行きます。
⇒Win7+FullScreen+VSync.Onでの動作は今後極力避けることになると思います。

というわけで!
vivi様~!HD化待ってま~~す!

2013-02-20 00:00 更新者: yyagi
コメント

カクツキは、どうもウインドウがタスクバーに少しでも重なると発生するようです。(なので、ただのウインドウ最大化だと、処理落ちしない。)

sf298yenさんのところでも同じ状況でしょうか?

なお、試しに

tp://social.msdn.microsoft.com/Forums/ja/vbgeneralja/thread/c00c30af-b266-425e-a193-8eb1a88ad647

このあたりをみて、タスクバー(とスタートボタン)を消しつつフルスクリーンという荒技を試してみましたが、処理落ちの改善はできませんでした。やり方か何か違うみたいですね。

2013-02-20 07:52 更新者: sf298yen
コメント

カクツキは、どうもウインドウがタスクバーに少しでも重なると発生するようです。(なので、ただのウインドウ最大化だと、処理落ちしない。) sf298yenさんのところでも同じ状況でしょうか?

(Windows 7 / VSyncWait=ONで)

そうですね、おそらく同じ状況だと思います。

解像度が小さいとタスクバーにかかっていても普通に60fps出るため大丈夫なのですが、

ある程度大きくしている場合、Windowが見切れる場合カクツキます(だいたい45-58と60fps出ていません)。

タスクマネージャでexplorer.exeプロセスを切ってタスクバーを非表示にしたこともありますが同じでした。

補足:XPでは見切れていても60fpsのままでカクツキは今のところ出ていません。

2013-04-05 01:48 更新者: yyagi
コメント

Win7の場合、個人設定で、「ウインドウの色」にて「透明感を有効にする」のチェックを外すと、タスクバーに重なっても極端な性能劣化がないようです。

097ベースでフルスクリーン(ウインドウ最大化)するようにしたサンプルを作りましたので、透明感を外してお試し下さい。

tp://yyagi.com/DTXManiaGR_097_30666.zip

なお、VGAフルスクリーンに比べると性能は落ちています。従来通りの性能を維持するには、以前書いたようにBackBufferの作り方の変更等、描画ロジックを全面的に改める必要があります。

2013-04-06 23:01 更新者: sf298yen
コメント

Aeroでは常に3フレーム遅延するということですので、私はAeroテーマは使用していません。

「透明感を有効にする」はAeroテーマに付随するプロパティだと思うのですが、Aeroテーマを選択した上でのテスト、ということでいいのでしょうか?

2013-04-09 00:56 更新者: yyagi
コメント

Aeroを無効化なさっているのであれば、テスト不要です。ありがとうございました。

2013-06-08 01:34 更新者: yyagi
コメント

ここまでのまとめ

問題点: Win7で、NVIDIAのドライバを使用していると、フルスクリーン時大体3フレーム遅延している模様。

対策1: 解像度変更タイプのまま解決を図るなら、Direct3D9Exを使い、SetMaximumFrameLatencyを使うことで、1フレーム遅延にまでは追い込める。しかし0フレーム遅延にまでは持ち込めない。

→ 最初から1フレーム先の画面を計算して描画するようにするのが一番無難な対策のような気がしてきました。 更に、何フレーム先の画面を描画するようにするのかをCONFIGURATIONで設定できるようにすればよいかな。

対策2: 解像度は変更せず、画面をスケーリングして表示するやり方であれば、この問題は発生しない。しかし、タスクバーに描画領域が重なると、カクツキが発生する。

→ 最低限、BackBufferのサイズをウインドウサイズと一致させ、Flip時にスケーリングが発生しないようにする必要有り。また、Aeroをオフにして半透明描画を止めることで問題解決する場合もある。

2013-06-23 01:25 更新者: yyagi
コメント

最初から1フレーム先の画面を計算して描画するよりは、画面に表示している判定ラインの表示位置を上下に調整できたほうがいいですかね。

画面を目押しするタイプの方にとっては。

・・・アジャスト関係が3つに増えて分かりにくくなりますが、すべて原因と対策が違う以上、仕方ないですね。

  • BGMの再生位置アジャスト
    サウンドの出力遅延への対策。
  • 入力判定のタイミングアジャスト
    入力遅延への対策。(といっても、キーボードとジョイパッドと電子ドラムで、個別にアジャストできるようにはしていませんが・・・)
  • 判定ラインの表示位置アジャスト [NEW!]
    画面表示遅延への対策。
2013-06-23 03:05 更新者: yyagi
コメント

判定ラインの表示位置を調整する機能について、#31602 に株分けしました。

2015-12-21 22:38 更新者: yyagi
  • 解決法なし から 修正済み に更新されました
コメント

対策2: 解像度は変更せず、画面をスケーリングして表示するやり方であれば、この問題は発生しない。しかし、タスクバーに描画領域が重なると、カクツキが発生する。

この対応をRel100より取り込んでいるのですが、先日104で動作確認したところ、カクツキの現象がなくなっていました。

.NET Frameworkのバージョンを変更したからでしょうか・・・?

とにかくうまく動いているようですので、本チケットは後日クローズします。各種遅延対策は別チケットにて。(含 判定ライン表示上下機能 #31602)

2015-12-24 00:26 更新者: yyagi
  • 状況オープン から 完了 に更新されました
  • チケット完了時刻2015-12-24 00:26 に更新されました

添付ファイルリスト

添付ファイルはありません

編集

ログインしていません。ログインしていない状態では、コメントに記載者の記録が残りません。 » ログインする