HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2022
0801
youdaiHGIMG4のフレームレートに関係するawaitの適切な値について報告します4解決


youdai

リンク

2022/8/1(Mon) 19:42:59|NO.96897

HGIMG4のフレームレートに関係するawaitの適切な値について報告します。

●awaitの値はディスプレイのリフレッシュレートと合わせる必要がある

HGIMG4のredraw 0 〜 redraw 1 await 間のawaitの値は、ディスプレイのリフレッシュレートと合わせないと、アプリケーションのフレームレートとズレが起きます。
例えば、ディスプレイのリフレッシュレートが64 Hzの場合、await の値は1000/60ではなく、1000/64でないと画面の更新が4の分、ズレます。
そのズレは、画面上では更新が引っかかったような、途切れ途切れのような状態になります。
そのズレの状態は、画面の更新が遅くなるというより、ビデオテープが時々飛び飛びに再生されるような不自然な状態になります。
この状態は垂直同期モードであるかないかに関わらず発生します。

サンプル等でよく見られるawait 1000/60は、リフレッシュレート60Hzに合わせたものであると思われます。
上記しましたが、例えばディスプレイのリフレッシュレートが64Hzの場合は、awaitの値を1000/60ではなく、1000/64が最適な値となります。

ユーザーにアプリケーションを提供する際は、このawait 1000/fpsのfpsの部分をユーザーが手動で調整できるようにアプリケーションを作成すべきだと思います。
でないと、ディスプレイによっては正常に画面が表示されないこともあるでしょう。

この問題はディプスプレイのリフレッシュレートが60Hz以外の環境にある人しか気づきにくい問題であるので、作品を作るときには注意した方がいいと思います。

これらのことはHGIMG4のマニュアルには記載されていないので、記載した方がいいと思います。



この記事に返信する


GENKI

リンク

2022/8/8(Mon) 00:51:35|NO.96920

> この状態は垂直同期モードであるかないかに関わらず発生します。

確認ですがgpresetを実行する前に、次の1行を追加した状態ということですよね。

setreq SYSREQ_VSYNC, 1
垂直同期を有効にした場合は、await は0にしていますか?
1000/60を指定すると、余計な待機が発生して描画タイミングがずれる可能性がないこともないです。
垂直同期を使う場合、待機時間は1000/60より十分小さい値か0が適切値です。(←マニュアルには書かれてません。)

> ユーザーにアプリケーションを提供する際は、このawait 1000/fpsのfpsの部分をユーザーが手動で調整できるようにアプリケーションを作成すべきだと思います。

ゲーム難易度が変化しないように真面目に実装しようとすると大変そう。



youdai

リンク

2022/8/8(Mon) 21:00:48|NO.96925

> GENKIさんへ
GENKIさん宛には以前、このフレームレート調整についてホームページに講座として提示されていたので、同問題を問題として意見としてメールを出していたのですがお読みになっていますか?
返事がないのでどうしたのかと思っていました。


setreq SYSREQ_VSYNC, 1

については指定しています。

>垂直同期を使う場合、待機時間は1000/60より十分小さい値か0が適切値です。(←マニュアルには書かれてません。)
await 0の値については確かめていなかったので、その状態で同現象が起きるか確認してみようと思います。



GENKI

リンク

2022/8/9(Tue) 22:28:19|NO.96928

> 返事がないのでどうしたのかと思っていました。

大変失礼いたしました。申し訳ありません。この書き込みを拝見して、今メール読んできました。
大事なメールが来るのが年数件とはいえ2週間もメールアプリ開いていなかったとは…。
内容はこのスレと同じですね。

リフレッシュレートは、OS側の設定で60Hzなどきりいい値にしかできないのでは…と調べていたのですが、最近はそうでもないんですね。
ディスプレイによっては64Hzしか設定が選べない製品があったり、59.9Hzなんて小数点以下を含む設定もあったり。
FreeSyncとかG-SYNCなどの関係でしょうか。難しいですね。なんなんだこの仕様。

などと調べていたら思い出したのですが、垂直同期はフルスクリーンモードにしないと機能しない可能性があります。ウィンドウモードだとほかのアプリ描画などで遅延が発生することがあるそうです。また、ハードウェアによっては全画面表示じゃないと垂直同期機能がそもそも使用できないものもあるみたいです。



youdai

リンク

2022/8/10(Wed) 17:00:16|NO.96938

GENKIさんアドバイスありがとうございます。
垂直同期モード時ではawaitの値を「1000/リフレッシュレートのHz」か、GENKIさんのアドバイス通り「await 0か、1」でも、上記したような状態の画面不具合が起きないことを確認しました。

>また、ハードウェアによっては全画面表示じゃないと垂直同期機能がそもそも使用できないものもあるみたいです。
グラフィックボードの設定の中に「デスクトップモード時でも強制的に常時垂直同期する」設定がないものは、おそらくウィンドウモード時では垂直同期できないかもしれません。
この辺の仕様は作品を発表する時にマニュアル等に記載しておこうと思います。



ONION software Copyright 1997-2023(c) All rights reserved.