🎊

iOS 15.4におけるWebXR Device APIの現状確認

2022/03/15に公開

@ikkou です。ウェブにおける XR である WebXR を長らく推していて、WebXR に関するオンライン技術コミュニティイベント『WebXR Tech Tokyo』を主催しています。

㊗ iOS 15.4 リリース

本日 2022/03/15 JST に Developer Preview と Public Preview を経て iOS 15.4 がリリースされました🎉

Preview 期間中の NDA による制限が解除されたので満を持して本エントリを公開できます:)

早速ですが本記事のサマリはこのツイートにまとまっています。

https://twitter.com/ikkou/status/1503517193619009538

iOS 15.4 ではさまざまな機能が追加されていますが、なかでも Safari に WebXR Device API と関連する API が複数追加されていることは、WebXR を推す身としては絶対に見逃せません。

追加されたものは次の 4 つです。

  1. WebXR Augmented Reality Module
  2. WebXR Device API
  3. WebXR Gamepads Module
  4. WebXR Hand Input Module

この WebXR Device API ですが、1 年前の 2021/02 時点では WebKit Feature Status で In Development つまり開発中となっていました。そして今日現在も In Development ステータスのままとなっています。

https://twitter.com/ikkou/status/1364519186467196929

余談ですが iOS 15.4 がリリースされた当初、多くのウェブメディアが WebXR Augmented Reality Module を WebXR Augmented Reality Mode と表記していました。これは Preview 番では WebXR Augmented Reality Mo... と省略して表示されていたためだと推測されますが、やはり自分の目で確認するのが一番ですね。

WebXR Device API の有効化

iOS 15.4 で追加された WebXR Device API を含む 4 つの機能は、デフォルトでは有効になっておらず、ユーザー自身で有効化が必要です。

手順は、設定 → Safari → 詳細 → Experimental Features → 該当箇所を有効化です。

ちなみに Experimental Features については iOSDC Japan 2021 の LT で発表しているので、興味のある方はご覧ください:)

https://speakerdeck.com/ikkou/experimental-features-in-safari-you-didnt-know

Experimental Features は iOS のバージョンアップによって変更が加えられることがあるため、今後出てくるであろう iOS 15.5 や 16 以降では別の場所にあるかもしれませんし、デフォルトで ON になることや、API 自体が Safari の標準機能として取り込まれ、設定項目そのものが無くなる可能性もあります。

Chrome のような「標準実装」と言えるのは、このAPI 自体が Safari の標準機能として取り込まれ、設定項目そのものが無くなったときです。

WebXR Device API が有効化されていることの確認

Experimental Features の変更により WebXR Device API が有効化されていることは、この WebXR Device API の仕様策定を担っている W3C Immersive Web Working Group が運営している WebXR Sample Pages で確認できます。

https://immersive-web.github.io/webxr-samples/

WebXR Device API に対応しているブラウザで、この WebXR Sample Pages にアクセスすると、画像の右側のように、対応している旨が表示されます。これはデフォルトで有効化されている PC Chrome 等でも同様の挙動となります。

Safari を使っていて Your browser implements the WebXR API~ と表示されるのは、WebXR 推しとしては非常に感慨深いものがありますが、現実はそう優しくありません。

Safari で WebXR Device API が有効化されて何ができるようになるのか?

Safari よりも早く WebXR Device API に対応していた Android 向け Google Chrome で WebXR Sample Pages にアクセスすると、Safari と同じ Your browser implements the WebXR API~ が表示されつつ、VR support detected と AR Suppor detected の文字列が表示されています。

スマートフォンからのアクセスの場合、その特性上、現実的には VR ではなく AR が対象になるので、例えば Immersive AR Session にアクセスしてみましょう。

https://immersive-web.github.io/webxr-samples/immersive-ar-session.html

アクセスすると Immersive AR Session の説明とともに、START AR というボタンが表示されます。このボタンをタップすることで、WebXR Device API を使った Immersive AR Session が動作します。(エラーを吐いて落ちるかもしれません)

また、Google 謹製の WebXR アプリが集められている WebXR Experiments の各コンテンツにもアクセスしてみましょう。

https://experiments.withgoogle.com/collection/webxr

対して iOS の Safari でアクセスするとどうでしょうか?

WebXR Sample Pages では、VR support not detected、AR support not detected と表示され、Immersive AR Session のページでは AR NOT FOUND と表示されます。

また、WebXR Experiments の 4 コンテンツは、そのすべてで not supported と表示されます。

このように、WebXR Device API が使えるようになっても、既存の WebXR コンテンツが動作するとは限りません。

なぜ Safari では WebXR Experiments が動作しないのか?

WebXR Device API には今回追加されたものを含め、次のような関連する Module と API が存在しています。

  • WebXR Gamepads Module - Level 1
  • WebXR Augmented Reality Module - Level 1
  • WebXR DOM Overlays Module
  • WebXR Hit Test Module
  • WebXR Layers API Level 1
  • WebXR Hand Input Module - Level 1
  • WebXR Plane Detection Module

まだ Safari は掲載されていませんが、各 Module と API の対応状況は Immersive Web Developer Home - Support Table for the WebXR Device API で示されています。

https://immersiveweb.dev/#supporttable

iOS 15.4 で有効化できるようになった WebXR Device API はあくまで navigator.xr を有効化するものです。ブラウザからは navigatorxr プロパティが存在するときのみ WebXR Device API にアクセスできるようになります。

WebXR Device API はブラウザ経由で VR/AR デバイスへのアクセスを担保するだけ で、そこから先のコンテンツとして成立させる挙動には、関連する Module や API が必要となります。

そこで必要になるのが immersive-vrimmersive-ar への対応です。これらの対応有無は isSessionSupported() メソッドで判定できるのですが、結論としてはスマートフォンとして対応を果たすべき immersive-ar には未対応です。今は WebXR Device API を有効化していることを確認して満足する、これが限界です。

やっぱり Safari で WebXR は夢の話なのか?

今回はまず WebXR Device API が、ユーザー自身で設定を変更するという「条件付き」で使えるようになりました。関連する Module と API はこの WebXR Device API が使えなければ始まりません。こうやって WebXR Device API を使えるようになったことを受け、今後関連する Module や API の対応範囲も拡がっていくことが予想できます。

WebXR Device API の仕様策定を進める Immersive Web Working Group の Co-Chairs は、Samsung、Microsoft、Google の方が務めていますが、ともに歩んでいる Immersive Web Community Group には Apple の方が 6 名もいます!

また、iOS 15 では 3D/WebAR 向けのものであろう HTML <model> element の追加や、同じタイミングで発表された macOS Monterey ではフォトグラメトリ用の API である Object Capture の追加など、周辺環境を整備している状況が伺えます。

そして、期待を込めて言うなら、今後もしもメガネ型の AR デバイスが出てきた際には、ブラウザ経由で VR/AR デバイスにアクセスする WebXR Device API が真価を発揮する可能性があるかもしれません。

ということを踏まえると、今はまだ始まったばかりですが、今後はより注目できるのではないかと考えています!


現場からは以上です! 良き WebXR ライフを!

Discussion