V-sync とテアリングについて
V-sync (垂直同期)は、RV が使用するコンピュータの Windows システムまたはグラフィック ドライバの機能です。RV がフレームのレンダリングを終了すると、RV は表示デバイスが現在のフレームを表示し終わるのを待ってからフレームを表示します。これにより、デバイスがフレームを表示している間にフレームが更新されることがなくなります。更新が発生すると、「テアリング」と呼ばれる症状が発生し、水平線の上に水平線の下とは異なるフレームが表示されます。テアリングの水平線は、時間の経過とともに上下する場合も、フレームの一定の位置にとどまる場合もあります。
RV の V-sync オプション
RV のレンダリング基本設定には、Video Sync というオプションがあります。プラットフォームに応じて、このオプションを使用して V-sync を有効または無効にすることができます。OS X および Windowsでは、既定では V-sync が有効です。これらのプラットフォームでは、RV の基本設定を使用してシステムの V-sync を無効にすることができます。
Linux の場合、仕組みはやや複雑です。Linux の NVIDIA ドライバには、ドライバ レベルで実行されるものと RV によって制御されるものという全く異なる 2 つの OpenGL V-sync 方式があります。また NVIDIA ドライバは、特に複数のモニタが GPU に接続されている場合に V-sync の動作を制御できるいくつかの環境変数を認識します。
別バージョンの RV
RV の内部レンダリングは、より最新の機能を実行するようにバージョン 3.12.12 で変更されました。OS X と Windows では際立った変化はありませんが、RV が再生する一部のメディアが「高速化」します。これは特にプレゼンテーション モードを使用している場合に顕著です。一方 Linux では、ドライバのバージョンによっては V-sync の動作が 3.12.12 以降の RV で異なる場合があります。
すべてのプラットフォームに影響するタイミングの問題
理解することが最も難しい問題は、モニタ/プロジェクタの物理特性と、そのデバイスで再生されているメディアのフレーム レートに関連しています。
リフレッシュ レートが 60 Hz (60 フレーム/秒)のモニタで 24 フレーム/秒(24 Hz)のメディアを再生する場合、24 Hz のムービー プロジェクタで再生されるフレームのタイミングのみをエミュレートできます。真の意味で同じタイミングを得ることは不可能です。理由は数学的に簡単に説明できます。つまり、60 は 24 で割り切れないということです。
この問題に対処するため、RV はできるだけデバイス レート(この場合は 60 Hz)に近いレートで再生し、視覚的に満足のいく方法で 24 フレームを実際の 60 フレームに広げようとします。フレームのタイミングに注目した場合、あるフレームは連続で 3 回再生され、別のフレームは 2 回しか再生されないことに気が付くでしょう。
この問題を回避する唯一の方法は、出力デバイス レートをメディア レートに一致させ、デバイス レートがメディア レートで割り切れるようにることです。
NVIDIA ドライバを搭載した Linux の V-sync
Linux の NVIDIA ドライバには、多くの V-sync オプションがあります。
- NVIDIA の設定コントロール パネルで利用可能なドライバの OpenGL V-sync (類似した名前の XVideo V-sync は無視します)
- レンダリング基本設定から利用可能な RV の V-sync
- __GL_SYNC_TO_VBLANK 環境変数
- __GL_SYNC_DISPLAY_DEVICE 環境変数
残念なことに、これらのオプションはすべて相互に関連しあいます。そのため、次のように設定することをお勧めします。
- ドライバの OpenGL V-sync を ON にする
- RV の V-sync を OFF にする
- __GL_SYNC_TO_VBLANK をセットしない
- GPU に 2 台以上のモニタが接続されている場合は、どのモニタと同期するかを示す __GL_SYNC_DISPLAY_DEVICE をセットします。RV が起動した後は、ドライバは同期デバイスを変更できないため、明示的にどちらかのモニタを選択する必要があります。明示しない場合は、ドライバが自分自身で判断します(通常は「メイン」モニタを選択)。ドライバがモニタに使用する名前に DFP-1、CRT-1 などの環境変数を設定します。
RV が起動したシェルの出力で V-sync に関する診断メッセージを調べます。RV は、テアリングを引き起こす設定を検出しようと試みます。不具合のある設定が検出されると、シェル(またはコンソール ウィンドウ)に通知されます。プレゼンテーション モードでは、テアリングが発生しそうな場合にダイアログボックスを表示して警告します(RV が検出できる場合)。
どのような状況でも、ドライバの V-sync と RV の V-sync の両方を同時に設定しないでください。
Linux の全般的な問題
Linux では、カーネルをさまざまなタスクに適応させることができます。大量の計算を行う場合は、それぞれのプロセスでより長い時間スライスが必要な場合があります。残念ながら、これは RV にとっては良くありません。RV は、大量のより短い時間スライスを受け取る場合に最良の結果を示します。カーネルが長い時間スライスに設定されていると、再生が不安定になる可能性があります。この問題の回避策の 1 つは、ストリーミング再生で説明するように RV のリアルタイム スケジューリングを使用することです。