Godot Engine VR開発メモ(Oculus Quest、SteamVR、WebXR対応)

最終更新日:2021年07月07日

オープンソースのゲームエンジンGodotでVR開発をする方法やTipsをメモしていく場所です。

更新履歴

(2021年7月7日)ページ公開、OpenXRについてとりあえず注記
(2021年3月10日)「Oculus Questアプリを作るには」を追加
(2021年3月9日)「WebXRアプリを作るには」を追加


Godotとは

Godotはオープンソースのゲームエンジンで「ゴドー」と読みます。

GodotのVR対応の基本

GodotにはVR・AR対応のための仕組みが標準で備わっています。ドキュメントのこちらにVR・AR関連機能の解説やチュートリアルがまとまっています。

基本的にどのプラットフォームでも下記の要領でシーンにカメラリグを作成します。

  • Create Root Nodeで3D Sceneを作る
  • ルートSpatialの子にARVROriginノードを追加する
  • ARVROriginノードの子にARVRCameraノードを追加する
  • ARVROriginノードの子にさらにARVRControllerノードを2つ追加して、InspectorでController Idをそれぞれ1と2に設定する
  • モーションコントローラーが表示されるようにARVRControllerノードの子に適当なノードを追加する(例えば MeshInstanceを追加してMeshをNew CubeMeshにしてTransformのScaleを(0.1, 0.1, 0.1)にする)

ここまで実行すると以下のようになります。

[TODO: スクリーンショット]

こののち、スクリプトのARVRServer.find_interfaceで各プラットフォーム向けのモジュールを初期化し、get_viewport().arvr = trueでビューポートのVR描画を有効にするのが共通する手順になります。

各プラットフォームのプロジェクトの作り方

新規プロジェクトを作成し、AssetLibを開いて「Oculus VR Module」をインストールします。「GodotのVR対応の基本」の要領でVRのカメラリグを作成して、ルートのノードに下記スクリプトを追加してください。

extends Spatial

func _ready():
    var interface = ARVRServer.find_interface("Oculus")
    if interface and interface.initialize():
        get_viewport().arvr = true
        OS.vsync_enabled = false
        Engine.target_fps = 90

右上のPlayボタンを押すかエクスポートしてWindows Desktopでエクスポートして実行するとOculus Link / Rift Sで再生されます。

SteamVRアプリを作るには

新規プロジェクトを作成し、AssetLibを開いて「OpenVR module」をインストールします。「GodotのVR対応の基本」の要領でVRのカメラリグを作成して、ルートのノードに下記スクリプトを追加してください。

extends Spatial

func _ready():
    var interface = ARVRServer.find_interface("OpenVR")
    if interface and interface.initialize():
        get_viewport().arvr = true
        OS.vsync_enabled = false
        Engine.target_fps = 90

右上のPlayボタンを押すかエクスポートしてWindows Desktopでエクスポートして実行するとSteamVRで実行されます。

Oculus Questアプリを作るには

Androidビルドできるようにする(Windows)

まずGodotでAndroidビルドできるようにしておきます。Godot 3.2.4 RC 4の場合、下記ページに従ってAndroid Studioと指定されているパッケージ群、それにOpenJDKをインストールします。ただし、OpenJDKのインストールについて、OpenJDK 8だとアプリの署名時にエラーが出るのでOpenJDK 11をインストールしてください。

GodotのEditor Settings > Androidに下記の要領で設定します。

項目 ディレクトリ
Adb C:/Users/[ユーザー名]/AppData/Local/Android/Sdk/platform-tools/adb.exe
jarsigner C:/Program Files/AdoptOpenJDK/jdk-11.0.10.9-hotspot/bin/jarsigner.exe(インストールしたOpenJDKのバージョンによって変更)
Debug Keystore 作成した debug.keystore の場所を設定
Android Sdk Path C:/Users/[ユーザー名]/AppData/Local/Android/Sdk

できればこの時点で通常のアプリをビルドしてAndroid端末にインストールできることを確認しておきます。

VR用のプロジェクトを作成する

新規プロジェクトをOpenGL ES 2.0で作成し、AssetLibを開いて「Godot Oculus Mobile Plugin」をインストールします(プロジェクトのaddons/godot_ovrmobileフォルダにlibgodot_ovrmobile.soとそれを使用するためのファイルがインストールされます)。

シーンに「GodotのVR対応の基本」の要領でVRのカメラリグを作成してください。

初期化用のスクリプトを追加する

ルートのノードに下記スクリプトを追加してください。

extends Spatial

func _ready():
    var interface = ARVRServer.find_interface("OVRMobile")
    if interface and interface.initialize():
        get_viewport().arvr = true

プロジェクトのエクスポート(ビルド)

作成したシーンを保存して、右クリックのSet As Main Sceneでメインシーンに設定します。

Project > Export…でAndroidを追加して、OptionsのXr ModeをOculus Mobile VRに、Degrees Of Freedomを6DOFに、Focus AwarenessをOnでビルドしてください。

ここまでの手順で、上手くいけばエディタ右上のドロイド君ボタンを押すだけでQuest実機にアプリをインストール・起動できます。

WebXRアプリを作るには

WebXR対応バージョンのGodotをダウンロードする

Godot 3.3からWebXRサポートが追加されました。

WebXRサポートを実装したDavid Snopek氏のページに詳細な解説が書かれているのですが、以下、必要最小限の手順のメモと、使用されているスクリプトの解説を行います。

シーンを作成する

新規プロジェクトをOpenGL ES 2.0で作成し、「GodotのVR対応の基本」の要領でVRのカメラリグを作成します。

このとき左手と右手のARVRControllerの名前を「LeftController」「RightController」に変更してください。次に追加するスクリプトでARVRControllerをノードの名前で参照しているためです。

初期化用のスクリプトを追加する

ルートのSpatialノードでスクリプトの追加ボタンを押して、David Snopek氏のページの中程にあるスクリプトをコピペします。

VRモードに入るための UI を作成する

ブラウザでVRモードに入るためのボタンを作ります。Spatialの子にButtonノードを作成し、Buttonのサイズを適当に設定して、Textに適当に「Enter VR」と入力します。

プロジェクトのエクスポート(ビルド)

作成したシーンを保存して、右クリックのSet As Main Sceneでメインシーンに設定します。

Project > Export…でAdd…でHTML5を追加して(必要ならプロジェクトテンプレートをダウンロードして)Export Projectします。

ローカルHTTPSサーバーでホストする

WebXR Device APIはHTTPSサーバーでなければ動作しません。ローカルHTTPSサーバーを建てる簡単な方法としてBrowsersyncを使用します。npmでBrowsersyncをインストールして、プロジェクトがエクスポートされたディレクトリで下記を実行してください。

$ browser-sync start -–server –-https –-no-open -–port=1000

ブラウザで実行する

表示されたURLをブラウザで開きます。Questのブラウザで開く場合は、アドレスバーに「https://192.168..:1000/」とhttpsから全部入力する必要があります。「Enter VR」ボタンをクリックすると、上手くいけばVRモードに切り替わるはずです。

スクリプトの解説

φ(..)メモメモ

マルチプラットフォームのアプリを作るには

φ(..)メモメモ

Godot Oculus Quest Toolkit

書いた人:こりん(@korinVR
VR開発メモトップ