エンジンルート編の締めくくり。Unity / Unreal 向け image-blasterAndroid XR の Jetpack XR に続き、Godot 4.6OpenXR をエンジンに一次対応 で同梱したオープンソースルートです。プラグインマーケットも 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 ガイドに従います。経路概要:

  1. エディタから Android Build Template をインストール(Project → Install Android Build Template)。
  2. Android Studio + Android SDK をインストールし、Godot の Editor Settings で SDK パスを設定(export/android/android_sdk_path)。
  3. Android エクスポートプリセット を追加し、Min SDK 29、Target SDK 34 を設定。Meta Horizon OS 向けに OpenXR メタプラグインを有効化。
  4. ヘッドセットを 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 のままだとヘッドセットで視認可能なマイクロスタッターが出ます。デバイスのリフレッシュレートに合わせます。

関連リンク

ご質問は お問い合わせ ページからどうぞ。

// ニュース一覧へ戻る