Sausage Erectos X ブラウザだけでAR ── WebXRを使わずにARプレビューを実装した方法
AR プレビューのブラウザ実装──画面の中から現実世界へ
Sausage Erectosのカスタマイザーでは、デザインしたフィギュアをAR(拡張現実)で実寸大プレビューできる。この機能の技術的実装、テスト結果、そして未来のWebXR対応計画を記録する。
実装アプローチ:ネイティブAR vs Web AR
AR実装には大きく2つのアプローチがある:
ネイティブAR: ARKit(iOS) / ARCore(Android)
→ 高性能だがアプリインストールが必要
Web AR: WebXR API / model-viewer / Quick Look
→ ブラウザで完結するがデバイス制約がある
Sausage Erectosでは、ユーザーにアプリをインストールさせたくないという理由でWeb ARを選択した。具体的には、iOSではAR Quick Look(USDZ形式)、Androidではmodel-viewer(Scene Viewer経由)を使用する。
model-viewerライブラリとの比較
Googleが開発したmodel-viewerは、3DモデルのWeb表示とAR機能を提供するWebコンポーネントだ。
<model-viewer
src="model.glb"
ios-src="model.usdz"
ar
ar-modes="webxr scene-viewer quick-look"
camera-controls
auto-rotate>
</model-viewer>
当初model-viewerを採用したが、以下の理由でカスタム実装に切り替えた:
- カスタマイザーの3Dレンダリングと二重管理になる
- リアルタイムのパラメータ変更をmodel-viewerに反映するオーバーヘッド
- ARのトリガータイミングを細かく制御したい
結果として、Three.jsのシーンから直接glTF/USDZをエクスポートし、各プラットフォームのネイティブAR機能を呼び出す方式にした。
USDZのメタデータ設定
iOSのAR Quick LookはUSDZ形式のみを受け付ける。Three.jsのUSDZExporterでエクスポートする際、いくつかのメタデータ設定が品質に影響する。
import { USDZExporter } from 'three/addons/exporters/USDZExporter.js';
async function exportUSDZ(scene) {
const exporter = new USDZExporter();
const arraybuffer = await exporter.parse(scene);
const blob = new Blob([arraybuffer], { type: 'model/vnd.usdz+zip' });
return blob;
}
重要な設定:
- scale: フィギュアの実寸大表示のため、メートル単位で正確に指定。80mmのフィギュアなら0.08
- autoplay: アニメーション付きモデルの場合、AR表示時に自動再生するかどうか
- マテリアル: PBRマテリアルのみサポート。Three.jsのMeshStandardMaterialは直接変換可能
Androidでの互換性テスト結果
テストしたデバイスと結果:
デバイス OS Ver Scene Viewer WebXR
------------------------------------------------------
Pixel 7 14 OK OK
Galaxy S23 14 OK OK
Galaxy A54 13 OK 一部不安定
Pixel 4a 13 OK 非対応
OPPO Reno 7 12 OK 非対応
古めのXperia 11 表示遅延 非対応
Scene Viewerは比較的広いデバイスで動作するが、WebXR Device APIは最新デバイスでないと安定しない。現時点では、Scene Viewerをプライマリ、WebXRをフォールバックとしている。
パフォーマンス計測
AR表示のパフォーマンスを以下の指標で計測した:
指標 iOS (iPhone 14) Android (Pixel 7)
----------------------------------------------------------------
USDZエクスポート時間 800ms N/A
glTFエクスポート時間 200ms 200ms
AR起動までの時間 2.1秒 1.8秒
メモリ使用量増加 +45MB +60MB
フレームレート(AR中) 60fps 45-60fps
USDZのエクスポートがボトルネックだ。複雑なモデルではエクスポートに2秒以上かかることがある。ユーザーにはローディングインジケーターを表示して待たせる。
ユーザーテストからのフィードバック
10名のテスターにAR機能を試してもらった結果:
- 92%が「サイズ感がわかって良い」 と回答
- 65%が「操作が直感的」 と回答
- 35%が「ARの起動方法がわかりにくい」 と指摘
- 20%が「ARモードから戻る方法がわかりにくい」 と指摘
このフィードバックを受けて、ARボタンにツールチップを追加し、「戻る」ボタンを大きくする改修を行った。
今後のWebXR対応計画
現在の実装は各プラットフォームのネイティブAR機能に依存しているが、将来的にはWebXR Device APIへの完全移行を計画している。
WebXRの利点:
- ブラウザ内で完結(外部アプリに遷移しない)
- AR空間内でのインタラクション(タップ、ドラッグ)が可能
- 複数フィギュアの同時配置
- 光源推定によるリアルな影の描画
課題はブラウザサポートだ。2026年時点でも、iOSのSafariはWebXRを完全サポートしていない。Appleが対応するまでは、iOS向けにはAR Quick Lookを維持する必要がある。
ARは「画面の向こう」と「こちら」の境界を溶かす技術だ。フィギュアがテーブルの上に立つ瞬間、デジタルの存在が物理的なリアリティを獲得する。その変換の瞬間こそが、この機能の本当の価値だ。