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