はじめまして。
エンジニアの横田(@selflash)です。

先日、弊社で開発中のシステム「LiveHologram(ライブホログラム)」に関するプレスリリースを行いました。
今回はこのLiveHologramの開発を担当している僕が、開発当初からの進捗を交えてどういうシステムなのかを少し深堀して紹介していきたいと思います。

プレスリリース:ワントゥーテン、ライブ撮影による3D映像をリアルタイムかつマルチプラットフォームに転送できるシステム「ライブホログラム」を開発。空間コンピューティングにも活用。



LiveHologramの話をする前に、一つ紹介しておきたいシステムがあります。


Holoportation (ホロポーテーション)について
2016年3月、Microsoft Researchが同社の複合現実ヘッドマウントディスプレイ「Hololens (ホロレンズ)」と3Dキャプチャ技術を採用したコミュニケーションシステム「Holoportation (ホロポーテーション)」を発表しました。

HoloLens応用の「ホロポーテーション」、Microsoftがデモ

Holoportationは人体をリアルタイムにキャプチャ&3Dモデルを生成し、遠隔地へ転送、そして受信側で3Dモデルの再構築を行います。
再構築された3Dモデルをヘッドマウントディスプレイを使ったMR技術によってホログラムの様な3D映像として表示する事で、「遠隔にいる人同士が、あたかも同じ空間にいるかの様にコミュニケーションがとれる」とした画期的なシステムでした。

Holoportationの登場に当時の僕は大きな衝撃を受けました。
発表時のこのシステムはまだ技術デモに過ぎなかったのですが、そう遠くない将来、このシステムが普及してSF映画のような体験ができるワクワクした未来がくるだろうと疑いませんでした。
しかし、発表から3年(記事執筆時の2023年現在までは6年)経過しても、Holoportationは普及するどころが、一般に触れるようにリリースすらされていません。

なぜ一般化されないのか?
どこに課題があったのか?

今となってはわかりませんが、
LiveHologramはそのホロポーテーションの様なシステムを安価な機材で自分たちで実現しようとして開発スタートしたプロジェクトです。





2019年9月
デプスカメラであるAzure Kinect Developer Kit (DK)が2019年7月に米マイクロソフト社から発売されました。
AzureKinectDKには前世代のKinectV2と違い、オーディオケーブルを使った複数台外部同期(External Sync)が可能という特徴があります。
弊社で試しに購入した3台が僕の手元にあったので、手始めに同期機能とキャリブレーションによる位置合わせ(Registration)を試してみました。



2019年12月
特に何も考えずに点群データを別PCに対して素直に送受信してみました。
想定していた通り通信速度がでません。



2020年1月
とある案件に採用された際の動画です。
4台のデプスカメラを使用しましたが、この時点では大部分をCPU上で計算しており、計算負荷や非効率なデータ圧縮、通信上の制限によりローカルネットワーク上でしか速度がでないという課題を抱えていました。
レンダリングに関してもメッシュを生成しておらず、ポイントクラウドのみの表現だったのですが、コンテンツの内容的に小人サイズでよかったのでビジュアル的に大きな問題にはなりませんでした。



2020年4月
リアルタイムにメッシュを生成する技術の開発に入ります。
低解像度のメッシュ生成であればフレームレートがでています。



データを遠隔地に配信するという事を考慮せず、同一PC上でレンダリングするのであれば技術的に難しくはありません。
ポリゴンの法線情報を可視化してみました。



2020年5月
この頃からリアルタイム送受信に関しての研究・開発を始めました。
4台のデプスカメラからリアルタイムに生成されたメッシュデータを、いかに高速に圧縮し・低遅延で送信し、受信側で高速に復元するかについての試行錯誤を行っていた時期です。
こちらは同一PC上の別アプリに対して送受信してみた際の動画です。
時々メッシュが破綻するという不具合を抱えていました。



2020年6月
各デプスカメラから得られた生のデータにはノイズが含まれています。
そのままメッシュを生成し統合してもノイズが含まれていると最終的なビジュアルクオリティに影響がでます。
このノイズを取り除くデノイジング処理の開発をこの頃から開始しました。



CPU側で行っていた大部分の計算処理をGPUで行うようにコードを見直した結果、これまでより高密度・高精細なメッシュを生成できるようになりました。



2021年1月
スマートフォンのWebブラウザ上でリアルタイムにデータ受信し、3Dデータを復元してみました。
オンラインサーバーを介した通信時の遅延やデータサイズを考慮してメッシュのポリゴンを間引いた結果、輪郭がかなりガタガタになったのでこの方法は不採用となりました。



2021年6月
ルームスキャンした点群データをスマホのWebブラウザに対してリアルタイムに送信してみました。
データサイズが大きすぎてさすがにきついですね…



ビジュアルの模索。
・点群のみ
・メッシュと頂点色
・メッシュとテクスチャ貼り付け
と3パターンのデータを転送して比較してみました。

1つ目、点群データのみ

2つ目、メッシュと頂点色

3つ目、メッシュとテクスチャ張り付け



2021年7月
配信側も受信側を有線LANを使い上りも、下りも600Mbps以上の出ているオンラインの通信環境でどれだけの密度のメッシュを送受信できるのか試してみました。



2021年8月
デノイジングに対してのアプローチ方法を思いついたので実装をしてみました。
考え方としては「ポイントクラウドのエッジ部分の点群は密度が薄いというノイズの特徴を考慮して、点群の密度が薄くなっている箇所は削除する」というアルゴリズムを実装してみました。



