歌舞伎座.tech#15 2018/10/5(金) バーチャルキャスト会場
大学3年生Shin歌舞伎座.tech#15 2018/10/5(金) バーチャルキャスト会場サーバレス な マルチユーザVR システム
View Slide
バーチャルキャストの基本的な機能をサーバレスで実現可能なのか?サーバレスでリアルタイム通信をするためにWebRTCを用いて実験的な開発
WebRTC•本来は、ブラウザ同士をP2Pでつなぐための技術•P2Pで異なるネットワーク間で接続。NAT越え•Streamで映像と音を、DataChannelで任意のデータを送受信•Unity用のサンプルプラグインが存在•低遅延
低遅延
Unity Unityシグナリングサーバ•シグナリングサーバでお互いの情報を交換するシグナリング
Unity UnityP2P•シグナリング完了後は完全なP2P, サーバレスな通信を実現シグナリング
DataChannelをうまく使う•文字列しか使えないので送受信のルールを決めておく•RPC風の実装を行う•関数名+引数(配列)なJsonを文字列にして相手に送る
• 3Dモデルをサーバに保管するのではなく、P2Pで交換する → ストレージサーバ不要、モデル所有者の心理的安心感3Dモデルの共有VRMVRM
• VRMファイル ①wwwでバイト配列として読み込む ②deflateで圧縮 ③10kbごとに分割 ④チャンクをBase64で文字列に ⑤VRMの受信関数名 + チャンク をDataChannelで送るDataChannelでVRMを送る
•モーションの同期 positionとrotateを文字列にして「受信関数名 + モーション」を DataChannelで送る •オブジェクトの同期 オブジェクトの座標、回転、今誰が影響を与えてる(動かしている)か、 をDataChannelで共有•リップシンクの同期 OVRlipSyncのVisemesをDataChannelで送る
方法 結果UnityのWebRTCプラグイン標準 繋がったり、繋がらなかったり、不安定。ドキュメントがない。UnityOpus + DataChannel 自環境では音質が悪い。ドキュメントがない。UnityからブラウザのWebRTCを使う 当然、普通につながる。高音質。立体音響は無理。現時点ではこれを採用。ボイス
スクリーンキャプチャの共有Electron内にシグナリングサーバを建ててUnityとローカルでシグナリング相手側のUnityとは外部のシグナリングサーバでシグナリングElectronでスクリーンキャプチャをしてストリームをUnityに送る②UnityElectron① StreamingAsset から起動Unity➂ 映像➂ 映像自分側 相手側
まとめ•バーチャルキャストにある機能はある程度、WebRTCでも 再現可能と思われる
今後• ミドルウェア化• メッシュ型、ツリー型、SFUで3人以上の接続対応?ソーシャルVR?(Max 5~6人) 音楽ライブ? (N人) 大規模低遅延配信(最近だとIRIAM みたいなことができる?)SFU
↓パワポのファイル ↓質問はTwitterで@ShinYoshiaki