スイスからHMDだけでVRChatをした
スイスからこんにちは。
生活を真面目にやっています。
研究はあまり進んでいません。
こいついつも研究が進んでないって言ってるな
今回は、ローカルのマシンを一切使用せず、スイスから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が難しい環境でも、手軽にプレイできるのは非常に魅力的ではないでしょうか。
本記事が何かの役に立てますと幸いです。