
VRChat内でコンシューマゲームをプレイする方法について考える(TopazChatについて)
この文章は、誰に教わったでもないソロVRCプレイヤーが一人でしらべて勝手に納得した気になっている文章です。間違いがいっぱい含まれているかもしれませんが責任はとりません。
またこの文章で使う「コンシューマゲーム」は、コンシューマゲーム機でプレイするゲームとSteamでプレイするゲームの両方を含みます。
1.動機
某ポケモンに似た感じのPCゲームが発売になったとき「VRChatに帰れ」というツイートがバズっていた。ではVRChatterは今後ゲームがバズるたびに「VRChatに帰れ」と叫ぶだけなのか。ならばVRChat内でゲームをプレイしてみたらどうなのよ。
2.実践
達成要件
以下を達成要件とし実験を行う。
●VRChatインスタンスにjoinした状態でゲームをプレイする。
●joinerもプレイ画面を見れる。
●トラッキングを使用したコミュニケーションをとる。
●Meta Questでもjoinできる。
実験構成
配信ツール:TopazChat
仕様ゲーム機:Nintendo Switch
録画配信ソフト:OBS Studio
HMD内オーバーレイソフト:XSOverlay
構成図:

準備
●ワールド作成
・ワールドをQuestでもjoinできるようにする
・TopazChatを設置しStreamKeyを決める
・PC用ワールドとQuest用ワールドで再生アドレスが違うので気を付ける(PC:rtsp、Quest:rtsp)
・事前にわかっていた場合は、ここで後述のRender Queue問題を対応する。
雑に作ったワールド例。

動作検証用に作ったワールド例。

