じゅころぐAR

ARのブログ

AR Foundationのすゝめ

AR FoundationのPreviewが外れて正式版となったので、改めて推していきます。
あと、記事の最後に宣伝があります。

AR Foundationとは

Unity Technologiesが提供しているマルチプラットフォーム対応のARプラットフォームです。
導入部分は以前に書いているので、そちらを見てください。 www.jyuko49.com

f:id:jyuko49:20190801002706p:plain

AR Foundationのイケてるところ

ARKitとARCoreに両対応している

AR FoundationはARKit XR PluginとARCore XR Pluginを統合したパッケージなので、共通の機能は単一の実装にできます。

また、AR Foundationのコンセプトを考えると、今後ARKit、ARCore以外のプラットフォームに対応する可能性もあります。

Unity製という信頼感がある

Google製SDKとしてはARCore SDK for Unityが公開されていますが、AppleはUnity向けにARKitのSDKを提供していません。

そうなると次に考えるべきは、サードパーティ製のSDKを使ってARKitを開発する方法で、Unity Technologiesは以下のブログ記事にてAppleと密に連携を取っていることを明かしています。

AR Foundation support for ARKit 3AR 파운데이션에 적용된 ARKit 3 최신 기능 소개 - Unity Technologies Blog

ゲームエンジンを提供しているUnity純正のSDKであれば、機能の整合性も取りやすいでしょうし、提供が終了してしまうリスクも小さいと思います。

Package Manegerで管理できる

Unityが提供しているライブラリなので、Package Manegerでインストールやアップデートができます。

f:id:jyuko49:20190731221357p:plain

最新のunitypackageをダウンロードしてプロジェクトに再インポート(上書き)する作業が無くなり、バージョン指定してアップデートボタンを押すだけになります。

パッケージとサンプルがきちんと分かれている

前述のARCore SDK for UnityやUnity-ARKit-Plugin(現在は非推奨)はunitypackageでの提供だったため、インポート時にチェックを外さないとサンプルプロジェクトのアセットも一緒にインポートされていました。

Package ManegerでインストールするAR Foundationにはサンプルのコードは含まれていません。
単純にプロジェクトに無駄なファイルが少なくなりますし、サンプルのスクリプトを改変して開発を進めてしまった結果、SDKをアップデートしたら上書きされてしまい・・・といったことも無くなります。

サンプルを元に学習や開発をしたい場合は、GitHubで公開されているAR Foundation Samplesを別途インポートする形になります。

コンポーネントの構造がわかりやすい

まず、

  • AR Session
  • AR Session Origin

をシーンに配置すればARになります。

余計なコンポーネントは一切なく、カメラ映像の表示とトラッキングだけを行うシンプルな構成です。

f:id:jyuko49:20190731211314p:plain

ここから機能を追加していくには、"AR Session Origin"に"AR XXXXX Manager"を付ければ有効になります。

  • AR Plane Manager
  • AR Point Cloud Manager
  • AR Raycast Manager
  • AR Tracking Image Manager

など。

必要な機能だけをアタッチすればよく、何が有効になっているのかも見通しが良いです。

f:id:jyuko49:20190731211703p:plain

ノンコーディングでもそこそこ使える

例えば、平面検知を行う"AR Plane Manager"の場合、

  • 平面として表示するPrefabをセット
  • 検知する平面を選択
    • 水平面(Horizontal)
    • 垂直面(Vertical)
    • 両方(Everything)

というUnityエディタ上の操作だけでも基本的な機能は使えます。

f:id:jyuko49:20190731212101p:plain

"Plane Prefab"、"Point Cloud Prefab"のようなAR独自のPrefabについては、"GameObject" > "XR"にデフォルトのGameObjectが用意されています。
上記の手順だと必要なスクリプトやコンポーネントが既にアタッチされているので、簡単にPrefabが作れます。

f:id:jyuko49:20190731212305p:plain

"Image Tracking"で使う"Reference Image Library"や"Object Tracking"の"Reference Object Library"は"Project" > "Create" > "XR"で作成できます。

f:id:jyuko49:20190731224221p:plain

機能の使いやすさが改善している

Image Trackingを例に挙げます。

ARの実装パターンの中でも汎用性が高く、使い勝手がいい機能なのですが、従来のSDKだと扱いにくい部分がありました。
何かと言うと、検知対象とする画像データベース(Reference Images)の作成です。

ARCore SDK for Unityの場合、先に画像を用意してからデータベースを作る感じで、後から画像を追加する操作がやや面倒です。詳細はこちらの記事を参照ください。

一方のUnity-ARKit-Pluginでは、画像の追加は簡単なものの"ARReferenceImagesSet"に"ARReferenceImage"を登録するという構造になっており、データベースとして登録されている画像がわかりにくいです。

f:id:jyuko49:20190731233842p:plain

また、画像1枚ごとに"ARReferenceImage"を作成しなければいけないため、管理が煩雑になりやすいです。

f:id:jyuko49:20190731233908p:plain

といったあたりを踏まえて、AR Foundationの"Reference Image Library"を見てみましょう。

f:id:jyuko49:20190731234127p:plain

"Add Image"で簡単に画像を追加することができ、登録されている画像とプロパティが一覧で表示されます。いいとこ取りでわかりやすい!

まとめ

おわかり頂けただろうか?

AR Foundationはノンコーディングでの実装がやりやすくなっているため、簡単なARアプリであれば難しい知識がなくても作れます。

ですので、ARアプリ開発をこれから始めるなら、Unity + AR Foundation一択だと思っています。 理由は、初心者がもっとも躓きやすく離脱しやすい『最初にアプリを動かすまで』のハードルが低く設定されているからです。

以前の記事にも書いた通り、次のステップとしてARの要素技術を知識として押さえた上でスクリプトを読み解き、独自の処理を実装できるようになるところに壁があると思っています。
とはいえ、まずはARアプリを作って動かしてみて、イメージを膨らませるのが近道で、その後で足りない部分を独自実装していく方が効率がよいかと思います。

ですが、導入としてAR Foundation Documentationがわかりやすいかというと・・・ですし、そもそも英語が苦手という方もいるんじゃないかと思います。

そこで!!
と、上手く(?)宣伝につながる訳ですね。

宣伝

技術書典7に向けて、AR Foundationの技術同人誌を執筆中です。
後日BOOTHでの頒布も検討しています。

AR Foundationのバージョンは"2.1.1"で、ARKit3対応の"2.2.0"は見送る予定です。まだPreviewですし、iOS13がリリースされるまではNDA対象を含む可能性があるので。
"2.2.0"も触っていますが、基本的な部分は変わりませんし、問題ないかと。

取り扱う機能としては、

  • AR Camera
  • AR Plane
  • AR Raycast
  • AR Image Tracking

あたりが中心になる予定です。

執筆は順調ですが、製本初めて&表紙どうしようあたりが課題。

また、以下のツイートがバズっているため、ネタ被り&二番煎じ感が否めませんが、
「ARの薄い本ならスマホかざしたらARになるべきでしょJK」
的な使命感はあります。

まさか、夏コミでこんなしっかりしたAR対応の同人誌が出てくるとは・・・ていうか、普通にめっちゃ欲しいんですけど、もしかして争奪戦!?

アプリをここまで作り込むのは難しいかなぁ・・・と思いつつ、こういうアプリが作れるようになりたい人の手助けにはなるんじゃないかなとは思っています。