VSYNC の動作について | りょうのゲーム塾

りょうのゲーム塾

再開、準備中。

ここで解説する VSYNC の動作はプチコンのものでなく

もっとも一般的な動作説明です。




VSYNC 命令は V-BLANKING 信号と同期をとるための命令です。


V-BLANKING 信号とはもともとディスプレイがブラウン管だったときに使われていた信号です。
映像は1秒間に約60回描画されていてその描画周期の基準点となる信号がV-BLANKING 信号になります。
今でもゲームの映像を作る際にこの周期が使われていてゲーム画面は60分の1秒単位で進みます。



■ VSYNC 1 の動作
VSYNC 1 とは1秒間に60回同期するという意味です。
要するにゲームで実行されるタスクは60分の1秒ごとに実行されます。
VSYNC 命令は毎回 V-BLANKING 同期を行った後次の命令に進みます。
その後にすべてのタスクを実行していきます。(図1では3つのタスクを実行している)


図1

思い出の欠片-VSYNC1_N
A 前回のVSYNCが終わりタスクを実行する

B すべてのタスクが実行され次のVSYNC命令が実行される

C VSYNC命令の中で次の同期タイミングが来るで待つ

  この時前回のタイミングを0とした場合今回は1なのでここでVSYNCを終了する




すべてのタスクの実行時間が60分の1秒に収まれば問題はありません。
しかし実際にはタスクの実行時間はプログラムの内容や方法によりまちまちです。
時には実行に時間がかかるものも存在します。
もしすべてのタスクの実行時間の合計が60分の1秒に収まらない場合にはその次のタイミングまで待ちます。

するとこの状態が続けばタスクの実行が60分の2秒毎の実行になるので1秒間に30回しかタスクが実行されません。
要するに本来1秒間で60歩進むタスクが実際に1秒間で半分の30歩しか進まないわけです。
プレイヤにとっては時間感覚が2分の1(遅く)になります。
このような状態を処理オーバーといいます。

一度処理オーバーするとしばらくは続くので動きが急に遅くなったり、早くなったりします。


図2
思い出の欠片-VSYNC1_O1

A 前回のVSYNCが終わりタスクを実行する

B すべてのタスクが実行され次のVSYNC命令が実行される

C VSYNC命令の中で次の同期タイミングが来るで待つ

  この時前回のタイミングを0とした場合今回は2なので1以上経過しているためここでVSYNCを終了する