🧭
Immersal VPSをWebARで使う
概要
-
VPS(Visual Positioning Service/System)として有名なImmersalがWebARのサンプルを公開していたのでその使い方を紹介します
-
まずはDeveloper Portal上で見る方法を紹介したのち、カスタマイズする方法まで紹介します
-
あまり大々的に告知されていませんが、Immersal Discordで発表が行われました
immersal-mikko — 2022/07/01
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 🙂
- 2022年7月現在Android端末のChromeのみで動作します
- 今回、Immersalへの開発者登録や点群の撮影については説明しないので、よくわからない方は下記の記事を参考にしてください
サンプルからひも解くImmersal
Developer PorrtalでWebARを体験する
- まずImmersalアプリを使って点群を撮影します
- 次にAndroid端末のwebxr-incubationsを有効にします
- まずChromeで chrome://flags/#webxr-incubationsを開きます
- 開けたら
WebXR Incubations
をEnabled
に切り替えたのち、下部のRelaunch
を押してブラウザを再起動します
- ImmersalのDeveloper Portalを開き、先ほど撮影した点群のViewerを開きます
- Viewerが開いて点群が表示されたら
START AR
ボタンをタップします
- パーミッションを求められるので許可します
- しばらく待つとカメラ画像が表示されます
- カメラ画像が表示されない場合、端末が対応していない・設定に失敗しているなどの可能性があります
- ここで画面上をタップするとLocalizeが行われ、成功すると点群が正しい位置に表示されるようになります
Viewerをカスタマイズする
- 上記の例ではDevelopper Portalから見ることはできるものの、ほかの人に見てもらうことができません
- そこで、このViewerを外から使えるようにカスタマイズします
ソースコードの取得
- ViewerのURLに
view-source:
を先頭につけてソースコードを表示させます-
view-source:https://developers.immersal.com/view.html?0&999999&0
のような形になります
-
- これを
view.html
として保存します - 次にSDK設定のJSを取得します
-
https://developers.immersal.com/js/sdkconfig.js から
sdkconfig.js
を取得しjsフォルダ内に保存します
-
https://developers.immersal.com/js/sdkconfig.js から
- さらにjsフォルダ内に
pngworker.js
というファイルを作成し下記コードをコピペします
pngworker.js
importScripts('https://developers.immersal.com/js/UPNG.js', 'https://developers.immersal.com/js/pako.min.js');
onmessage = function(msg) {
const pixels = msg.data[0];
const width = msg.data[1];
const height = msg.data[2];
const png = UPNG.encodeLL([pixels], width, height, 1, 0, 8, 0);
postMessage(png);
}
- ファイル構成は下記のようになります
├── view.html
└── js
├── sdkconfig.js
└── pngworker.js
ソースコードの改造
- このままでは使えないため、一部のコードを変更していきます
- まず
sdkconfig.js
のBASE_URL
をhttps://developers.immersal.com/
に書き換えます
- var BASE_URL = versionBaseUrls[SDK_VERSION];
+ var BASE_URL = "https://developers.immersal.com/";
-
view.html
内で使っているcssやjsを読み込めるように修正します
view.html
<link type="text/css" rel="stylesheet" href="https://developers.immersal.com/css/main.css">
<script src="js/sdkconfig.js?v=1_16_1"></script>
<script src="https://developers.immersal.com/js/jquery-3.6.0.min.js"></script>
<script src="https://developers.immersal.com/js/js.cookie.min.js"></script>
- ImmersalのAPIを叩くためにトークンを使用します
- トークンはDeveloper Potalの
Private developer token
の部分に記載されています - 今回は簡単のためソースコード内にトークンを埋め込んでいます。公開環境では別の方法でトークンを渡し、トークン自体が漏れないようご注意ください
- トークンはDeveloper Potalの
js
- if (privacy == privacyTypes.PRIVATE) {
- token = Cookies.get('token');
- }
+ token = "developer-token";
-
これでソースコードの準備は完了です
- ローカルサーバや外部サービスに一通りのファイルをデプロイします
-
まずはPCで開いてみて点群が表示されることを確認します
- アドレス例:http://127.0.0.1:8887/view.html?0&99999&0
- 各パラメータの意味は下記のとおりです
- 1つ目:点群がprivateなら0、publicなら1
- 2つ目:MapID
- 3つ目:表示方法 0点群・1簡易モデル・2テクスチャ付きモデル
-
次にモバイル端末で開いてみて、Localizeがうまくいけば成功です。これで自前のサイトでImmersal+WebARが使えるようになります
-
view.html
のlocalize()
関数内でLocalize処理が行われています。ここをカスタマイズすることでローカライズ後に任意のオブジェクトを出現させるなど様々なことが可能になります -
このサンプルを利用してぜひ自分好みのコンテンツを作成してください
Discussion