サーバレス な マルチユーザVR システム
by
shinyoshiaki
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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