6.6K Views
May 18, 23
スライド概要
2023/4/21に実施されたHololab Conference 2023のセッションスライドです。
■セッションアーカイブはこちら
https://youtube.com/playlist?list=PLcIuMEVR3eYfERlJDNtlGCdLKFFBjC9Ap
ーーー
■公式HP
https://hololab.co.jp/
■公式Twitter
https://twitter.com/HoloLabInc
Project Spirare: 3D コンテンツを記述する 汎用フォーマットの定義と実装 株式会社ホロラボ 古田 裕介 上吉川 大貴
自己紹介 古田裕介 たるこす (@tarukosu) 株式会社ホロラボ R&D チーム Researcher 2
自己紹介 上吉川 大貴 (Kamiyoshikawa Hiroki) 株式会社ホロラボ ソフトウェアエンジニア, R&D チーム Copyright© HoloLab Inc. 2022 All rights reserved 3
Project Spirare とは Copyright© HoloLab Inc. All rights reserved 4
Project Spirare とは Project Spirare は 3D コンテンツの記述を目的とした汎用フォーマットを定義、実装する ホロラボ社内のプロジェクト POML(ポムル)というファイルフォーマットを定義 <poml> <scene> 以下の特徴をもつ <model src="./Whale.glb"> • XML ベースのフォーマット </model> • 3D モデル、画像、動画などのデータの空間配置を定義可能 </scene> </poml> • 特定のエンジンやアプリケーションに非依存 • 実行時にロード可能 POML の例 Copyright© HoloLab Inc. All rights reserved 5
Project Spirare で何ができるか • 3D モデル、画像、動画を空間に配置できる • 緯度、経度、高さ(楕円体高)での地理的な位置指定 • VPS (Visual Positioning System) などのマップ内位置指定 • さまざまなアプリケーションで実行時にロードできる Web ブラウザ Unity 製 AR アプリケーション Copyright© HoloLab Inc. All rights reserved Unity 製 VR アプリケーション 3D都市モデルおよびPLATEAUオルソはProject PLATEAU で提供されるデータを利用 (https://www.mlit.go.jp/plateau/) 地形データは、測量法に基づく国土地理院長承認(使用)R3JHs 778を得て使用 6
POML とデータの関係 3D モデル、画像、動画などの個別のデータ自体は POML には含まれない POML ファイルとデータファイルを組み合わせて 3D コンテンツデータとなる 3D コンテンツデータ POML モデルデータ (.glb) 画像データ (.png, .jpg) <poml> <scene> <model src="./Whale.glb"> </model> <image src="./HoloLab.png"> </image> </scene> </poml> Copyright© HoloLab Inc. All rights reserved 7
POML の作成と表示 POML を活用するためには、POML を作成する方法と POML を表示するアプリケーションが必要 Unity アプリケーション 手書き 3D コンテンツデータ コード(プログラム)で生成 POML Web アプリケーション モデルデータ Web アプリケーション 画像データ Copyright© HoloLab Inc. All rights reserved 3D都市モデルおよびPLATEAUオルソはProject PLATEAU で提供されるデータを利用 (https://www.mlit.go.jp/plateau/) 地形データは、測量法に基づく国土地理院長承認(使用)R3JHs 778を得て使用 8
POML 記法について Copyright© HoloLab Inc. All rights reserved 9
POML 記法 (model タグ) model タグによって glb モデルを配置 <poml> <scene> <model src="./Burger.glb"> </model> </scene> </poml> src (データソース) で指定する URL は絶対パスでも可 <model src="http://example.com/Burger.glb"> </model> Copyright© HoloLab Inc. All rights reserved 10
POML 記法 (image タグ) image タグによって画像を配置 <poml> <scene> <image src="./HoloLab.png"> </image> </scene> </poml> Copyright© HoloLab Inc. All rights reserved 11
POML 記法 (video タグ) video タグによって動画を配置 <poml> <scene> <video src="./boat.mp4"> </video> </scene> </poml> Copyright© HoloLab Inc. All rights reserved 12
POML 記法 (text タグ) text タグによってテキストを配置 <poml> <scene> <text text="Spirare" font-size="0.1m"> </text> </scene> </poml> Copyright© HoloLab Inc. All rights reserved 13
POML 記法 (element タグ) element タグによって空のオブジェクトを配置 <poml> <scene> <element> </element> </scene> </poml> Copyright© HoloLab Inc. All rights reserved 14
POML 記法 (position アトリビュート) position アトリビュートで位置を指定 • 座標系は Z-up 右手系 • 指定がない場合は 0,0,0 <poml> <scene> <model src="./Burger.glb"> </model> <model src="./Apple.glb" position="0,0,1"> </model> </scene> </poml> Copyright© HoloLab Inc. All rights reserved 15
POML 記法 (親子関係) 入れ子構造で親子関係を指定 <poml> <scene> <model src="./Burger.glb"> </model> <element position="0,0,1"> <model src="./Apple.glb"> </model> <model src="./GreenApple.glb" position="0,0,1"> </model> </element> </scene> </poml> Copyright© HoloLab Inc. All rights reserved 16
POML 記法 (地理配置) geo-reference タグで緯度・経度・高さ(楕円体高)を指定 <poml> <scene> <model src="./Whale.glb"> <geo-reference latitude="35.68143170" longitude="139.76578530" ellipsoidal-height="51.55"> </geo-reference> </model> </scene> </poml> Copyright© HoloLab Inc. All rights reserved 3D都市モデルおよびPLATEAUオルソはProject PLATEAU で提供されるデータを利用 (https://www.mlit.go.jp/plateau/) 地形データは、測量法に基づく国土地理院長承認(使用)R3JHs 778を得て使用 17
POML 記法 (空間配置) space-reference タグで空間ID(マップID)を指定 <poml> <scene> <space-reference space-id="77976"> </space-reference> <model ar-display="none" src="./77976-LivingRoom-tex.glb"> </model> <model position="0.34 0.54 0.12" src="./Fish.glb"> </model> </scene> </poml> Copyright© HoloLab Inc. All rights reserved 3D都市モデルおよびPLATEAUオルソはProject PLATEAU で提供されるデータを利用 (https://www.mlit.go.jp/plateau/) 地形データは、測量法に基づく国土地理院長承認(使用)R3JHs 778を得て使用 18
Unity 版 Spirare アプリケーション Copyright© HoloLab Inc. All rights reserved 19
POML の作成と表示 Unity アプリケーション 手書き 3D コンテンツデータ コード(プログラム)で生成 POML Web アプリケーション モデルデータ Web アプリケーション 画像データ Copyright© HoloLab Inc. All rights reserved 3D都市モデルおよびPLATEAUオルソはProject PLATEAU で提供されるデータを利用 (https://www.mlit.go.jp/plateau/) 地形データは、測量法に基づく国土地理院長承認(使用)R3JHs 778を得て使用 20
Unity 版アプリケーションの動作パターン • ロード方式 • Web サーバー • ローカル • 表示方式 • マップ内表示(2D, VR) • AR • 位置合わせ方式 (AR の場合のみ) • Immersal • Vuforia Area Target • ARCore Geospatial API Copyright© HoloLab Inc. All rights reserved 21
Unity 版アプリケーションの動作パターン • ロード方式 • Web サーバー • ローカル • 表示方式 • マップ内表示(2D, VR) • AR • 位置合わせ方式 (AR の場合のみ) • Immersal • Vuforia Area Target • ARCore Geospatial API Copyright© HoloLab Inc. All rights reserved 22
POML のロード方式 a. Web サーバーからダウンロード b. ローカルファイルを読み込み デバイス Unity アプリケーション a. Web サーバーからダウンロード Web サーバー POML b. ローカルファイルを読み込み POML Copyright© HoloLab Inc. All rights reserved 23
Unity 版アプリケーションの動作パターン • ロード方式 • Web サーバー • ローカル • 表示方式 • マップ内表示(2D, VR) • AR • 位置合わせ方式 (AR の場合のみ) • Immersal • Vuforia Area Target • ARCore Geospatial API Copyright© HoloLab Inc. All rights reserved 24
マップ内表示 Cesium for Unity を利用し、3D マップ内にコンテンツを表示 Copyright© HoloLab Inc. All rights reserved 3D都市モデルおよびPLATEAUオルソはProject PLATEAU で提供されるデータを利用 (https://www.mlit.go.jp/plateau/) 地形データは、測量法に基づく国土地理院長承認(使用)R3JHs 778を得て使用 25
マップ内表示 (VR) Meta Quest を利用した VR 表示 Copyright© HoloLab Inc. All rights reserved 3D都市モデルおよびPLATEAUオルソはProject PLATEAU で提供されるデータを利用 (https://www.mlit.go.jp/plateau/) 地形データは、測量法に基づく国土地理院長承認(使用)R3JHs 778を得て使用 26
AR 表示 • AR の場合、3D マップの表示は不要 • かわりに現実の位置との位置合わせが必要 Copyright© HoloLab Inc. All rights reserved 27
Unity 版アプリケーションの動作パターン • ロード方式 • Web サーバー • ローカル • 表示方式 • マップ内表示(2D, VR) • AR • 位置合わせ方式 (AR の場合のみ) • Immersal • Vuforia Area Target • ARCore Geospatial API Copyright© HoloLab Inc. All rights reserved 28
AR 表示での位置合わせ POML には配置する位置が記述されているだけ 現実との位置合わせは Unity アプリケーション側で実装されている <poml> <scene> <model src="./Whale.glb"> <geo-reference latitude="35.68143170" longitude="139.76578530" ellipsoidal-height="51.55"> </geo-reference> </model> </scene> </poml> <poml> <scene> <space-reference space-id="77976"> </space-reference> <model ar-display="none" src="./77976-LivingRoom-tex.glb"> </model> <model position="0.34 0.54 0.12" src="./Fish.glb"> </model> </scene> </poml> Copyright© HoloLab Inc. All rights reserved 29
Immersal による位置合わせ アプリ実行時にマップIDを指定してマップデータをロード コンテンツの配置 Copyright© HoloLab Inc. All rights reserved 30
Vuforia Area Target (VAT) による位置合わせ VAT のマップデータ (.xml, .dat) はデバイス内に配置 アプリ実行時にマップデータをロード コンテンツの配置 Copyright© HoloLab Inc. All rights reserved 31
ARCore Geospatial API による位置合わせ Geospatial API を利用し、端末の緯度・経度・楕円体高を取得 コンテンツの配置 Copyright© HoloLab Inc. All rights reserved 3D都市モデルおよびPLATEAUオルソはProject PLATEAU で提供されるデータを利用 (https://www.mlit.go.jp/plateau/) 地形データは、測量法に基づく国土地理院長承認(使用)R3JHs 778を得て使用 32
Web 版 Spirare アプリケーション Copyright© HoloLab Inc. All rights reserved 33
POML の作成と表示 Unity アプリケーション 手書き 3D コンテンツデータ コード(プログラム)で生成 POML Web アプリケーション モデルデータ Web アプリケーション 画像データ Copyright© HoloLab Inc. All rights reserved 3D都市モデルおよびPLATEAUオルソはProject PLATEAU で提供されるデータを利用 (https://www.mlit.go.jp/plateau/) 地形データは、測量法に基づく国土地理院長承認(使用)R3JHs 778を得て使用 34
Web 版 Spirare アプリケーション • 機能 • POML の編集 • POML の表示 (2D, WebAR) • 動作タイプ • ブラウザ版アプリケーション • デスクトップ版アプリケーション • 3D エンジンとして Babylon.js を利用 POML 編集画面 Copyright© HoloLab Inc. All rights reserved 3D都市モデルおよびPLATEAUオルソはProject PLATEAU で提供されるデータを利用 (https://www.mlit.go.jp/plateau/) 地形データは、測量法に基づく国土地理院長承認(使用)R3JHs 778を得て使用 35
ブラウザ版アプリケーション • Web ブラウザ上で動作 • 編集データは Web サーバー内に保存される POML選択画面 POML 編集画面 Copyright© HoloLab Inc. All rights reserved 36
ブラウザ版アプリケーションでの編集と表示 Web サーバー POML POML PC デバイス ブラウザ版アプリケーション Unity アプリケーション Copyright© HoloLab Inc. All rights reserved 3D都市モデルおよびPLATEAUオルソはProject PLATEAU で提供されるデータを利用 (https://www.mlit.go.jp/plateau/) 地形データは、測量法に基づく国土地理院長承認(使用)R3JHs 778を得て使用 37
ブラウザ版アプリケーションでの編集と表示デモ Copyright© HoloLab Inc. All rights reserved 3D都市モデルおよびPLATEAUオルソはProject PLATEAU で提供されるデータを利用 (https://www.mlit.go.jp/plateau/) 地形データは、測量法に基づく国土地理院長承認(使用)R3JHs 778を得て使用 38
デスクトップ版アプリケーション • PC 上で動作 • 外部サーバーとの接続なし • 編集データはローカル PC 内に保存される POML選択画面 POML 編集画面 Copyright© HoloLab Inc. All rights reserved 39
デスクトップ版アプリケーションでの編集と表示 デスクトップ版アプリケーションから直接 POML の配信が可能 PC デバイス デスクトップ版アプリケーション Unity アプリケーション POML Copyright© HoloLab Inc. All rights reserved 40
デスクトップ版アプリケーションでの編集と表示デモ Copyright© HoloLab Inc. All rights reserved 41
WebAR デモ 8th Wall, Lightship VPS を利用 Copyright© HoloLab Inc. All rights reserved 42
コードでの POML 作成 Copyright© HoloLab Inc. All rights reserved 43
POML の作成と表示 Unity アプリケーション 手書き 3D コンテンツデータ コード(プログラム)で生成 POML Web アプリケーション モデルデータ Web アプリケーション 画像データ Copyright© HoloLab Inc. All rights reserved 3D都市モデルおよびPLATEAUオルソはProject PLATEAU で提供されるデータを利用 (https://www.mlit.go.jp/plateau/) 地形データは、測量法に基づく国土地理院長承認(使用)R3JHs 778を得て使用 44
コードでの POML 作成 • 既存データを POML に加工したい場合、 コードで生成するのが便利 • POML は XML ベースのため、 React などの Web 用のライブラリを 利用可能 • 事前生成やリクエスト時の動的生成が 可能 React を利用した POML 作成 Copyright© HoloLab Inc. All rights reserved 45
Spirare を利用したデモコンテンツ Copyright© HoloLab Inc. All rights reserved 46
Google マイマップの地点表示 Copyright© HoloLab Inc. All rights reserved 47
河川監視カメラの表示 東京都建設局の「河川監視カメラ位置情報一覧データ」を利用 (https://catalog.data.metro.Tokyo.lg.jp/dataset/t000014d0000000028) クリエイティブ・コモンズ 表示(CC BY)(https://creativecommons.org/licenses/by/4.0/deed.ja) Copyright© HoloLab Inc. All rights reserved 3D都市モデルおよびPLATEAUオルソはProject PLATEAU で提供されるデータを利用 (https://www.mlit.go.jp/plateau/) 地形データは、測量法に基づく国土地理院長承認(使用)R3JHs 778を得て使用 48
避難所の表示 東京都提供の「避難所、避難場所データ オープンデータ」を利用 (https://catalog.data.metro.Tokyo.lg.jp/dataset/t000003d0000000093) クリエイティブ・コモンズ・ライセンス表示 4.0 国際(https://creativecommons.org/licenses/by/4.0/legalcode.ja ) Copyright© HoloLab Inc. All rights reserved 49
洪水による浸水想定データの表示 Project PLATEAU で提供されている「洪水浸水想定区域(計画規模)」のデータと3D都市モデルを利用 (https://www.mlit.go.jp/plateau/) Copyright© HoloLab Inc. All rights reserved 50
登記所備付地図データの表示 「登記所備付データ品川区」(法務省)(https://geospatial.jp/ckan/dataset/houmusyouchizu-2022-1-700)を加工して利用 Copyright© HoloLab Inc. All rights reserved 51
スクリプト機能 Copyright© HoloLab Inc. All rights reserved 52
動的なコンテンツを作るには 3D モデルの特定のアニメーションであれば glb のアニメーションで表現可能 ユーザーとのインタラクションや複雑な制御をしたい場合 スクリプト(プログラム)が不可欠 Copyright© HoloLab Inc. All rights reserved 53
スクリプト機能の条件 Project Spirare におけるスクリプトは以下の条件を満たす必要がある • 特定のゲームエンジンに非依存 • 動的ロード可能 Copyright© HoloLab Inc. All rights reserved 54
スクリプト機能の条件 • 特定のゲームエンジンに非依存 • 動的ロード可能 上記条件を満たすため、 WebAssembly を採用 Copyright© HoloLab Inc. All rights reserved 55
WebAssembly (Wasm) とは • W3C が策定するオープンな実行可能バイナリ形式 • 仮想命令セットアーキテクチャ • 様々なプラットフォームで動作する低レイヤな中間表現 • Rust, C++, Go, AssemblyScript, etc… からコンパイル可能 • 隔離環境内で安全に実行可能 • ポータブルで任意の環境での動作し、再コンパイルの必要なし Copyright© HoloLab Inc. All rights reserved 56
WebAssembly (Wasm) とは Wasm ソースコード コンパイル Wasm へのコンパイルに対応した任意の言語 • Rust • C++, C • Go • AssemblyScript • etc… バイナリ形式。 仮想のアーキテクチャの命令セット wat wasm を人間が読みやすいようにしたテキスト形式 Copyright© HoloLab Inc. All rights reserved 57
Wasm の動作環境 • Wasm ランタイム上で動作 ホストからメモリや関数を提供された中で動作。 アクセス制御等、安全な動作が可能 local.get 1 local.get 0 i32.add • ポータブル ランタイム上で動作するため、同じバイナリが ホスト環境 (OS/Web ブラウザ) によらず 任意の環境で動作が可能 有名な Wasm ランタイム の OSS • Wasmtime (https://wasmtime.dev/) • Wasmer (https://wasmer.io/) Wasm Host Wasm ランタイム ホスト環境 (OS/Web ブラウザ) Copyright© HoloLab Inc. All rights reserved 58
Wasm で動く Spirare コンテンツ1 Copyright© HoloLab Inc. All rights reserved 59
Wasm で動く Spirare コンテンツ1 Rust Host Wasm on_start get_element_by_id element change_anim_by_name get_element_by_id element on_update set_position set_rotation Copyright© HoloLab Inc. All rights reserved 60
Wasm で動く Spirare コンテンツ2 Copyright© HoloLab Inc. All rights reserved 61
Wasm で動く Spirare コンテンツ2 Rust Host Wasm on_update get_element_by_id element get_element_by_id element set_text set_text Copyright© HoloLab Inc. All rights reserved 62
Spirare API Wasm から POML の要素にアクセスするための API • • • • • POML の要素の取得 オブジェクトの位置・回転・スケールの取得・設定 テキスト要素の読み書き GLB モデルのアニメーション切り替え Spirare のイベントからのコールバック など Copyright© HoloLab Inc. All rights reserved 63
Spirare API 時計のサンプルの呼び出しシーケンス Host → Wasm の呼び出し Host • on_start • on_update Wasm on_update get_element_by_id element Wasm → Host の呼び出し • • • • • get_element_by_id element get_element_by_id get_position set_position get_text set_text set_text set_text Copyright© HoloLab Inc. All rights reserved 64
WASI (WebAssembly System Interface) Wasm がホスト環境のシステムコールと同等の機能にアクセスするための仕様 Wasm OS のネイティブのシステムコールに直接アクセスできない • I/O アクセス WASI • タイマー • 乱数 • etc… system call Host Wasm ランタイム POSIX に似せたインターフェース仕様 WebAssembly と同じくオープンな仕様として策定が進行中 https://github.com/WebAssembly/WASI ホスト環境 (OS/Web ブラウザ) Copyright© HoloLab Inc. All rights reserved 65
WASI の例 (例) 時刻取得 Wasm は WASI から時刻を取得する。 各OSの時刻取得のシステムコールに直接アクセスはできない。 • clock_res_get システムの時刻の精度を取得 • clock_time_get システムの時刻を取得 Rust など、WASI へのコンパイルに対応したコンパイラを使うと、自動的に呼び出してくれる。 (cargo build --target wasm32-wasi) Copyright© HoloLab Inc. All rights reserved 66
C# で Spirare 用の Wasm 作成 C# から Spirare 用の Wasm を作る実験中 C# C# を WASI を使った Wasm にビルドするツール dotnet-wasi-sdk https://github.com/SteveSandersonMS/dotnet-wasi-sdk Copyright© HoloLab Inc. All rights reserved 67
オープンソース化 Copyright© HoloLab Inc. All rights reserved 68
オープンソース化 2023/4/21 公開 • project-spirare-docs • https://github.com/HoloLabInc/project-spirare-docs • POML 仕様のドキュメント • ProjectSpirare-for-Unity • https://github.com/HoloLabInc/ProjectSpirare-for-Unity • Unity 用の表示ライブラリ、表示アプリケーション • spirare-babylonjs • https://github.com/HoloLabInc/spirare-babylonjs • Web 用の編集表示ライブラリ、編集表示アプリケーション 今後公開予定 • Spirare 用 WebAssembly の Spirare API 仕様 • Spirare 用 WebAssembly 作成のためのライブラリ Copyright© HoloLab Inc. All rights reserved 69