スイスからHMDだけでVRChatをした

tags: #vrchat#aws

スイスからこんにちは。 生活を真面目にやっています。 研究はあまり進んでいません。 こいついつも研究が進んでないって言ってるな

今回は、ローカルのマシンを一切使用せず、スイスからHMDだけでVRChatをVRでプレイすることに成功したので、そのことについて書こうかと思います。

前提

今回、私がスイスに持ってきた主なデバイスは以下の通りです。

  • M4 MacBook Pro
  • M5 iPad Pro
  • Apple Vision Pro(初代)

スイスでVRChatをしたい、ということは思っていましたが、まさかゲーミングノートを買うわけにもいかず、当然デスクトップPCをスイスに持っていくことなどできないので、半ば諦め、半ば「なんとかなるだろ」の気持ちで、これらのデバイスだけでスイスに渡航しました。

Apple Vision Proは基本的に生産性向上といった目的で購入しましたが、その便利さ故に、最近はVRChatなどでも利用しています。 これは、Apple Vision Pro向けのALVRが公開されているためです。 そのため、HMD側には問題がないと確信していました。

そもそもスイスは研究目的で来ているので、VRChatなどやっている場合ではありません。 しかしながら、人間には余暇とコミュニケーションが必要ですから、今回はVRChatをできないか模索してみたわけです。

ゲーミングマシン

まず、VRChatをするには、Windowsが動いて、VRChatに耐える性能を持ち、かつVMでない必要がある、という前提条件があります。 VMでない、という制約は、みなさんご存知Easy Anti-Cheat(EAC)がVM実行を検知すると、VRChatの起動をブロックするからです。

しかし、このようなマシンをレンタルで用意できるでしょうか? AWSのVMでないマシン、すなわち metal 級のマシンは、とても常用できるような値段ではありません。 他のサービス、例えばShadowなどと言った、Windowsマシンを借りられるサービスも試しましたが、どれもVM上で動いてました。 VM上でないものもありましたが、なかなか渋い構成と価格だったり。 GeForce Nowに関しては、Steam VRやALVRなどの必要なアプリケーションが起動できないため、VRでプレイできませんでした。

そこで今回は、 最初に述べた前提を疑う ことにしました。

Steamの開発元であるValveはLinuxでWindows向けゲームをプレイできるように、Wineベースの互換レイヤーである Proton を開発しています。 Wineとは、Linux上でWindows向けアプリケーションを動かすために開発された互換レイヤーで、システムコールの翻訳などを行うことで、Windows向けにコンパイルされたバイナリをLinux上で動かすためのものです。 Valveは自社で開発しているデバイスとしてSteam Deckがありますが、これはLinuxベースであり、この上でWindows向けゲームを動かすといった目的で、互換レイヤーとしてProtonが開発されています。

そしてこのProtonにはなんと EAC互換レイヤー という 激怪しい 実装が生えています。 つまりこの互換レイヤーを利用すれば、VMのLinux上でVRChatを動かせるのでは? たゃは訝しんだ。

ちなみにこれはOpus 5くんも思いつかなかった手法なので、私の勝ちです。

AWSのEC2で適当なマシンを借りる

ということで、AWSに適当なEC2インスタンスを立て、そこにLinux、Steam、VRChatを突っ込んで動かしてみましょう。

流石にVRChatを動かすとなると、それなりのマシンスペックが必要になります。 NVIDIAのGPUは欲しいところですね。 ということで、実際に利用した性能などから、 g4dn.2xlarge を借りることにしました。 このインスタンスは8 vCPU、32GB RAM、そしてNVIDIA T4 GPUを搭載しています。 T4 GPUのVRAMは16GiBと、VRChatをプレイするには十分なサイズ。

今回はスイスからアクセスというわけで、流石に普段使っている ap-northeast-1 (東京)リージョンでは遠すぎます。 ということで、今回は eu-central-1 (フランクフルト)がスイスから地理的に近かったので、こちらを利用することにしました。 しかしGタイプインスタンスのvCPUクォータが0に設定されていたので、ここはいつもお世話になっているAWSサポートのチケットをオープン。 無事に16 vCPUまでクォータを上げていただき、無事 eu-central-1 に g4dn.2xlarge のインスタンスを立ち上げることに成功しました。

AMIは適当なUbuntu 24.04を選択しました。

EC2上でVRChatとALVRを動かす

というわけで、EC2にいい感じのインスタンスが確保できたところで、このインスタンス上でVRChatとALVRの実行環境を整えていきましょう。

なんと、ValveはLinux向けSteamのインストーラを配布しており、これをインストールするだけで、Windows向けゲームへのProtonの適用などをよしなにやってくれます1。

さらに、今回はApple Vision ProでVRChatをプレイするためにALVRを利用する必要があるのですが、なんとALVRにはLinux向けビルドが存在しています2。

というわけで、とにかくこの辺を実行できる環境を整えていきます。

NVIDIA driver導入

