BLOGARFoundationでARKitとARCoreのマルチプラットフォームARを試してみたAR2019.06.28イケメンテックラボでエンジニアをしている寺林です。準備ARFoundationのシーンを作ってみる試しにビルドしてみる平面を表示させてみよう点群(PointCloud)を表示させてみよう平面上にオブジェクトを配置するまとめARFoundationとはARFoundationはUnityが現在開発しているAR開発用のフレームワークです。特徴としては、ARKitとARCoreのマルチプラットフォームARを簡単に作ることができます。イケメンテックラボブログでは過去にARKitとARCoreの導入方法を紹介しました。ARCoreを使った場合はAndroidでのみ動くアプリに、と言ったハードウェアの制約があり、AndroidとiOS両方で動くアプリを作る場合はARCoreとARKitで別々の実装をする必要がありました。これは開発する上で結構不便ですよね。それを解決するために、Unityが現在開発をしているのがARFoundationです。ARFoundationを使って作ったアプリはiOSにビルドするとARKitで、AndroidにビルドするとARCoreで動作するようになります。ARKitとARCoreを同じ実装で扱えるようになるので別々で実装するのと比べてかなり工数は減らすことができますし、ARFoundationのアップデートだけを拾い続ければARKitやARCoreの仕様変更などを考慮しなくても良くなるのが利点になります。ARCoreが現時点で対応していないARKitのEnvironmentTexturing(環境の映り込み)を使いたい!みたいなケースだと一工夫必要になるのかな、といった感じです。現在開発中(Previewバージョン)なのですが触ってみたところかなり簡単に作ることができましたので手順を紹介します!※今回の記事ではUnityのPreview(開発中)パッケージを使っているため、記事執筆時の仕様から今後変更が加わったり手順が変わったりする可能性があります。最新情報などはUnityのパッケージリファレンスやフォーラムなどをご覧ください。今回は以下の環境で実装をしました。Plugin、ARFoundationは記事内で導入します。Unityは2019を落とした上でAndroid、iOSのビルド環境はあるものとして進めます。ARFoundationは内部でARCore、ARKitを使っているので、ARCore、ARKitに対応した端末が必要になります。P20で検証してます。準備まずはいつも通りUnityのプロジェクトを作りましょう!今回はARFoundationTestというプロジェクト名にしました。UnityHub2になってから画面が見やすくなりましたね〜まずはパッケージの導入をしましょう。Managerを選択しましょう。Previewパッケージはデフフォルトでは非表示になっているため、普通にパッケージマネージャを開いただけでは一覧には出てきませんのでお気をつけください。Packagesをクリックします。すると安定してないパッケージだけど表示してもいいですか?というウインドウが出てくるのでYesをクリックしましょう。これでパッケージリストに表示されるようになります。パッケージを入れていきましょう。各プラットフォームのXRPluginを導入します。Pluginを入れましょう。一応こちらはビルドするプラットフォームのものが入ってれば問題ないそうですが、何かしら問題が起きると怖いですし、両方入れないでいる事で起きるメリットもないので両方入れちゃいましょう。右下のInstallをクリックで入ります。これでARFoundationを使う準備はできました。ARFoundationのシーンを作ってみるまずはプロジェクトを作った時に開かれてるSampleSceneにあるオブジェクトを全て消しましょう。SessionOriginの二つを生成します。するとこんな感じになると思います。ARSessionの方がARのライフサイクルを管理している感じで、ARSessionOriginの方がカメラとかAR空間上での制御などを見ているイメージです。)これでひとまず最低限のものは揃います。試しにビルドしてみる一回Android向けにビルドしてみましょう(ビルドが早いので...)BundleIDを指定して、ビルドしてみると、まぁ想像はしてましたがエラーが出ました。ARCoreはVulkan(描画API)に対応してないよ、というエラーと、MinimumSDKは24以上にしてね、というエラーです。APIのところ、Vulkanを選択し、−ボタンをクリックしましょう。OpenGLES3が一番上に来ればOKです。OpenGLES2.0でも動くとは思いますがARCore対応端末でOpenGLES3に対応してない端末、多分ないと思うのでこれで問題ないと思います。これでビルドしたところ無事起動しました。このようにカメラの映像が表示されていれば正常に動いています!とりあえず一安心。iOSのビルドも試してみたところ、案の定エラー。カメラ利用の文言が空だよというエラーとアーキテクチャがARM64じゃないと動かないよというエラーです。Descriptionに文言を入れましょう。真ん中くらいにあります。そのちょっと下にあるArchitectureをARM64にしましょう。これでUnityのビルドは通ったのですがXCodeでビルドした時にエラーが発生してしまいました。...ARKit3.0の対応をARFoundationの最新版で入れている為、XCodeのバージョンが10だとこのエラーが出てしまうようです。ARFoundationのリポジトリに書いてありました。Unity-Technologies/arfoundation-samplesgithub.comこの記事を書いている現時点(2019/6/25)ではまだiOS13もXCode11も正式版リリースされていない為、エラーが出るのは当然といえば当然ですね。11betaを入れるか、ARFoundationをダウングレードさせるかのどちらかになります。今回は後者(ARFoundationをダウングレードさせる)にしました。Beta版入れるの結構面倒なので...。Pluginを2.1.0にダウングレードさせたところ、無事ビルドが通るようになりました!この時期ならではのレアケースな感じがしますが、もし遭遇した方はダウングレードを試してみてください!平面を表示させてみようさて、カメラの映像がアプリで表示できることは確認できました。次に平面の表示をさせてみましょう。ARCoreやARKitの時にも出ていた、認識した平面を視覚的にわかるようにするものです。Componentします。Prefabにあるものが表示されるようになります。このPrefabを作りましょう。Planeを選びます。PlaneをそのままPrefab化しましょう。Prefabに指定してやればこれで平面が表示されるようになります。ビルドして実行するとこのように、平面を検知した部分が表示されます。Planeコンポーネントのパラメータたちをいじってやると変更もできます。点群(PointCloud)を表示させてみようARCore、ARKitと同じように特徴点を表示させてみましょう。Managerを追加します。Prefabに設定したオブジェクトが表示されます。PointCloudを作成してPrefab化して...指定してやりましょう。ビルドして実機でみてみましょう。気持ち悪いですが点群が表示されました!ほとんど同じやり方で出来るのは嬉しいですね!もちろんこの点の見た目も変更できます。Managerを追加します。これを使って平面がどこにあるのか調べることができます。次にコードを書きましょう。今回はARManager.csというファイルを作成し、以下のようなコードを書きました。}}画面に触れて、指を話したタイミングでその指の位置の先に平面があるかをRaycast関数で調べ、trueだった場合はその場所を取得しInstantiateしてオブジェクトを生成します。Originに追加します。Prefabには生成したいPrefabを用意して指定しましょう。今回も前回と同様Sphereを作ってます。実機にビルドして確認してみましょう!平面を認識している状態で...タップするとオブジェクトが生成されます!特に個数の制限してないので何個でも出せます。Foundation優秀ですね...。まとめARFoundationを触ってみました。いかがでしたでしょうか。機能的にはARKit、ARCoreと同程度でこれだけ簡単にARアプリを、しかも両プラットフォームで作れちゃうのはかなり使い勝手が良いですね!まだPreview段階ということもあり、動作が不安定だったり情報が少なかったりするのですがUnityはARFoundationに今後も力を入れていくでしょうし、ゲームエンジンで使うARとしては今後はARFoundationが主流になるのかな?と思いました。BLOG関連記事AR「王子様に急接近AR」で使った技術について先日リリースされた王子様に急接近ARの開発に使用した技術・こだわったポイントをご紹介します!ARiPhoneでリッチなAR体験!ARKitをUnityで使ってみたイケメンテックラボでエンジニアをしている寺林です。今回は前回、前々回に続き、ARのライブラリの話になります。AR...ARUnityでARCoreのAugmentedImageを使って高精度マーカーARを楽しむイケメンテックラボでエンジニアをしている寺林です。今回は以前紹介したARCoreの導入記事以来のARCoreネタになります。V2で遊んでみたイケメンテックラボでエンジニアをしている寺林です。イケメンテックラボではゲームエンジンのUnityを使って開発しているのですが、Unityには画面に特殊効果をかけるPostProcessingStackというライブラリがあります。初めまして、イケメンテックラボでエンジニアをしています寺林です。イケメンテックラボでは様々な表現の研究や最新の技術の検証などを行なっています。その一環で今回はGoogleの提供しているARのSDKであるARCore...ARAR技術者必見!最新ARSDK『6D.AI』で遊んでみたイケメンテックラボでエンジニアをしている寺林です。記事検索Twitterツイート。