●OBS設定値
なんとなくTopazChat制限値の半分以下におさまるように調整。
実践と結果
●達成要件
HMDしながらプレイをすることはできた。
joinerと対話しながらプレイすることができた。
late joinerにリニアに対応することができた。
●実践中に発生したトラブル
joinerのアバターによってTopazChat playerが点滅するという事象が発生。
原因:Render Queue値の設定。2000だとアバター側シェーダと競合して点滅する。3000に変更したところ点滅が発生しなくなった。
●発覚した問題
・HMDをしていると手元のコントローラのボタンが見えない。
XBOXコントローラとSwitchコントローラとPSコントローラで違うボタン配置に惑う人には大きな問題。
・プレイヤーの手はコントローラを持っているので、アバター外見は手がトラッカーなし状態。
ハンドコントローラを腕にくくりつける?コントローラ操作アニメーションをエモートする?
3.基礎理論
TopazChatとはなにか
乱暴な説明:VRChat音楽イベントやってるときに、ワールドにおいてある「Resync」ボタンがついてる、アレ。
●プレイヤー
TopazChat Player
●音声ストリーマー
TopazChat Streamer 2
これは、音声配信のみを行う場合に使用する。
●音声・映像ストリーマー
音声・映像ともにストリーミングする場合、OBS Studioを使用する
TopazChatで配信するとはなにか
TopazChatとは、RTSPプロトコルを使用した低遅延ストリーミングの配信サーバ機能・受信放送機能の総称である。
●主な用途:VRDJイベント
●配信インフラ:AWSを使用している。利用料金は有志が代替している。
自宅にストリーミングサーバを立てることもできるが、のぼり回線で人数分の帯域が必要となるため、現実的でない可能性がある。
●制限:ビットレートは3000 kbps以内(推奨は映像2000kbps 音声320kbps以内)
無料で間借りさせていただくと考えると、できる限り負荷を低くすることが望ましい。たとえば、720p・30fps・音声160kbps・低画質、さらに低い設定などといった、軽量化を行う努力義務がある。
●配信サーバアドレス・再生アドレス
配信サーバアドレス
rtmp://topaz.chat/live
OBSにはStreamKeyの指定が必要。
再生側アドレス
PC rtspt://topaz.chat/live/[StreamKey]
Quest rtsp://topaz.chat/live/[StreamKey]
●再生するためには何が必要か
TopazChat配信は、とりあえずTopazChat Playerで再生することを考える。
Iwasyncでも再生できる。再生側アドレスを手打ちすればよい。
TopazChatの遅延について
●PCの場合
PCの場合は約1秒の遅延が発生する。設定を詰めればもっと短くなると思われる。映像+音声か、音声のみの話かは分からないが。
いずれにせよ、アクションゲームやシューティングゲームなどスピードを要するゲームを快適にプレイできるとはいいがたい遅延のため、配信後画面を見ながらプレイするのは無理と考えたほうが良い。
●Questの場合
Questの場合、公証n秒の遅延と音声ズレが発生する。おそらくTopazChatサーバ側設定も影響するような気がするため、OBS側・再生側では解消不能と考える。
まだ遅延が3秒以上あるのと、再生開始までに5秒以上かかったりします。
#TopazChat がMeta Quest版VRChatで動作することを確認しました! 既存のTopazChat Playerで、URLの先頭を
— よしたか (@TyounanMOTI) July 30, 2022
修正前:rtspt://
修正後:rtsp://
にすればOKです(最後の t がいらない)。これでPC版もQuest版も動作します。
まだ遅延が3秒以上あるのと、再生開始までに5秒以上かかったりします。 https://t.co/XyOGEJNhS6
IwasyncとTopazChatの違い
●Iwasyncでできること
Iwasyncでも以下のようにRTSPのアドレスを直接入力することでTopazChatを再生できる
PC rtspt://topaz.chat/live/[StreamKey]
Quest rtsp://topaz.chat/live/[StreamKey]
●Iwasyncでできないこと
たぶん、PC/Quest両対応ワールドで、同一のTopazChat配信を見ることができない。プロトコルが違うため。
●TopazChatでできないこと
通常のYoutubeなどの動画再生。アドレスをユーザが指定することができない。
IwasyncのLiveモードとは
●liveモード
youtube liveについて
RTMP/RTMPSストリーミング。またはHLS(HTTP Live Streaming)
RTMPはtwitchでも使用している。
●videoモード
Videoモードでは、たぶんHLSを使用している。
●つまり
配信サービス・形式によってプロトコルが違う。
ちなみにDiscordはWebRTC(Web Real-Time Communication)ベースらしい。
TopazChat配信サーバを使用せず自宅配信する方法
未検証。以下が参考になりそう。
ただしRTMP配信はアップロードデータ量受信者数で倍増していくようなので、自宅回線程度では大規模イベントには不向きらしい。
4.手段を決める構成
以下の組み合わせで、実現できる構成と必要な機材が変わる。
ゲーム機がコンシューマ機であるかPCゲームであるか
ゲーム機がコンシューマ機である場合、HDMIなどの映像音声出力をキャプチャデバイス経由でOBSに取り込む必要がある。
PCゲームの場合、同じPCにOBSがあれば同一マシンで配信が可能である。
プレイヤーモニタがディスプレイであるかHMDであるか
プレイヤーモニタがディスプレイの場合、PCVRモードでVRChatを使用することはできない。
VRChatをPCVRモードとする場合、OBS画面に表示しているをHMDにオーバーレイして表示する必要がある。これはVRChat内配信画面では遅延が大きくゲーム性が下がるためである。
VRChatはPCVRモードかデスクトップモードか
VRChatがデスクトップモードの場合は、アバタージェスチャーを用いたコミュニケーションをとることはできず、HMDも不要なため、VRChatにゲーム画面を配信し同一インスタンスにjoinできてしまえば準備は完了である。
HMD使用の場合、前述のようにHMD内オーバーレイができるように構成する必要がある。
その他疑問と答え
●他のワールドでできるのか
たとえばSurRoomなどはIwasyncを持ちながらTopazChatのユーザ別StreamKey生成機能を持っている。実際アドレスに前出ストリーミングアドレスを入力すれば、TopazChatを含めたストリーミング再生可能。ただしPCのみワールドなのでQuestユーザが入れないところが問題点。
やり方を別記事に作成したので参照。
●複数のTopazChat playerを設置し、複数人同時プレイできるのか
できる。単一ワールドでもStreamKeyの違うプレイヤーが設置されている場合、別の配信を同時に放映することができる。
●TopazChatによるVRChat配信だけでなく、ほかのストリーミングにも同時に配信できないのか
OBSで同時配信設定を行えば、おそらくできると思われる。
まとめ
こうしてゲームプレイ画面をVRChatで視聴する方法が整理できた。
しかし、ゲームはローカルで集中してやったほうがよい人もいる。また交友関係もゲームプレイ関係とVRChat関係で別なのであろう。ここまでしてプレイを共有する必要性があるかは疑問を感じる。
つまり「vrchatに帰れ」は、VRChat内でゲームをプレイするのではなく、ゲームはゲームとしてプレイし、VRChatではゲームでなくjustなりなんなりしろという意味なんだなと思っただけだった。どっとはらい。
まとまらなかったおまけメモ
●VRChat サイベリア
DJのプレイ動画と、VRChatインスタンスの様子がミックスされてyoutubeに配信されている。ビデオスイッチャー?PCでRTSPを受信してVJミックス?
ここから先はVRCVJ論になってくる
●SYNCROOM
低遅延音声データ通信ソフト。おそらくOBSへの入力となる。SYNCROOM合奏をOBSでTopazChatに向けて配信することで、VRChat内音楽演奏が行われている。アーティストパフォーマンスはSYNCROOM発信と同時にトラッキングでVRChat内アバターを操作していると思われる。