寄付窓口はこちら

ARKitのアプリを作ろう | try! Swift Tokyo 2019 1-10

ARKitはARをアプリに組み込んでより魅力的で楽しいものにする方法を示しました。もしあなたのアプリにARKitを使うことを考えているならこの話はあなたのためのものです。このトークではアプリのパフォーマンス確保や仮想オブジェクトの配置、平面の操作など、ARKitアプリを作る上で私が経験したチャレンジをお話します。ARKitを最大限活用し、ARアプリのパフォーマンスを維持し、洗練されたエンドユーザーエクスペリエンスを実現する方法を学びましょう。

f:id:niwatako:20190321150530j:plain

ARきっと使ったことがある人

去年ですが本を執筆しました。ARアプリ開発のプロセスになります。

今回は私自身の経験、直面した課題を共有したいと思います

f:id:niwatako:20190321150605j:plain

2017年にARKitがでました。

AR、すでに導入されて長い時間が立っていますが、色々なセンサーを使いながらARをモバイル上で展開してきました。

いろいろなテクノロジーgoogleのプロジェクトなどを見てこられたと思います。

しかし今回低コストで出来るようになりました。

テクニカルなディープな話をする前に2つのアプリケーションをご紹介したいと思います。

私はPortalを作ろうと思いました。

平面を検知し、タップするとポータルを配置できる

f:id:niwatako:20190321150750j:plain

f:id:niwatako:20190321150756j:plain

それからARスケッチ

f:id:niwatako:20190321150815j:plain

複数の人とコラボレーションできる。

ARの体験はいくつかの主要コンポーネントから成り立っています

物理的なデバイス環境を検知して理解する。

その環境におけるジオメトリとマッピングしていく

そこにオブジェクトをレンダリングする

ユーザーをガイドしていく、フィードバックを返す

f:id:niwatako:20190321150909j:plain

いくつかベストプラクティスとしてAppleが推奨しているものを紹介します

どのデバイスと互換性があるか、A9プロセッサ以降

f:id:niwatako:20190321150941j:plain

みなさんがUIデバイス、ARキットの一つの機能としてPlistで表示していく必要がある。

isSupportedで有効化されていることを示す

2次的な体験であれば

たとえば家具を買うときに可視化するというユースケースであれば、オプションに成るでしょう

f:id:niwatako:20190321151030j:plain

ARFaceTrackingConfiguration.isSupportedでコード上できりかえ、インターフェースを見せないということが出来る

カメラはAR体験でコアの役割を担います

f:id:niwatako:20190321151115j:plain

アプリに許可を与えてデバイスにアクセスさせることが必要になる。

ARSession稼働時に自動でパーミッションを聞いてくる

DSCあめらUsageDescriptionに関連性の高い説明を書く

顔のトラッキングを使うときにはプライバシーポリシーを組み込む。

f:id:niwatako:20190321151209j:plain

最低限の要件、ARキットを使うときの説明をしました

私が直面した課題とプラクティス

f:id:niwatako:20190321151235j:plain

f:id:niwatako:20190321151243j:plain

ARアンカーを座標システムで使う

長い時間に渡ってだんだん拡張がずれてきたりします。ARKitで自動的にアンカーを使ってズレを調整することが出来る。

特徴店ではなくて、ARアンカーを使うことを強くおすすめする

f:id:niwatako:20190321151342j:plain

離れても同じ場所にとどまっていることが分かると思います

ラッキングのクオリティもうまくやることが重要

良好な環境のライトを用意すること、明るい部屋が完璧な環境

f:id:niwatako:20190321151417j:plain

暗い部屋では特徴点がうまくつかめない

もう一つ重要なのが、静的な環境をよういすること。

f:id:niwatako:20190321151445j:plain

環境が動くのは適していない。エレベーターの中で使っていると、3Dコンテンツがずれていくのが分かる。ARキットがカメラとモーションデータを組み合わせてトラッキングしているから。

動いている車両で起きているのは、カメラは測定を行っていて、動きも検知してしまってトラッキングが混乱する。

バイスも動かしすぎては行けない。

それからグロッシーなテキスチャ、表面も重要に成る

f:id:niwatako:20190321151552j:plain

なので、ユーザーにも指示を出す。

ラッキングクオリティの結果がARCameraオブジェクトに送られます

f:id:niwatako:20190321151627j:plain

2つのenumを使って適切なメッセージをユーザーに投げられる、どうやったら改善できるか

switchブロックはユーザー向けメッセージに変換する際に有用です

f:id:niwatako:20190321151652j:plain

いくつかARKit2.0の機能を紹介します。

ARWorldMap デバイスの周りのSpacemappingが可能、アンカーなど、ユーザーが配置したアンカーなども取得できる、シリアライズできる。アーカイブでセキュアコーディングを使うことをおすすめしている。オブジェクト差し替え攻撃にセキュリティを担保できる

f:id:niwatako:20190321151801j:plain

f:id:niwatako:20190321151807j:plain

精度高く再現するには信頼性のあるWorldMapを取得する必要がある。

ラッキングと同様適切な時間を設定する。

継続的にARSessionDelegateの中で行っていく

f:id:niwatako:20190321151847j:plain

f:id:niwatako:20190321151914j:plain

いくつかのCoreFeature、課題障壁の話をしてきましたがパフォーマンスの留意点

できるだけ理想的、そして理想的ではない環境でテストをすること。

f:id:niwatako:20190321151937j:plain

薄暗いところなどで利用して、ユーザーに対して適切なガイダンスを表示する。

実際の世界で平面を検知することに時間がかかる

平面を検知する際に、犬が何度も映り込む

f:id:niwatako:20190321152349j:plain

f:id:niwatako:20190321152406j:plain

ARKitはセッションベース。リソース集約になります。カメラとモーションデータを常にキャプチャしている。カメラは常にアクティブでオートフォーカスしています。バッテリーに大きな影響を与えます。それに留意してリソースを使っていないときは開放することが重要です。

バックグラウンドになったら開放する、ARが2次的フィーチャーであれば使わなくなったら開放することが重要。

非常に懸命な女性が言いました

ありがた迷惑ということもありうる

f:id:niwatako:20190321152513j:plain

アンカーの数も制限したほうが良いと思います。

アンカーを各ラインのポイントに入れました。

プロファイルしたときにたくさんのCPUを使用しスレッドも使っていることがわかった。

場合によってはバーチャルコンテンツが物理法則に反することがある。

f:id:niwatako:20190321152558j:plain

幽霊が閉じたドアをすんなり抜けていくようなことが起きる。

オクルージョンサポートは入っていません。TrueDepthカメラを使ったときには例外に成るが、デプスシェーダーを使って自分で実装していくことも可能です。ARKitの制約があるが、距離から環境をマッピングできません

マッピング対象は近くなくてはいけません。徳から見ようとしているときには制約がかかっています

f:id:niwatako:20190321152706j:plain

デフォルトでは60fpsですが下げられるなら下げたほうが良い

f:id:niwatako:20190321152711j:plain

ARSCMViewを使っているのであればそこで帰ることができる

アップル推奨最低は30

f:id:niwatako:20190321152737j:plain

f:id:niwatako:20190321152752j:plain

f:id:niwatako:20190321152801j:plain

デリゲートは常にprivate queueで起こっている。

f:id:niwatako:20190321152823j:plain

ユーザーが成功するために常にフィードバックを提供する

ご清聴ありがとうございました

f:id:niwatako:20190321152902j:plain

f:id:niwatako:20190321152912j:plain

Zyngaはスポンサーをしています。サイトではキャリアチャンスもあります。採用も検討いただければ。