» VR開発メモトップへ

Mozilla Hubsメモ

最終更新日:2021年08月05日

オープンソースのソーシャルVRシステム・Mozilla HubsおよびHubs Cloudについてメモしていく場所です。

更新履歴

(2021年8月5日)Amazon Auroraの費用の説明と「参考文献」を追加
(2021年8月3日)「Hubsのアーキテクチャのメモ」「Hubs Cloudの費用」を追加
(2021年8月2日)とりあえずページ作成


Mozilla Hubsについて

Mozilla Hubsは、ブラウザで動作するオープンソースのソーシャルVRシステムです。PC・スマートフォン・Oculus Quest等でインストールなしでURLを開くだけで動作するほか、ウェブベースのためウェブとの親和性が高く、PCでは画面共有をしてVR空間内で見せることができたりといった特徴的な機能があります。

Mozilla Hubsの公式サイトを開いてルームを作るとすぐ利用できるほか、Hubs Cloudを自分で立ち上げることもできます。

シーン(いわゆるワールド)を作るには

Spokeというブラウザ上で動くシーンエディタが用意されています。作ったシーンを利用してルームを立ち上げたり、.spokeファイルとしてエクスポート・インポートすることができます。

アバターを作るには

手っ取り早く独自アバターが必要ならReady Player Meを利用するのが簡単です。

オリジナルのモデルを使用したい場合は、右下メニューからChange Name & Avatar > Change Avatar > Create Avatar > Custom GLBで.glbファイルをアップロードします。下記ページで、Blenderを使用して既存のモデルをHubs仕様に改造する方法が解説されています。

Hubs Cloudについて

Hubs CloudをAWSのサーバーで立ち上げることができます。Mozilla Hubsの公式サイトで動作しているものと同様、ルームを作ったり、シーンを制作したり、アバターをアップロードできます。Hubs CloudはAWS Marketplaceで公開されており、CloudFormationで比較的簡単にセットアップできます(AWSの使用経験が多少あったほうがいいと思います)。

下のような管理画面もあります。WordPressのソーシャルVR版と思えばだいたいあってます。が、常時起動しようとすると費用がそこそこかかります。

Hubs Cloudの費用

下記ページにHubs CloudをAWSで動かす際の料金のガイドがあります。

AWSでHubs Cloudを動かす場合、ネットワーク転送料金やストレージ使用料金を含め諸々の料金がかかってきます。特にオンラインで動作している間、EC2とAuroraの料金が大きくかかります。適宜オフラインにしたり、EC2のインスタンスを変更したりする必要があります。

Hubs Cloud Personalの場合、データベースにAmazon Aurora (PostgreSQL)のServerless型が使用され、Aurora Capacity Unitが2に設定されているため、動作中は$0.2/時かかります(本稿執筆時)。デフォルトではHubs Cloudにしばらく誰もアクセスしていないとデータベースが自動的に停止し、誰かがアクセスすると復帰する設定になっています。復帰には数十秒かかり、その間ブラウザはページ読み込み中のまま何も表示されません。Auto-Pause DatabaseをNoにするとこの動作を止められますが、$0.2/時が常時かかり続けるため注意が必要です($144/月になります)。

「Minimize your Costs - A User Story」の項目で、イベント等を開催するときにHubs Cloudをオンラインにしてスケールアップ、スケールダウンしてオフラインに戻す一般的な手順が解説されています。CloudFormationでHubs CloudのスタックでUpdateボタンを押して、パラメーターや構成を変更できます。

セットアップ方法

前準備として、ドメインを用意しておく必要があります。Amazon Route 53で新規ドメインを2つ取るのが簡単です(Domain Recipesのレシピ1)。自分はkorinhub.com ($12/年)とkorinhub.link($5/年)を取得しました。また、デプロイするリージョンでEC2のSSHのキーペアを作成しておく必要があります。

AWS Quick Startの手順に従います。CloudFormationでのデプロイに20~30分、手順全体ではだいたい1時間ほどかかると思います。

なお、東京リージョンでデフォルト設定だと下記エラーでデプロイに失敗しました。Subnet Availability Zonesでacdのうち2つを設定(たとえばUse zone c and dを選択)すると成功しました。

Your subnet group only has one Availability Zone ap-northeast-1a that is supported by Aurora Serverless. Please ensure the subnet group includes at least two of the following Availability Zones, supported by Aurora Serverless: ap-northeast-1a, ap-northeast-1c, ap-northeast-1d. (Service: AmazonRDS; Status Code: 400; Error Code: InvalidVPCNetworkStateFault; Request ID: fcdda384-90a9-4a52-8242-5a57b561eb2d; Proxy: null)

デプロイ後、AWSから認証のメールを送信できるようにAWSのサポートに依頼して制限を解除してもらう必要があります。

セットアップ直後は画像リンク切れが起きていると思います。上のadminから管理画面に入って、Setup > App Setings > IMAGESで画像を設定します。

また、管理画面のContent > Import Contentを開き、Find Avatars & Scenesをクリックして開くページから適当なアバターとシーンのpackファイルをインポートします。

トラブルシューティング

シーンの影が描画されない

SceneのライトのCast Shadowをオンにして、Preferences > Misc > Enable Synamic Shadowsをオンにすれば影が描画されるはず……なんですが不具合があるっぽい?

また、Questではフレームレートがあまりに低下するためダイナミックシャドウは無効化されているようです。

SpokeのAssetsでSketchfabのモデルがロードされない

APIキーを設定する必要があります。SketchfabのMy Settings > Password & APIにあるAPI tokenを、管理画面のSetup > Server Settings > API Keysに設定します。

日本語ドキュメントについて

GREE VR Studio LaboratoryHubsドキュメント日本語訳があります。

Hubsのアーキテクチャのメモ

以下のページにHubsのアーキテクチャの説明があります。

Hubsはサーバー・クライアント方式で、クライアントはNetworked-Aframe(JavaScript)を使用。A-Frameにネットワーク位置同期機能が追加されたライブラリ。物理シミュレーションはすべてクライアントサイドで行われ、特定のユーザーがオブジェクトのオーナーシップを持つ。A-FrameはThree.jsの上に構築されHTMLでセマンティックに3Dシーンが記述できるライブラリ(Three.jsから二段重ねなのでオーバーヘッドがちょっと心配)。

メッセージ通信全般はReticulum(Elixir)を使用。ルームに接続するとロードバランスされたWebSocketのメッシュネットワークに接続され、Phoenix Channelsでルーム内のユーザーにメッセージがリレーされる(つまり今のところTCP通信? WebTransportに期待)。永続的なデータはReticulumからPostgreSQLデータベースに保存。

音声・ビデオはJanus WebRTC Server(C言語)を使用し、WebRTC SFUですべてサーバー経由で通信……という感じのようです(気が向いたらもっと深堀りするかも)。

参考文献

Mozilla Hubsのエンジニアリングマネージャーを努めていたGreg Fodor氏によるHubsのマスタープランの解説があり、Hubsがどのようなプロダクトか知る助けになります。 

また、白井先生のスライドが非常に詳しいです。

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