Graphics.frame_resetを多用しても問題ない?

アバター
seea
記事: 84
登録日時: 2016年6月04日(土) 21:48
連絡を取る:

Re: Graphics.frame_resetを多用しても問題ない?

投稿記事by seea » 2017年6月11日(日) 14:40

これまでに分かったこと:
・カクつきは、フレームスキップ、またはそれによく似た現象である。
・カクつきは Windows10の DWM が発生させる。
・Windows7では DWM をオフにすることができるので、この問題を回避できる。
 (このOSは3年後には終息なので、Windows7 に最適化しても仕方ない面はある)
・Windows10の DWM は無効化は不可能。
・全画面表示を使用すると Windows10の DWM はバイパスされる。
・全画面表示では、カクつきは原理上は発生しない。
 (何らかの理由で負荷が高くなり、次の Graphics.update に間に合わないと起こるが、それはまた別の話)
・全画面表示は DWM による高品質な拡大表示を使えないので、拡大された絵がどうなるかは予想できない。
 (ディスプレイの拡大性能に左右される。大抵は DWM に比べると汚い。皮肉なことに、CRT では問題が無かった)

ここに掲載したスクリプト Precise Anti-Lag について
・そのまま使うのは難あり。
・Windows10である程度の改善効果は見られる。
・完全に解決しているわけではなく、軽減しているだけなので、よく見るとカクつきが起きている。
・ウィンドウモードに対して効果がある。全画面表示には効果がない。
 (あってもなくても、カクつきは発生しない)
・Windows7では副作用があり、悪化する。
 そのため、任意にオフに出来る、インストール時に選べるなどの対応が必要。
・Windows10の他の環境でも副作用があるかもしれないが、報告されるまで分からない。
・マップ画面とその他で FPS を使い分けているように見えるが、上手くいっていない。

新たに分かったこと:
・Precise Anti-Lagを使わずに 60 FPSの状態で、
・同じスクリプトでも、メニューを開いて閉じるだけで、カクつきが悪化したり、改善したりする。
・DWM とのタイミングの問題かな? DWMにとって都合の良いタイミングで画面更新するか、しないかの差。
・運任せ状態。
・この「運が良い」状態を意図的に再現することができれば、FPS を変更せずに改善できるかもしれない。

アバター
seea
記事: 84
登録日時: 2016年6月04日(土) 21:48
連絡を取る:

Re: Graphics.frame_resetを多用しても問題ない?

投稿記事by seea » 2017年6月18日(日) 17:55

色々と調査した結果、
1ミリ秒未満の細かいタイミングをRGSS3は制御できないなどの理由から、
RGSS3からは修正不可能であることが分かりました。
その辺りは RGSS301.dll 内部のことになり、このDLLを修正しない限り無理。
つまり……ユーザーでは不可能。

Windows 7では問題を回避できますが、Windows 10ではその回避策も使えません。
VX Aceの開発時に10は存在しませんでしたので致し方ないという見方もあります。

VX Aceの全画面表示(ディスプレイ解像度変更)を使うと回避できますが、マルチディスプレイ全盛の今、
全画面表示はデメリットが大きすぎるので、この手法も封じられています。
(仮想フルスクリーンは使えますが、それではカクつきは回避できない)

そのため、現在制作中のVX Ace版のプロジェクトは今後は手を加えず、
RPGツクールMVのプロジェクトにて制作を進めることとしました。

RGSS3で書かれた追加スクリプト群は、がんばって変換することにします。

MVでもカクつきは発生しますが、まだ改善の可能性はあります。
いまのところ、下手にプラグインなどを足して手を加えずに、
1.5.0のコアスクリプトをそのまま使う方が、軽いカクつきで済んでいます。


結論:
Graphics.frame_resetを多用しても問題ない?
 → 問題あり過ぎる。

“VX / Ace:質問” へ戻る