【VRChat】VRSLの始め方 手動制御編
VRSL(VR Stage Lighting)にはリアルの照明卓を用いてVRChat内の照明制御をする機能がある。
↓公式Wiki
DMX信号を用いて制御するわけだが、とにかく通信経路が複雑で簡単な制御を行うにも非常に苦労した。
一部、公式Wikiの解説とは異なる方法で制御を実現しているが、一通り動かすことはできたため、その方法を解説する。
VRSLの環境導入やシーン作成方法がわからない方は下記のリンクからどうぞ。
動作確認環境
Unity 2022.3.22.f1
VRSL 2.7.1
USharpVideo 1.0.1
Gridnode 2.3
OBS 30.2.0
VRSLによるDMX制御のメカニズム
VRChatでは直接DMX信号を受け付けるインターフェースは無い。
そこでVRSLでは、YoutubeやTwitchによる動画ストリーム配信サービスを用いてDMX通信を実現している。
何を言っているかわからないと思うが、私も未だにこの実現方法が信じられない。
とりあえず通常のDMX制御と比較して、VRSLによる制御方法について解説する。
通常のDMX制御
TODO
VRSLによるDMX制御
TODO
VRSLによるDMX制御のシステム構成イメージ
TODO
インストール
UsharpVideo
VRChatワールドでTwitch/Youtube配信を受信するのに本記事ではUsharpVideoを使用する。
下記リンクより、最新バージョンをダウンロード&インストールする。
QLC+
リアルの照明卓は持ってないので、フリーのバーチャルコンソールを使用してデモする。
下記リンクよりバーチャルコンソール(QLC+)をダウンロード&インストール
VR Stage Lighting Artnet Grid Node
DMX信号をグレースケール&OSCに変換するツール。$12かかるので嫌な人は自作しよう。(私は自作するのが面倒すぎて買いました)
下記リンクより購入&インストール
OBS
グレースケール画像をストリーミング配信するためのキャプチャソフト。
これ一つで画像キャプチャからTwitch/Youtube配信までできてしまう優れ物。
下記リンクよりダウンロード&インストール
Unityエディタ内で動作確認
VRCワールドは使用せず、Unityエディタの再生ボタンを押して起動するデバッグモードで、灯体をリアルタイムで制御するデモをする。
Unityエディタでデバッグする時のみ、VRSLはOSCに対応するため、本デモではOSCによるDMX通信を行う。
事前準備
動作確認用に3つの灯体を設置したシーンを作成。
すべての灯体はスタートアドレスを1に設定
VRSLコントロールパネルを開いてDMX Screens~のHorizontalボタンを押下し、“VRSL-DMX-TekOSCGridReader-H”プレハブを生成
VRStageLightingGridNode.exeを起動
続いてQLC+を起動。
[入力/出力設定]タブから[ArtNet:127.0.0.1]行の[出力]列のチェックボックスをチェック
動作確認
Unityの再生ボタンを押して、デバッグモードを起動。
QLC+の[シンプル卓]のフェーダーを動かすと照明が動く。
参考:VRSLが用意する灯体のアドレス対応表
VRChatワールドで動作確認
VRCワールド内に設置した灯体をリアルタイムに制御するデモをする。
誤解を恐れずに言うとVRワールドではOSC通信が使用できない。そのため、本デモではグレースケール画像変換&ストリーミング配信によるDMX通信を行う。
事前準備
動作確認用に3つの灯体を設置したシーンを作成。
すべての灯体はスタートアドレスを1に設定
VRSLコントロールパネルを開いてDMX Screens~のHorizontalボタンを押下し、“VRSL-DMX-TekOSCGridReader-H”プレハブを生成
UsharpVideoプレハブをシーン内に設置。
UsharpVideoで受信した映像を、“VRSL-DMX-TekOSCGridReader-H”プレハブに投影する。
[UsharpVideo]プレハブ -> [Internals] -> [AVProRenderTextureFetch]の[VRC ACPro Video Screen]コンポーネントを“VRSL-DMX-TekOSCGridReader-H”プレハブ->[Viewer]にコピー&ペーストする。
VRStageLightingGridNode.exeを起動
OBSを起動。
ウィンドウキャプチャでVRStageLightingGridNodeのGrid画面を指定。
ウィンドウキャプチャの設定で"垂直反転"と"画面に引き伸ばして置く"を適用。
[プロファイル]タブ -> [新規]で配信用のプロファイルを作成
自動構成ウィザードで"配信のために最適化~"を選択した後は案内に従って配信環境を整える。
配信映像の解像度は1920x1080に設定。これで配信環境の構築は完了。
続いてQLC+を起動。
[入力/出力設定]タブから[ArtNet:127.0.0.1]行の[出力]列のチェックボックスをチェック
動作確認
OBSで[配信開始]ボタンを押下し、配信を開始する。
Unity画面に戻り、[UsharpVideo]プレハブの[Usharp Video Player]コンポーネントのDefault Playlist URLsに配信URLを入力。
また、Default Stream Modeにチェック。
[VRChat SDK]タブ -> [Show Control Panel]でVRChat SDKのコントロールパネルを表示。
[Builder]タブ -> [Built & Test New Build]ボタンでビルドを開始。
※USharpVideoはUnityエディタの再生ボタンによるデバッグモードではストリーム配信を受信できないため注意
VRChatのデバッグ画面が表示されたらQLC+の[シンプル卓]のフェーダーを動かすと照明が動く。
QLC+から生成された信号が、VRCワールド内の灯体に反映されるまで約30秒ほどかかる。
参考:VRSLが用意する灯体のアドレス対応表
リアルタイム??制御ができた!
余談
OBSでエラーダイアログ“指定したチャンネルまたはストリームキーにアクセスできません~”が表示され配信できない時がある。
設定画面からアカウントを切断し、アカウントにログインしなおしたら治った。
USharpVideoをシーン内に配置して、Unityエディタの再生ボタンでデバッグを開始すると下記のエラーが発生。ストリーミング映像が受信できない。
[USharpVideo] Video 'https://www.twitch.tv/koru_05' failed to play with error Unknown
UnityEngine.Debug:LogError (object,UnityEngine.Object)
VRCコントロールパネルの[Built & Test New Build]ボタンでビルドを開始すると正常にストリーミング映像を受信できる。