2021年11月
デプスカメラから得られる生のデータ(2D)の段階でノイズを除去する際、適した画像処理を模索するトライアルアンドエラーは大変です。
様々な画像処理を効率よく短時間で行えるように、ノード式のGUIを開発しリアルタイムに組み合わせたりパラメータを変更できるようにしました。
結果、開発効率が何倍にも高速になりました。



画像処理をデノイジングの為だけに使うのではなく、カラー情報に対しても行う事でポストエフェクトをかける事が可能です。



2022年3月
これまで受信側での確認は小回りが利くWebブラウザで行っていました
Live Hologramはマルチプラットフォーム対応というコンセプトで開発を進めています。
手始めにiOSで受信できるアプリをUnityで開発しました。
下記はオンラインネットワークを介してiPhone上のWebブラウザとiPad Pro上のUnityアプリで同時に受信・復元を試してみた動画です。



2022年3月
4台のデプスカメラから生成されたメッシュの送信テスト。
オンラインを介したリアルタイム配信でも30fpsに近い速度が出ています。



もともとHoloportationライクなシステムを開発したいという目的だったので、やっとHoloLens2で受信できるようにアプリを開発しました。
オンラインを介した通信でまだ目標としている30FPSには届いていないように見えますが、初めてのHoloLens2への送受信テストとしては満足のいく結果が得られました。
よりSF感を出すために受信側の処理でホログラムのようなポストエフェクトをかけてみました。





ここからはもう少しLiveHologramの特徴やシステムの話をしていきます。



LiveHologramの処理の流れ
下記はHoloportationライクなシステムを実現する為の処理の流れを簡略した図です。

送信側ではセンシングデバイスによる人体のキャプチャを行い、リアルタイムに3Dモデルを生成しデータサイズを圧縮して送信します。
受信側では圧縮されたデータを受け取り、解凍して3Dモデルを復元します。
あとは復元された3Dモデルをヘッドマウントディスプレイ等の表示デバイスで描画をする。
これらの処理を毎フレーム33.33ミリ秒以内に完了できれば30FPS相当の速度がでるというのが大まかな仕組みで、遅延に関しては転送する際の通信環境によります。
別の方法として、センシングデバイスからの生のデータを送信して受信側で3Dモデルの生成を行うといった方法もありますが、それにはいくつかのデメリットがあるのですが、主には大きく2つのデメリットがあります。

・データ転送時に必要のないデータが含まれる。
  =転送するデータサイズが大きくなる。

・受信側で3Dモデル生成する為の計算処理負荷がかかる。

  =受信側デバイスにある程度のスペックが必要。

上記の様な理由からLiveHologramでは送信側で3Dモデルを生成・データを圧縮といった方式を採用しています。



LiveHologramの構成図
LiveHologramはマルチプラットフォーム対応をコンセプトとしています。
下記の図にあるように、受信側ではPCだけでなくスマートフォンやタブレット、各XRデバイスに対応予定です。
現状ではiPhone、Android上のWebブラウザ、iPad Pro、Meta Quest2、 Hololens2、Magic Leap上のUnity製アプリにて動作確認ができています。
オンラインサーバーを介した配信だけでなく、ローカルネットワーク上での配信も同時に行えます。

LiveHologramでは現状、全ての通信にてTCP(ブラウザに対してはWebSocket)を採用しています。
理由としてはWebブラウザ対応や受信側にてより多くの通信環境に対応する為です。
通信にWebRTCなどのP2P通信を採用すればより低遅延で配信できるので将来的にはP2Pでも同時に配信出来るように拡張していきたいと検討しています。
今後Webブラウザで双方向UDP通信の仕組みとして標準対応になるWebTransport(QUIC)といった通信プロトコルに対応し、現状のTCP部分をUDPに置き換える事によってより低遅延・高速にデータを配信できるようにする予定です。


データサイズと推奨通信環境

LiveHologramでは現状4台のデプスカメラから生成された3Dモデルデータを送信する際の1フレームあたりデータサイズは約0.2〜0.8MBです。
その為、30FPSを保つには送信側の上りと受信側で下り共に48〜192Mbps程の速度が必要になります。
クオリティ設定をあげる事でより高精細な3Dモデルデータを配信できますが、1フレームあたりに数MBになるのと計算処理負荷が大きくなります。


今後と現状の取り組み
現在デプスカメラを8台に増やして、より死角の少ない機材構成でより穴のないメッシュをリアルタイムに生成出来るように開発中です。

見ての通りまだ完全に穴を塞ぎきれていません。
カメラの台数は十分なのですがレンダリングの手法を根本から検討しなおす必要がありそうです。
現在検討しているのは、マーチングキューブ法によるメッシュ生成です。
マーチングキューブを採用する事により、完全に穴のふさがった防水メッシュ(Watertight Meshes)を生成する事が出来ます。
ただし、リアルタイムに高精細なマーチングキューブを生成するには計算処理負荷が大きいのでGPUとマルチスレッドプログラミングによって高速に処理が行えるように研究・開発を行っています。



その昔、映画スターウォーズの中でレイア姫のホログラムのシーンがありました。
近年、VR, MRデバイスの進歩・普及がめざましい事もあり、そういったSF映画の中だけでしかありえなかった技術がそう遠くない未来、現実のものになると信じています。
ワントゥーテンはこの技術を使ってそういった近未来を実装していきます。



■ワントゥーテンでは中途採用募集中です!

1→10(ワントゥーテン)のカルチャーや、作品のクリエイティブに共感し、自身のより高い成長を求めている方からのご応募をお待ちしています!