1.1K Views
March 23, 21
スライド概要
2021年3月23日に開催されたWebXR Tech Tokyo #5の登壇資料です。
https://vrtokyo.connpass.com/event/204853/
ゲームエンジンGodotの WebXR 対応を試す こりん(@korinVR) WebXR Tech Tokyo #5 @ cluster 2021/03/23
自己紹介 本名 ハンドル 古林 克臣(こばやしかつおみ) こりん(@korinVR) 職業 所属 Unityエンジニア 株式会社エクシヴィ
今日のお題 オープンソースのゲームエンジンGodotが WebXRに対応したので概要を紹介します。 - Godot(Godot Engine)の紹介 GodotでWebXRビルドする方法 VRのツールキットの紹介 Godotの所感
Godot(Godot Engine)とは
Godot(Godot Engine)とは C++製2D/3Dゲームエンジン 元々はアルゼンチンのJuan Linietsky氏とAriel Manzur氏の 両名により2007年頃から開発されたインハウスゲームエンジン
Godot(Godot Engine)とは 2014年にオープンソース化(MITライセンス、GitHub) 約171名のコミッター(10コミット以上) Patreon経由やMozilla、Microsoft、Epic Games、Facebook等の 資金サポートを受けつつアクティブに開発が進められている
Godot Engineの特徴 - マルチプラットフォーム - Windows、macOS、Linux、iOS、Android、HTML5等 - スクリプトは独自言語GDScript - C#やC++も公式サポート - ノードベースのスクリプティングやシェーダーもサポート - UnityやUE4と比較が可能なくらいの機能は揃ってきている - ビルド(エクスポート)が爆速 - エディタ自体がGodot Engineで動いている - HTML5ビルドされたWeb Editorもある
増えるGodot Engineのユーザー 世界最大のゲームジャムGGJにて ここ数年で使用する参加者が顕著に増加 (依然Unityが圧倒的ですが……) 現在ユーザー数はDAUで推計約15000人 2021年 2017~2020年(青線)
余談:「Godot」の由来と読み方 名前の由来はサミュエル・ベケットの戯曲 「ゴドーを待ちながら(Waiting for Godot)」 いくら待っても永遠にゴドーはやって来ない 完全なエンジンにはならないというような含意か Godot Engineの読まれ方はわりとバラバラだが つい2日前に公開された公式のプレスキットによれば 「英語話者は(フランス語の戯曲同様)”GOD-oh” を推奨」 しかし、創始者のJuan Linietsky氏はスペイン語読みで 「ゴードット(Go-Dot)」と発音している
余談:「Godot」の由来と読み方 裏話として、Godotは開発名だったが 逆転裁判にゴドーというキャラクターが 登場して正式名称に決まったそう アルゼンチン文化にちなんだ名前をつけようと言っていたら 「逆転裁判3」のゴドー(Godot)の 英語版の本名がディエゴ・アルマンド (アルゼンチン出身のマラドーナの名前に由来と思われる) さらに余談だが Diego Armando →ゴドー 個人的には逆転裁判が好きなので 「ゴドーエンジン」と読んでる
GodotのWebXRサポートについて
GodotのWebXR対応について GodotはHTML5で動作するアプリを出力できる Godotはエンジン本体に VR/ARサポートのためのインターフェースが整備されている (すでにRift、Quest、Steam VR、OpenXR等に対応) David Snopek氏がWebXRモジュールを開発 今年の1月にメインブランチにマージされた 現在RC版がリリースされているGodot 3.3から利用できる
GodotのWebXRモジュール Godot Engineのリポジトリの /modules/webxr フォルダに WebXRモジュールが入っている /modules/webxr/doc_classes/WebXRInterface.xml に (まだビルドされていない)APIドキュメントがある David Snopek氏のサイトに詳細な解説があり 基本的な手順としてはこれを読めばいいのですが 以下、2021/3/23時点で動かす方法を簡単に紹介します。
GodotでWebXRアプリをビルドする
Godot Engine本体のダウンロード 2021/3/23現在、Godot 3.3 RC6で WebXRにエクスポートできることを確認 ページの下の方にあるStandard buildをダウンロード (Mono buildはRC6ではHTML5出力が動かない→RC7で直った)
シーンとカメラリグを作成する 新規プロジェクトをOpenGL ES 2.0で作成 左の画像のようにVRのカメラリグを作る - ルートにARVROriginを追加 - その子にARVRCameraと2つのARVRControllerを追加 - ARVRControllerをそれぞれ 「LeftController」「RightController」とリネーム (次に追加するスクリプトから名前で参照するため) - 「RightController」のController Idを2に設定 - コントローラー表示用のメッシュを適当に追加
スクリプトでWebXRモジュールを初期化 ルートにSnopek氏のページの中程にあるスクリプトを追加 長いが基本は簡単で、 ARVRServer.find_interface(“WebXR”) でWebXRモジュールをロードし、 WebXRのセッション開始のシグナルで get_viewport().arvr = true でVR描画を有効にしている 一通り目を通しておくといいかも
VRモードに入るボタンを作成 ルートにButtonノードを適当なサイズで作成し Textに「Enter VR」等を設定
プロジェクトのエクスポート(ビルド) シーンを保存、右クリックでMain Sceneに設定し Project > Export... でHTML5を追加しエクスポート 初回はテンプレートファイルを要ダウンロード(約500MB) (全プラットフォームのビルド済みGodotエンジンランタイム)
エクスポートされたファイルの内容 - .pckファイル(Godot独自形式) - プロジェクトのアセット一式 - 約18MBのWebAssembly - 事前ビルド済みのエンジン本体 (gzip圧縮後約4.5MB) - HTMLとJavaScriptのローダー等 圧縮配信して約5MBが出力サイズのベースライン(十分に小さい) (注:C#を使うとMonoと.NETのライブラリでgzip圧縮後5MBほど増える) Godotのエクスポートは、ほぼアセットを.pckにアーカイブして ビルド済みのエンジン本体に添付するだけに近いので爆速
HTTPSサーバーでホストして実行する WebXR Device APIはHTTPSサーバーでなければ動作しない .wasmと.pckが大きいのでウェブ配信時はgzip/Brotli圧縮を ローカルでとりあえずホストするにはBrowsersyncを使うのが簡単 $ browser-sync start --server --https --no-open --port=1000 Questのブラウザでアドレスバーに httpsから入力すると開ける 「Enter VR」ボタンで VRモードに入る
Godotで使用できるVRのツールキット
Godot Oculus Quest Toolkit Oculus Quest Toolkitという名前だが WebXRでも動く(Godotの共通化されたVR基盤のおかげ) ShowcasesにQuestアプリでの使用例
Godot Oculus Quest Toolkit - Touchコントローラーの表示 空間UI 基本的な移動やテレポート 物をつかむ処理 - 上記のサンプル - Beat Saberのようなゲーム
Godot Oculus Quest Toolkit Godot 3.3 RC6でエクスポートして動作を確認 (カスタムテンプレートは空にする) 大きめのプロジェクトなのにエクスポートは1秒 AutoLoadに登録されている OQ_Toolkit/vr_autoload.gd で VRのモジュールをロードしている OQ_Toolkitフォルダの .scn や demo_scenesフォルダを要チェック
Godotの所感(個人の感想です)
Pros - オープンソース(MITライセンス) - エンジンがコンパクト - 必要な機能のみを筋よく押さえている印象。起動も速い - エクスポートが爆速 - VRの基盤がすでに整備されている - OculusネイティブでもWebXRでも共通の方法で開発できる - 将来性 - 個人的な肌感覚では、このエンジン本気のゲームが作れるのでは? と 気がついた人々が集まってきて取り組みはじめている気配を感じる
Cons - 最新XRデバイスが対応するのはやはりUnityやUE4から - 最近ならVIVEフェイシャルトラッカーとか - 3Dアセットは自力でどうにかする必要がある - UnityのAsset StoreやUE4のMarketplaceに相当するものがない GodotにはAssetLibがあるが、 配布可能なものはオープンソースのもののみで主にスクリプト系 - 自作するか、SketchFabやTurboSquid等でなんとかしましょう - 独自言語のGDScriptを覚える必要がある - GDScriptのファンは多いよ! - C#も普通に使えるよ!(静的型でGDScriptよりずっと高速)
所感:GodotのWebXRはすでに実用域の印象 特にパフォーマンスに余裕のあるPCブラウザにおいては オープンソース大好きとか 爆速エクスポートが気になったらぜひぜひ!
逆転裁判の「ゴドー検事」のように熱い 「Godot Engine」いかがでしょう? ご静聴ありがとうございました! こりん(@korinVR)