15K Views
October 29, 24
スライド概要
2024/10/11に実施されたHololab Conference 2024のセッションスライドです。
■セッションアーカイブはこちら
ーーー
■公式HP
https://hololab.co.jp/
■公式Twitter
https://twitter.com/HoloLabInc
高速軽量点群エンジン Dawn 株式会社ホロラボ 上吉川大貴 2024/10/11 HoloLab Tech Showcase 2024
もくじ • Dawn の特徴と全体像 (p.3~p.5) • Dawn Converter の構成と機能 (p.6~p.9) • Dawn Renderer の構成と機能 (p.10~p.15) • Dawn に関する Q&A (p.16~p.17) 2
大規模な点群に対する要望 • 数億点規模、ファイルサイズ10GB規模の点群を扱いたい • リアルタイムレンダリングで描画したい • AR/VR グラス・モバイル端末等の低スペックデバイスで見たい • クラウドやサーバー上に点群を置いたまま見たい • 特定のゲームエンジンによらずに点群を描画したい これらの要望を満たす点群描画システムが欲しい 高速軽量点群エンジン Dawn を開発 3
Dawn の特徴 高い圧縮率 テキスト形式や無圧縮の las 形式の点群に対して、1/10~1/20程度のファイルサイズ 軽量な描画 100億点の点群をスマホで閲覧可能なほどの軽量さ ストリーミング配信 ローカルファイルだけでなく、クラウド・自社サーバーから点群をストリーミング可能 巨大なファイルを事前に視聴端末に配布する必要がない ライブラリとしての使用 既存アプリケーションに点群描画ライブラリとして組み込み可能 4
Dawn のシステム全体図 点群ファイル (las, laz, e57, 等) Dawn Converter • 描画に適した構造化 • データ圧縮 クラウド Dawn 用 点群ファイル OR ローカル Dawn 用 点群ファイル Dawn Renderer 5
Dawn Converter の役割 既存の点群ファイルを Dawn 用のフォーマットに変換する。 1. 描画に適した構造化 レンダラーで描画しやすいよう、八分木構造を作成する。 2. データの圧縮 点群の情報を圧縮してデータサイズを小さくする。 Draco 圧縮を使用し、ZIP 等の汎用圧縮よりも非常に圧縮率が高い。(1/10~1/20程度) 非可逆圧縮であるが、圧縮時の許容誤差を実寸サイズで指定可能。 6
Dawn Converter の構成図 Dawn Converter 点群ファイル (las, laz, e57, 等) 許容誤差の指定 (例: 5mm) Octree Builder 八分木の構築 八分木 ノード 点群 Draco Encoder データ圧縮 Dawn 用 点群ファイル ノード 圧縮点群 7
ノードの八分木 (octree) 構造 一つの立方体領域をノードと呼んでおり、それぞれ内部 に点群を持つ。 ノードを X, Y, Z それぞれ半分に分割し、再帰的に子ノー ドを持つ木構造を作成する。 大きなノードは粗い点群、小さいノードは詳細な点群を 持ち、描画時に LOD (Level of Detail) の役割を果たす。 Level 0 (Root) Level 1 8
Dawn Converter の動作環境 Rust でコマンドラインツールとして実装。 Windows/Mac/Linux で実行可能 ローカルマシンだけでなく、クラウドのインスタンス上でも実行可能。 9
Dawn Renderer の役割 点群を視聴する端末で動作し、Dawn Converter で 作成した点群ファイルを描画する。 描画の仕組みはゲームエンジンによらないため、 各種ゲームエンジンや Web でも原理的には動作可 能。 現在、Unity で実装したものは実用しており、実案 件での使用実績あり。 社内では Unity 用のライブラリとしてパッケー ジしてある。 10
Dawn Renderer の構成図 Point Budget (描画点数) カメラ (位置・方向・視野角) Dawn Renderer Node Selector 視野に応じた 八分木ノード選択 Point Loader ノードの 圧縮点群をロード Shader 点群を描画 クラウド Dawn 用 点群ファイル OR ローカル Dawn 用 点群ファイル キャッシュ キャッシュ データ 11
Dawn Renderer の原理 (1) 1. 描画点数を設定可能 マシンスペックに応じて、描画する点の数 (Point Budget) を指定可能。 メモリ使用量や描画負荷がほぼ一定になる。 2. 視野に応じたロードと描画 見えている範囲の点群のみをロードする。 ネットワーク経由のストリーミングでも、見える範囲だけをダウンロード。 距離に応じてロードする点群の粗さ (八分木のノードのレベル) を自動的に決定する。 12
Dawn Renderer の原理 (2) 真上から見た八分木ノードとカメラ視野 13
Dawn Renderer の原理 (3) 3. 低スペックマシン用の軽量な描画処理 3.1 低解像度での描画 スマホは画面のピクセル密度が大きく、解像度を下げても違和感が出にくいことを利用。 3.2 複数フレームでの描画の分割 複数フレームに分けて点群を描画し、1フレーム当たりの描画点数を大幅に削減。 800万点を4フレームに分割描画する場合、1フレームの描画は200万点となる。 残りの600万点は、過去の3フレームの描画結果を再利用して画面に重ねる。 14
Dawn Renderer の原理 (4) (例) 4フレーム分割描画で描画点数は1/4 + = 現在のフレームで 描画した点群 過去3フレームの 描画結果のテクスチャ カメラの移動差分を 考慮して重ねる 次フレームのためにテクスチャとして保持 15
Q&A (1) Q1. Web ブラウザで見ることができるか? A1. Unity 版とは別に試験的な Web 版の実装で動作することは確認した。 Q2. Unreal Engine で使えるか? A2. 現時点では Unreal Engine 版は作っていない。強い要望や予算次第では検討する。 Q3. ホロラボの他製品 (mixpace, torinome) との連携はあるか? A3. 現状はまだない 16
Q&A (2) Q4. Dawn を OSS にする予定はあるか? A4. OSS化やライブラリ単体としての公開はしない予定。現状は個別の案件や事例ごとに対 応。知見や事例が集まれば製品アプリケーションとして販売するなど検討。 Q5. Quest などでの VR 機器単体の動作するか? A5. 検証中。スマホでの軽量描画と同じ仕組みで動くと思うが、実用に耐えうる性能が出る かなど課題はある。 Q6. Apple Vision Pro で使えるか? A6. 現状の Unity 版がそのままでは動作しないため、すぐにはできないが対応したい。 17
ご清聴ありがとうございました