Upgrade to Pro — share decks privately, control downloads, hide ads and more …

サーバレス な マルチユーザVR システム

0ca0c0ec6efe3a7f5220332a910e6da0?s=47 shinyoshiaki
October 05, 2018

サーバレス な マルチユーザVR システム

歌舞伎座.tech#15
2018/10/5(金)  バーチャルキャスト会場

0ca0c0ec6efe3a7f5220332a910e6da0?s=128

shinyoshiaki

October 05, 2018
Tweet

More Decks by shinyoshiaki

Other Decks in Technology

Transcript

  1. 大学3年生 Shin 歌舞伎座.tech#15
 2018/10/5(金)  バーチャルキャスト会場 サーバレス な マルチユーザVR システム

  2. バーチャルキャストの基本的な機能を サーバレスで実現可能なのか? サーバレスでリアルタイム通信をするために WebRTCを用いて実験的な開発

  3. WebRTC •本来は、ブラウザ同士をP2Pでつなぐための技術 •P2Pで異なるネットワーク間で接続。NAT越え •Streamで映像と音を、DataChannelで任意のデータを送受信 •Unity用のサンプルプラグインが存在 •低遅延

  4. 低遅延

  5. 低遅延

  6. Unity Unity シグナリングサーバ •シグナリングサーバでお互いの情報を交換する シグナリング

  7. Unity Unity P2P •シグナリング完了後は完全なP2P, サーバレスな通信を実現 シグナリング

  8. DataChannelをうまく使う •文字列しか使えないので送受信のルールを決めておく •RPC風の実装を行う •関数名+引数(配列)なJsonを文字列にして相手に送る

  9. • 3Dモデルをサーバに保管するのではなく、P2Pで交換する  → ストレージサーバ不要、モデル所有者の心理的安心感 3Dモデルの共有 VRM VRM

  10. None
  11. • VRMファイル  ①wwwでバイト配列として読み込む  ②deflateで圧縮  ③10kbごとに分割   ④チャンクをBase64で文字列に  ⑤VRMの受信関数名 + チャンク をDataChannelで送る DataChannelでVRMを送る

  12. •モーションの同期  positionとrotateを文字列にして「受信関数名 + モーション」を   DataChannelで送る            •オブジェクトの同期  オブジェクトの座標、回転、今誰が影響を与えてる(動かしている)か、  をDataChannelで共有 •リップシンクの同期

      OVRlipSyncのVisemesをDataChannelで送る
  13. 方法 結果 UnityのWebRTCプラグイン標準 繋がったり、繋がらなかったり、不安 定。 ドキュメントがない。 UnityOpus + DataChannel 自環境では音質が悪い。

    ドキュメントがない。 UnityからブラウザのWebRTCを使う 当然、普通につながる。 高音質。 立体音響は無理。 現時点ではこれを採用。 ボイス
  14. スクリーンキャプチャの共有 Electron内にシグナリングサーバを建てて Unityとローカルでシグナリング 相手側のUnityとは外部のシグナリング サーバでシグナリング Electronでスクリーンキャプチャをしてスト リームをUnityに送る ② Unity Electron

    ① StreamingAsset   から起動 Unity ➂ 映像 ➂ 映像 自分側 相手側
  15. None
  16. まとめ •バーチャルキャストにある機能はある程度、WebRTCでも  再現可能と思われる

  17. 今後 • ミドルウェア化 • メッシュ型、ツリー型、SFUで3人以上の接続対応? ソーシャルVR?(Max 5~6人) 音楽ライブ? (N人) 大規模低遅延配信

    (最近だとIRIAM   みたいなことができる?) SFU
  18.   ↓パワポのファイル     ↓質問はTwitterで @ShinYoshiaki