AppsJapan バーチャルテレポート メッシュ処理(概要編) interop17
- WebRTC
- 2017/06/01
バーチャルテレポートのメッシュ処理を簡単にまとめています。
まずはメッシュ処理全体の説明です。
- 深度カメラを使ったセンサーデバイスで、3Dの立体情報をリアルタイムにスキャン
- 3D情報を、2つのデバイスに同時に表示(ピラミッド状ディスプレイと、MRデバイス)
- 3D情報の送信には、2つの通信方式を利用(WebRTCのデータ通信DataChannelと、WebSocket)
深度カメラ
点群の取得には、Intel RealSense R200を利用しました。
複数の深度カメラから同時に点群を取得でき、赤外線パターンが干渉せずに利用できるステレオ方式のカメラです。
Realsenseの構造はこのようになっています。
メッシュ生成
4方向の深度カメラから取り込んだ点群は下記になります。
- 640x480 x 4台の深度カメラで撮影
- 全体で点は122万Pt、椅子だけで17万Pt
ここから椅子の点群だけを切り出し、メッシュを生成していく流れを説明します。
① Z軸(奥行)をカット
② 密な点群を削減
17万Pt -> 1万6000Pt (所要時間: 30ms)
③ 離れた点群の除去
④ 細かな凹凸の点群を表面へ移動
1万6000Pt -> 1万5000Pt (所要時間: 120ms)
⑤三角探索(点から面を生成)
2万6000Polygon (所要時間: 330ms)
⑥メッシュの穴を埋める
⑦ポリゴンの数を削減
2万6000Polygon -> 5500Polygon (所要時間: 150ms)
上記のようにして、扱いやすい大きさまでデータを加工しております。
Source Project
今回の開発に利用したライブラリは下記になります。
C++
-
PCL v1.8rc2
lebronzhang/pcl- librealsense対応版
Add Intel LibRealSense grabber and viewer #1633 - VTK(Visualization Toolkit)
- Eigen(線形代数)
- FLANN(高速最近傍点探索)
- librealsense対応版
- LibRealsense
IntelRealSense/librealsense - WebRTC
aisouard/libwebrtc - WebSocket
zaphoyd/websocketpp
Unity
-
WebRTC
WebRTC Network(AssetStore)- Assetのコードは非公開なようです。解析がひと手間。
- Assetのコードは非公開なようです。解析がひと手間。
- WebSocket
sta/websocket-sharp
謝辞
ここまで読んでいただきありがとうございます。
ブログのキーワードにご興味のある方がおられましたら会場で色々と質問いただければ幸いです。
更に詳しい内容は下記の記事をご覧ください。
当日はAppsJapanでもよろしくお願い致します。