ARKitはARをアプリに組み込んでより魅力的で楽しいものにする方法を示しました。もしあなたのアプリにARKitを使うことを考えているならこの話はあなたのためのものです。このトークではアプリのパフォーマンス確保や仮想オブジェクトの配置、平面の操作など、ARKitアプリを作る上で私が経験したチャレンジをお話します。ARKitを最大限活用し、ARアプリのパフォーマンスを維持し、洗練されたエンドユーザーエクスペリエンスを実現する方法を学びましょう。
ARきっと使ったことがある人
去年ですが本を執筆しました。ARアプリ開発のプロセスになります。
今回は私自身の経験、直面した課題を共有したいと思います
2017年にARKitがでました。
AR、すでに導入されて長い時間が立っていますが、色々なセンサーを使いながらARをモバイル上で展開してきました。
いろいろなテクノロジー、googleのプロジェクトなどを見てこられたと思います。
しかし今回低コストで出来るようになりました。
テクニカルなディープな話をする前に2つのアプリケーションをご紹介したいと思います。
私はPortalを作ろうと思いました。
平面を検知し、タップするとポータルを配置できる
それからARスケッチ
複数の人とコラボレーションできる。
ARの体験はいくつかの主要コンポーネントから成り立っています
物理的なデバイス環境を検知して理解する。
その環境におけるジオメトリとマッピングしていく
そこにオブジェクトをレンダリングする
ユーザーをガイドしていく、フィードバックを返す
いくつかベストプラクティスとしてAppleが推奨しているものを紹介します
どのデバイスと互換性があるか、A9プロセッサ以降
みなさんがUIデバイス、ARキットの一つの機能としてPlistで表示していく必要がある。
isSupportedで有効化されていることを示す
2次的な体験であれば
たとえば家具を買うときに可視化するというユースケースであれば、オプションに成るでしょう
ARFaceTrackingConfiguration.isSupportedでコード上できりかえ、インターフェースを見せないということが出来る
カメラはAR体験でコアの役割を担います
アプリに許可を与えてデバイスにアクセスさせることが必要になる。
ARSession稼働時に自動でパーミッションを聞いてくる
DSCあめらUsageDescriptionに関連性の高い説明を書く
顔のトラッキングを使うときにはプライバシーポリシーを組み込む。
最低限の要件、ARキットを使うときの説明をしました
私が直面した課題とプラクティス
ARアンカーを座標システムで使う
長い時間に渡ってだんだん拡張がずれてきたりします。ARKitで自動的にアンカーを使ってズレを調整することが出来る。
特徴店ではなくて、ARアンカーを使うことを強くおすすめする
離れても同じ場所にとどまっていることが分かると思います
トラッキングのクオリティもうまくやることが重要
良好な環境のライトを用意すること、明るい部屋が完璧な環境
暗い部屋では特徴点がうまくつかめない
もう一つ重要なのが、静的な環境をよういすること。
環境が動くのは適していない。エレベーターの中で使っていると、3Dコンテンツがずれていくのが分かる。ARキットがカメラとモーションデータを組み合わせてトラッキングしているから。
動いている車両で起きているのは、カメラは測定を行っていて、動きも検知してしまってトラッキングが混乱する。
デバイスも動かしすぎては行けない。
それからグロッシーなテキスチャ、表面も重要に成る
なので、ユーザーにも指示を出す。
トラッキングクオリティの結果がARCameraオブジェクトに送られます
2つのenumを使って適切なメッセージをユーザーに投げられる、どうやったら改善できるか
switchブロックはユーザー向けメッセージに変換する際に有用です
いくつかARKit2.0の機能を紹介します。
ARWorldMap デバイスの周りのSpacemappingが可能、アンカーなど、ユーザーが配置したアンカーなども取得できる、シリアライズできる。アーカイブでセキュアコーディングを使うことをおすすめしている。オブジェクト差し替え攻撃にセキュリティを担保できる
精度高く再現するには信頼性のあるWorldMapを取得する必要がある。
トラッキングと同様適切な時間を設定する。
継続的にARSessionDelegateの中で行っていく
いくつかのCoreFeature、課題障壁の話をしてきましたがパフォーマンスの留意点
できるだけ理想的、そして理想的ではない環境でテストをすること。
薄暗いところなどで利用して、ユーザーに対して適切なガイダンスを表示する。
実際の世界で平面を検知することに時間がかかる
平面を検知する際に、犬が何度も映り込む
ARKitはセッションベース。リソース集約になります。カメラとモーションデータを常にキャプチャしている。カメラは常にアクティブでオートフォーカスしています。バッテリーに大きな影響を与えます。それに留意してリソースを使っていないときは開放することが重要です。
バックグラウンドになったら開放する、ARが2次的フィーチャーであれば使わなくなったら開放することが重要。
非常に懸命な女性が言いました
ありがた迷惑ということもありうる
アンカーの数も制限したほうが良いと思います。
アンカーを各ラインのポイントに入れました。
プロファイルしたときにたくさんのCPUを使用しスレッドも使っていることがわかった。
場合によってはバーチャルコンテンツが物理法則に反することがある。
幽霊が閉じたドアをすんなり抜けていくようなことが起きる。
オクルージョンサポートは入っていません。TrueDepthカメラを使ったときには例外に成るが、デプスシェーダーを使って自分で実装していくことも可能です。ARKitの制約があるが、距離から環境をマッピングできません
マッピング対象は近くなくてはいけません。徳から見ようとしているときには制約がかかっています
デフォルトでは60fpsですが下げられるなら下げたほうが良い
ARSCMViewを使っているのであればそこで帰ることができる
アップル推奨最低は30
デリゲートは常にprivate queueで起こっている。
ユーザーが成功するために常にフィードバックを提供する
ご清聴ありがとうございました
Zyngaはスポンサーをしています。サイトではキャリアチャンスもあります。採用も検討いただければ。