Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
軽率にWebARアプリでImmersalによるVPSを実装する / localization ...
Search
にー兄さん
August 20, 2022
Technology
2.6k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
軽率にWebARアプリでImmersalによるVPSを実装する / localization using immersal in a webar application
VPS座談会でのLT資料です
にー兄さん
August 20, 2022
More Decks by にー兄さん
See All by にー兄さん
ついにAuraも登場したのでJetpack XR SDKについて今一度語りたい / i wanna talk about xreal aura
drumath2237
0
31
『Ground Truth: How We Create Geometrically Accurate Reconstructions (Niantic Spatial Blog)』 を読む / read Ground Truth: How We Create Geometrically Accurate Reconstructions
drumath2237
0
72
この時代にOSS開発に向き合ってみる / face the oss development in this era
drumath2237
0
55
プログラマの職能が代替可能になりつつあるこの時代でプログラムと向き合う修行を積む / dedicating myself to the discipline of programming
drumath2237
0
100
個人的3D Gaussian Splattingニュースをご紹介 / sharing 3d gaussian splatting news
drumath2237
0
630
Jetpack XR SDKから紐解くAndroid XR開発と技術選定のヒント / about-androidxr-and-jetpack-xr-sdk
drumath2237
1
820
XRエンジニアの視点から XRのイマと社会実装の実現について考える / thinking-about-xr-popularization
drumath2237
0
94
軽率にプログラミング言語のシンタックスについて考えてみよう / lets-think-about-programming-lang-syntax
drumath2237
0
140
エンジニアが軽率に趣味から始める、OSS貢献を軸とした個人活動 / oss-contribution-as-a-hoby-project
drumath2237
0
110
Other Decks in Technology
See All in Technology
RapidCopy2 Matrix I/Oエンジンによるファイルコピーソフトウェアの設計と実装
kengosawa2
1
190
型落ちシンクライアント端末のPoEモジュールを自作したかった話
logica0419
0
150
【CEDEC2026】Creative Approaches to Localizing the Dialects and Unique Speech of Umamusume: Pretty Derby Characters in English
cygames
PRO
4
26k
生成 AI の基礎 〜 サンプル実装で学ぶ基本原理
enakai00
7
4.6k
Kiro入門|仕様駆動開発で変わるAI時代の開発スタイル
cmkudo
0
290
コーチングの奥義 何もしないテクニック
jinwatanabe
0
140
AIに持続⼒を与える 判断の⻑期記憶設計
eiei114
1
500
Rust×eBPFでEDRっぽいものをつくる
sunlife3
2
690
コネクションをピン留めさせずに SELECTクエリのタイムアウトを設定した話
codmoninc
0
190
ソフトウェアサプライチェーンの構造的リスクとコンテナ環境の保護
kyohmizu
5
760
RelayerというPHPのフレームワークを作った
polidog
PRO
0
100
AI for Science時代を切り開く、政府の次世代HPC戦略の展望
gpuunite_official
0
150
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
410
GraphQLとの向き合い方2022年版
quramy
50
15k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
490
WENDY [Excerpt]
tessaabrams
11
39k
Claude Code のすすめ
schroneko
67
230k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
900
Ruling the World: When Life Gets Gamed
codingconduct
0
310
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
280
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
390
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
260
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Transcript
軽率にWebARアプリでImmersal によるVPSを実装する にー兄さん(@ninisan_drumath) VPS開発座談会
発表資料は公開します 内容はすべてSNS共有OK!
にー兄さん(@ninisan_drumath) - 筑波大学 情報科学類 - HoloLab inc.アルバイト - Microsoft学生アンバサダー -
Iwaken Lab. Unity・WebAR・VPSが興味領域 Project TSUin-MI: 「つくば市をARネイティブな街にする」が目標 愛猫→
アジェンダ 1. 開発したもの 2. 実現プロセス 3. おわりに
開発したもの
WebAR×Immersalの試行 WebブラウザからWebARアプリを起動して Immersalによる位置合わせを実行 サーバーサイド位置合わせによって実現 WebARはBabylon.jsというライブラリで実装 GitHubで公開してます https://github.com/drumath2237/immersal-babylon-webxr
経緯やモチベーション (2021年HoloLens Edge上での動作を確認) 2021年10月頃に調査を開始 色々進展があったが最後まで実装しきれず中断 2022/7/1にImmersalのdiscordでひっそりアナウンス The WebAR mode has
now been fixed on the Dev Portal. Works on Android Chrome, and you should have the chrome://flags/#webxr-incubations set to 'enabled'. Sample code: view page source for view.html 再チャレンジするか......→できた
開発環境 - Immersal REST API(v1.16.1) - Babylon.js 5.x - Vite
- TypeScript - Chrome for Android (Google Pixel 4a 5G)
位置合わせをする手順 1. カメラ画像などの情報を取得 2. REST APIの仕様に沿ってデータ変換 3. REST APIへのリクエスト 4.
レスポンスに沿って座標変換
情報を取得する
位置合わせに必要な情報 Immersal REST API(後述) のLocalize Imageで必要な情報 • カメラ画像 • カメラ内部パラメータ
• Immersal開発者トークン • マップID配列 https://immersal.gitbook.io/sdk/api-documentation/rest-api#localize-image-1
位置合わせに必要な情報 Immersal REST API(後述) のLocalize Imageで必要な情報 • カメラ画像 • カメラ内部パラメータ
• Immersal開発者トークン • マップID配列 ブラウザ上で取得するのが難しかった (セキュリティ上の問題)
Raw Camera Access WebXR Device APIに含まれる機能の一つ カメラ画像の取得が可能 現在実験的機能なので、 ARCoreが対応したデバイスの Chrome
for Androidでしか動作しない 加えてWebXR Incubationが有効である必要が ある 詳しくはZennにまとめました https://zenn.dev/drumath2237/articles/52d62638c7d06f
画像データと内部パラメータの取得 カメラ画像の取得は そのままAPIが利用できる WebGLTextureとして取得できる 内部パラメータは右のような計算式で 取得 let viewerPose = xrFrame.getViewerPose(xrRefSpace);
for (const view of viewerPose.views) { if (view.camera) { const cameraTexture = binding.getCameraImage(view.camera); } } function getCameraIntrinsics(projectionMatrix, viewport) { const p = projectionMatrix; let u0 = (1 - p[8]) * viewport.width / 2 + viewport.x; let v0 = (1 - p[9]) * viewport.height / 2 + viewport.y; let ax = viewport.width / 2 * p[0]; let ay = viewport.height / 2 * p[5]; let gamma = viewport.width / 2 * p[4]; }
画像データの変換
現状整理 Raw Camera Accessで 取得できる画像はWebGLTexture REST APIへのリクエストには Base64エンコードされたPNG画像が欲しい
逆算して考える Base64エンコードされたPNG画像にはPNG画像が必要 PNG画像を生成するにはピクセル情報が必要 ピクセル情報を取得るするにはWebGLでなんとかしなきゃ(雑
Immersal本家の実装 1. three.jsのエンジンからWebGLコンテキストを取得 2. WebGLコンテキストにWebGLTextureとFrameBufferをバインド 3. FrameBufferにテクスチャを紐づける 4. この状態でreadPixels 5.
RGBA値が格納されたUint8Arrayを取得 6. WebWorker上でpngエンコード(UPNGというライブラリを使用)
自分の実装 WebGL APIにぎょっとしたので別の方法で試す 1. Babylon.jsのRawTextureを生成 2. RawTextureのフィールドに(強引に)WebGLTextureを代入 3. RawTexture.readPixelでUint8ClampedArrayを生成 4.
ImageDataへ変換 5. canvasへ描画してPNG・Base64エンコード 本家のほうがスマートかも
REST APIへのリクエスト
API仕様に基づいてリクエストするだけ ドキュメントを見ながら必要情報を揃える エンドポイントへPOST https://api.immersal.com/localizeb64
レスポンス - マップID - 位置 - 回転行列 が返ってくる リクエストが不適切な場合はerrorだけ 適切なリクエストだけど位置合わせに失敗したら
successがfalse ゼロベクトルと単位行列が返ってくる
無事リクエストが通った
座標変換
2種類の座標変換 - Immersal座標系 to Babylon.jsの座標系 - マップ座標系 to ワールド座標系
ImmersalとBabylon.js Immersal Babylon.js https://immersal.gitbook.io/sdk/tutorials/how-to-map/custom-im ages#rotation v1.14→v1.15の間で破壊的変更
マップ座標 to ワールド座標 Immersal マップ座標系の カメラの姿勢 カメラ座標系の マップの姿勢 ワールド座標系の マップの姿勢
レスポンスから変換行列を作成 逆変換を計算 リクエスト時のカメラの姿勢を適用 Map Physical World
座標系変換の手動テストツール
座標系変換の手動テストツール スマホを使わずにテストできるツール レスポンスデータをとっておく 姿勢行列の変換処理を実装して その挙動をビジュアルで確認 Babylon.jsのDebugLayerで 実際の数値も確認 トライアンドエラーの敷居を 下げる工夫
位置合わせができた
おわりに
展望・まとめ - WebARでImmersal位置合わせができた - もっといろいろ実験したい - WebARでPlaybackできる機能 - 他のVPSでの検証(PretiaとかGeospatial APIとか)
- 一般的な環境でも動作してほしい - WebXR Device API以外のWebAR VPSに劣る点
参考文献 Raw Camera Accessのexplaner https://github.com/immersive-web/raw-camera-access/blob/main/explainer.md Raw Camera Accessについての記事 https://zenn.dev/drumath2237/articles/52d62638c7d06f Immersal座標系に関するドキュメント
https://immersal.gitbook.io/sdk/tutorials/how-to-map/custom-images デモプロジェクト https://github.com/drumath2237/immersal-babylon-webxr