2022年3月ついに iOS 15 で WebXR Device API サポートが来たかと喜んだのもの束の間、 immersive-ar
モードが動作しないことが発覚して結局 iPhone で WebAR はまだまだ難しいということを再認識させられたのであった。
一方で Apple は、USDZ という 3D モデルの独自フォーマットや、USDZ に動きやインタラクティブな振る舞いを加えることができる Reality という独自フォーマットを持っており、これらは iOS の AR Quick Look という機能を使って AR 表示することができる。AR Quick Look は iOS Safari からも利用することができるので、現状では iPhone で 6DoF な WebAR を実現するための最もカジュアルな方法ではないかと思う。
Reality ファイルそのものは Xcode に付属の Reality Composer を使うことで簡単に作成することができるが、作成した Reality ファイルを iOS Safari から呼び出す際に少しクセがあったので、それについてまとめる。
Web アプリから AR Quick Look を起動する
Web アプリから AR Quick Look を起動するには、単に Reality ファイルへのリンクを貼るだけで良い。
このとき、anchor タグには rel="ar"
属性を指定する必要がある。
<a rel="ar" href="app.relaity">START AR</a>
「オブジェクトを開けませんでした」エラーが出る場合
AR Quick Look がファイルを開けなかった場合に「オブジェクトを開けませんでした」というエラーメッセージが出る。
ファイルがそもそも存在しない (404) 場合でもこのエラーが出るが、ファイルが確かにホストされているにも関わらずこのエラーが出る場合は、HTTP レスポンスヘッダの Content-Type が適切ではない可能性がある。
例えば Reality ファイルを AR Quick Look で開く場合、そのファイルを取得する際の Content-Type は model/vnd.reality
である必要がある。
すぐに AR Quick Look が起動しない場合
リンクをクリックしてもすぐに AR Quick Look が起動せず、画面を1回タップすると開始する、というケースがある。
どうやら iOS Safari は「anchor タグのコンテンツに画像が含まれている場合は AR Quick Look を直接起動させる」という振る舞いをするらしい、ということに試しているうちに気づいた。
画像が含まれていればなんでもいいようなので、たとえば 1px x 1px の透過 GIF 画像を仕込んでも問題ない。
<a rel="ar" href="app.reality">
START AR
<img src="data:image/gif;base64,R0lGODlhAQABAGAAACH5BAEKAP8ALAAAAAABAAEAAAgEAP8FBAA7" />
</a>