開発

非同期タイムワープ(ATW)(廃止)

更新日時: 2023/12/12
Mobile SDK Deprecation
2022年8月31日をもって、Mobile SDKとVrApiライブラリのサポートは終了しました。今後のアップデートは、Meta MobileやPC APIの新しい更新ではなく、OpenXR拡張機能やOpenXR Mobile SDKを通じて提供されます。
Mobile SDKのサポート終了は、以下のことを意味します。
  • 新しいアプリはMetaネイティブのMobile APIにアクセスできませんが、既存のアプリは引き続き利用可能です。
  • MetaネイティブのAPIを使ったアプリの新規作成に対する支援は提供されません。既存のアプリをOpenXRに移行するための推奨事項は、開発者ガイドに記載されています。
  • MetaネイティブのAPIに関する重要なセキュリティ、プライバシー、または安全性の問題のみ対応されます。
  • MetaネイティブのMobileのテストは、自動QAテストに限定され、コア機能が動作することを確認する目的のみで行われます。
この廃止について詳しくは、Meta、OpenXRに全面的に移行: 専用APIの廃止をご覧ください。
非同期タイムワープ(ATW)は、最新のヘッドトラッキング情報に基づいて立体画像を変換することで、motion-to-photon遅延を大幅に削減する機能です。これにより、VRアプリの遅延と揺れが軽減されます。

概要

基本のVRゲームループでは、次のことが発生します。
  1. ソフトウェアが頭の向きをリクエストする。
  2. CPUが左右の目のシーンを処理する。
  3. GPUがシーンをレンダリングする。
  4. コンポジターがディストーションを加え、ヘッドセットにシーンを表示する。
ゲームループの基本的な例を以下に示します。
Timeline diagram of a basic VR game loop from head tracking to display.
基本のゲームループ
フレームレートが維持されると、リアルで快適な体験を楽しめるようになります。タイミングが遅れる場合は、前のフレームが表示されますが、方向感覚が失われることがあります。次の図は、基本のゲームループで発生した揺れの例を示しています。
Timeline diagram showing judder when a frame misses its deadline in the game loop.
揺れが発生している基本のゲームループ
頭を動かし、視界がそれに追いつけない場合、揺れが生じて没入感が損なわれます。
非同期タイムワープとは、レンダリングした画像をわずかにシフトし、頭の動きの変化に合わせて調整する技術です。画像には変化が加えられますが、頭の動きは少ないため、その変化はわずかです。
また、ユーザーのコンピューター、ゲーム設計、オペレーティングシステムの問題を解決するため、ATWはフレームレートが予期せず低下したときの不規則性や動きを修復することができます。
次の図は、ATWが適用されたときのフレームレートの低下の例を示しています。
Timeline diagram showing ATW correcting a dropped frame to maintain stable display.
ATWを使用しているゲームループ
更新間隔で、コンポジターがATWを最後にレンダリングしたフレームに適用します。その結果、ATWが適用されたフレームは、フレームレートに関係なく常にユーザーに表示されるようになります。フレームレートが非常に悪化していると、ディスプレイの周辺部分でフリッカーが見られるようになります。ただし、画像は引き続き安定しています。
非同期タイムワープはコンポジターによって自動的に適用されるため、有効にしたり、調整したりする必要はありません。ATWで遅延を減らすことができるとはいえ、アプリやエクスペリエンスのフレームレートが維持されていることを確認してください。

ディスカッション

立体化されたそれぞれの目のビューはテクスチャーにレンダリングされ、その後ディスプレイにワープされてヘッドセットの広角レンズに起因する歪みを修正します。
motion-to-photon遅延を削減するため、タイムワープを描画する直前に、ヘッドセットの更新された方向情報が取得され、変換行列が計算され、目のテクスチャーがレンダリング時点のものから表示時点のものへとワープされます。ワープされたピクセルはほぼ正確です。急激な回転を行うとエッジの一部のピクセルは黒いままになりますが、ほとんど気にならない程度で収まります。
タイムワープにさらに手を加え、「補間タイムワープ」にできます。動画は1ミリ秒に約120本のスキャンラインというレートで描画されますので、スキャンラインは右側のほうが左側より遅延が大きくなります。遅いLCDではこれは実質的に問題になることはありません。しかし、スイッチングが速いOLEDでは、急激な回転を行うと世界が少し伸びたり縮んだりしているように感じる可能性があります。これは、左右の目に表示するデータの計算開始時に、頭の姿勢を予測する(1つの目に関しては予測は8ミリ秒未満、両方の目の予測は16ミリ秒未満)ことで修正されます。これらの予測を使用してタイムワープ変換が計算され、描画されるそれぞれのスキャンライン用の値の間でこのワープが補間されます。
タイムワープは、ワープされたテクスチャー座標を計算して左右の目に表示するテクスチャーをサンプリングするフラグメントプログラムを使ってスクリーンクワッド全体をレンダリングすることにより、GPUに実装されます。しかし、パフォーマンスを向上させるために、タイムワープは、左右のテクスチャーをサンプリングするためのテクスチャー座標系が設定されている画面全体の上に、一様にモザイク状になった三角形のグリッドをレンダリングします。三角形のグリッドをワープされたテクスチャー座標系でレンダリングすると、基本的には、タイムワープの区分的な線形近似になります。
立体視レンダリングにタイムワープを非同期で実行すると、認識されるフレームレートを大きくし、一貫しないフレームレートをスムーズにするためにも使用できます。現在デフォルトでは、タイムワープはネイティブアプリとUnityアプリの両方で非同期で実行されます。
ナビゲーションロゴ
日本語
© 2026 Meta