何はともあれ、NVIDIAのドライバーがなければ話になりません。 これはぼちぼち苦労しましたが、ここで実際のバージョンなどを書いても、どうせすぐに情報が陳腐化すると思うので、詳しくは書きません。 私もそうですが、多分みなさんのChatGPTやClaudeに聞くのが速いです。

Tailscale導入

AWSインスタンスのセキュリティグループに穴を開けまくるのは普通に怖いですよね。 また、基本的にALVRもローカルのIPアドレスに検索をかけているようなので、EC2インスタンスのパブリックIPと直接通信するのはどうも都合が悪そうです。

ということで、みなさまお馴染みのTailscaleを利用することにしました。 TailscaleはいわゆるVPNで、wireguardをベースとしており、UDPで効率の良いカプセル化を行っています。 さらに、Tailscaleはいい感じのUDPホールパンチングを提供しているため、セキュリティグループでinboundに穴を開ける必要もありません。 というわけで、TailscaleのホームページからLinux用のインストールコマンドをコピペして、インストールしましょう。

今回は特にExit nodeやsubnetなどの設定はしないで問題ありませんでした。

GUI導入

AWS上のUbuntuは当然Ubuntu Serverがベースで、デスクトップ環境が入っていません。 そのため、適当な軽量デスクトップ環境と、そこにリモートでアクセスするための環境を構築する必要があります。

今回は xfce4 と xrdp をインストールし、xfce4のデスクトップにRDPから入れるようにしました。 RDPへはMacBook Proから、Windows Appを使って入っています。

VRChatを起動する

ここは何も書くことがないくらい素直にできました。 SteamのホームページからUbuntuなどで利用できる .deb 形式のインストーラがダウンロードできるので、適当に sudo apt install ./Downloads/steam_latest.deb とかするとインストールできます。

Steamがインストールできたら、Windows同様に、ログインしてVRChatを起動し、VRChatにログインしましょう。 Windowsとなんら変わりなくできます。 なんでだよ。

ALVRを導入する

正直ここが一番きつかったです。

どうやら、Linuxで提供されているSteamVRとALVRの最新安定版の通信プロトコルが噛み合っていないようで、一方ALVRの master ブランチをビルドすると、今度はVision Pro側のALVRとバージョンが噛み合わなくなり、通信できなくなります。

最終的には、この点をCodexの gpt-6-astra に伝えてパッチを当てさせることで解決しました。 まぁこれも情報を書いてもすぐ陳腐化すると思うので、みなさんの環境に合わせて、お手元のCodexを実行してもらうのが速いと思います。 あとは、私の環境ではTestFlightでベータ版のALVRを導入しないと通信がうまくいきませんでした。

ALVRのビルドにはRustやGCCといった依存関係をインストールする必要がありますが、この辺も詳しくはALVRのビルドドキュメントに載ってるので割愛します。 どうせCodexにやらせれば一発です。

起動

というわけで、これらのセットアップが終わったら、ALVR、Steam VR、VRChatを起動します。 音声や通信が不安定といった問題が生じましたが、これもCodexくんが解決してくれたので、みなさまもそんな感じで頑張るといいと思います。

実際の挙動を見ると、だいぶガタガタで、ゲームとかは耐えないくらいの品質でした。 まぁおしゃべりメインの集会とか、チルワなら行けるんじゃないかな、と思います。

費用面

一番考えたくないやつですね

今回利用した eu-central-1 での g4dn.2xlarge の料金は、時間あたり$0.94でした。 これが例えば毎週末6時間、月4回とすると、だいたい$23弱とかでした。 得られる体験に対して、割と許容範囲なのではないでしょうか。 利用時間以外は停止することで、ストレージ料金以外はかからないはずです。

ただし、ストレージ料金はべらぼうに高くないものの、安くはないので注意が必要です。 自分は肌感としてgp3 128 GBであれば耐えられるくらいの請求だろうな〜と思っているので、細かい計算はしていません。 ストレージ量だけで言えば、$12程度のようです。

一番怖い通信料ですが、数時間プレイいて15GBとかでした。 毎週末土日に6時間プレイするとして、仮に20GB、これを月4回とすると80GB。 通信のegress料金は月100GBまでは無料なので、ほぼ無料の範囲に収まると言えます。

ということで、まぁだいたい週末6時間を毎週プレイして、$50いかない程度かなあと思います。 ゲーミングノートを買うことを考えれば、私のスイス滞在は半年程度なので、ずっとやっても$300程度。 それも毎月に分散して請求されることを考えれば、まぁいいんじゃないでしょうか。

まとめ

今回はスイスから eu-central-1 に g4dn.2xlarge のEC2インスタンスを立ち上げ、Linux上でProtonを使いVRChatを起動、ALVRにパッチを当てたものをLinux向けにビルドすることで、海外からApple Vision ProだけでVRChatをプレイすることに成功しました。

しかし、品質は少し耐え難いところもあるので、本当に非常手段という感じです。 それでも、海外滞在といったVRChatが難しい環境でも、手軽にプレイできるのは非常に魅力的ではないでしょうか。

本記事が何かの役に立てますと幸いです。

Footnotes

  1. 逆になんでだよ ↩

  2. これもなんでだよ ↩