Godot XR — Meta Quest 3 向け OpenXR を内蔵
10:00 JSTエンジンルート編の締めくくり。Unity / Unreal 向け image-blaster と Android XR の Jetpack XR に続き、Godot 4.6 は OpenXR をエンジンに一次対応 で同梱したオープンソースルートです。プラグインマーケットも SDK ダウンロードも不要 — プロジェクト設定を 2 つオンにし、XROrigin3D リグを配置すれば、ヘッドセットが手の内に。
▸ Godot XR セットアップガイド ・ godotengine.org ・ MIT
セットアップチェックリスト
エンジン: Godot 4.6 以降 — このリリースで OpenXR はコアインターフェース。別途プラグイン不要です。
プロジェクト設定:
| 設定 | 値 |
|---|---|
XR > OpenXR > Enabled |
ON |
XR > Shaders > Enabled |
ON |
Rendering > Rendering Driver |
Quest 3 スタンドアロンには Compatibility、PC テザリング VR には Mobile |
プロジェクトを保存し、レンダラ変更を反映するため Save & Restart でエディタを再起動します。
最小シーン
ハンドコントローラ付きのステレオビューを描画するのに 6 ノードで十分:
Main(Node3D + スクリプト)
├── XROrigin3D
│ ├── XRCamera3D
│ ├── XRController3D(tracker="left_hand")
│ └── XRController3D(tracker="right_hand")
├── DirectionalLight3D
└── WorldEnvironment
初期化スクリプト
ルートの Node3D にアタッチします。OpenXR インターフェースを取得し、vsync を無効化(XR ランタイムが提示を駆動)、ビューポートを XR に渡します。
extends Node3D
var xr_interface: XRInterface
func _ready():
xr_interface = XRServer.find_interface("OpenXR")
if xr_interface and xr_interface.is_initialized():
DisplayServer.window_set_vsync_mode(DisplayServer.VSYNC_DISABLED)
get_viewport().use_xr = true
# ヘッドセットのネイティブリフレッシュレートに合わせる。Quest 3 は既定 90Hz。
# デバイスプロファイルにより 72 / 80 / 120 も有効。
Engine.physics_ticks_per_second = 90
エディタで実行してテザリングヘッドセットで検証。Quest 3 スタンドアロンには Android ビルドが必要です。
Quest 3 へのデプロイ(Android エクスポート)
Deploying to Android ガイドに従います。経路概要:
- エディタから Android Build Template をインストール(Project → Install Android Build Template)。
- Android Studio + Android SDK をインストールし、Godot の Editor Settings で SDK パスを設定(
export/android/android_sdk_path)。 - Android エクスポートプリセット を追加し、Min SDK 29、Target SDK 34 を設定。Meta Horizon OS 向けに OpenXR メタプラグインを有効化。
- ヘッドセットを USB 接続(開発者モード + adb 認証済み)し、One-click deploy を実行。
初回ビルドは数分。以降のリビルドは差分のみ。
シリーズ内での位置付け
| ルート | エンジン/ランタイム | ターゲット |
|---|---|---|
| A-Frame / Babylon / IWSDK | ブラウザ + WebXR | Quest 3(ブラウザ)、Vision Pro(Safari)、Spectacles(Browser Lens) |
| Android XR | Jetpack XR | Android XR ヘッドセット & グラス |
| WebSpatial | React + Web 標準 → ネイティブ | visionOS / Apple Vision Pro |
| ViroReact | React Native + ネイティブ AR | iOS、Android、Meta Horizon OS |
| Godot 4.6 + OpenXR | ネイティブエンジン、GDScript / C# | Meta Quest 3(スタンドアロン)、OpenXR ランタイム経由の PC VR |
物理・レンダリング・シーンツール・アニメーションといったエンジン深度が必要で、Unity や Unreal のライセンス条件やメモリフットプリントを避けたいチームに向きます。
Apple Vision Pro:Godot のターゲット外
最初に明示しておく必要があります。AVP は OpenXR を公開しておらず、Godot の OpenXR ルートは届きません。Godot 財団は別途ネイティブの Apple プラットフォーム対応を検討中です。AVP の現実的なルートは:
- WebSpatial SDK — React → ネイティブ visionOS アプリ
- Unity PolySpatial — C# エンジンによるネイティブ visionOS
- visionOS の Safari による WebXR — A-Frame 記事 と Babylon.js 記事 で扱っています
計画上の注意点
- アプリあたり主 OpenXR インターフェースは 1 つ — エンジンは同時に 1 つの XR ランタイムのみ受け付けます。
- 一部ポストエフェクトにステレオ非対応の隙間 — 採用前に各ポストプロセスが右目で正しく描画されることを確認。
- サイレント初期化失敗 — ランタイム未インストールやヘッドセット未接続時に
is_initialized()が false を返します。ログを出力してユーザーに通知し、2D シーンを誤って「VR」体験として表示しないように。 - vsync OFF + 物理 90+ — vsync オンや物理 60Hz のままだとヘッドセットで視認可能なマイクロスタッターが出ます。デバイスのリフレッシュレートに合わせます。
関連リンク
- Godot XR セットアップ ・ OpenXR 設定リファレンス ・ Deploying to Android
- Godot XR 機能一覧
- 関連:Android XR ・ WebSpatial(AVP) ・ A-Frame WebXR ・ ViroReact(RN AR)
- ハッカソン詳細 — 参加資格、チーム編成、AI ポリシー
- Luma で参加申し込み
ご質問は お問い合わせ ページからどうぞ。