へたれ技術っぽいブログしてます

【AR】【Androiod】AR Foundationの勉強進捗状況 ※覚書

AR Foundationのサンプルプロジェクト(arfoundation-samples-main)にある幾つかサンプルシーンだけをつらつら読んでいてわかったことの覚書。

自分用の覚書なので間違ってたり変なこと書いてたらごめんなさい。

 

■ Assets > Scenes > SimpleAR

平面検出(Plane)と特徴点検出(Cloud Point)とレイキャスト(AR Raycast Manager)のサンプルとしてとても勉強になりました。

とりあえずMaterialの設定をいじることで、コードの記述は一切無しでPlaneの描画を任意のテクスチャに変えることができました。

 

■ Assets > Scenes > ImageTracking > BasicImageTracking

画像マーカーの使い方のサンプル。

特定の画像を認識して画像上にオブジェクトを出現させる。

特定の画像を認識させてオブジェクトを表示させるだけならコードの記述などは不要で実装できる。サンプルは画像を認識してその画像の情報をコードでオブジェクト上のUIに追記するようなもので多少複雑だったので自分なりに簡単に記述し直してみることをしてみた。ハンドラ(リスナー)の追加とtrackedImage(という名前でサンプルで使われている変数)の使い方が肝ですかね。画像ごとに別のオブジェクトを表示させるのに苦心したけど、スクリプトに数行追加するだけで実装できました。

 

■ Assets > Scenes > FaceTracking  (> FacePose.unity)

顔認識のサンプル。

サンプルがシンプル。顔の位置にオブジェクト表示させて追跡させるだけならコードの記述不要で、自分で実装するのもとてもとても簡単。

 

■ Assets > Scenes > Depth  (> SimpleOcclusion.unity)

オクルージョンのサンプル。

深度に対応して現実世界の物体の奥にオブジェクトがあるときは隠れる。面白い。サンプルはボール落とすだけであんまり面白くないけど。

サンプルプロジェクトと自分の作ったプロジェクトで、AR Occlusion Manager(Script)コンポーネントの設定項目が違うのでなんでかなーと思ったら、AR Foundationのバージョンが Unity 2020.2.4f1 のVerified版である AR Foundation 4.0.12 ではなく 新しい AR Foundation 4.1.15ではなかったからでした。

 

 

これらの作り方(入門編)の記事はいつか書くかも。

 

とりあえずここまで。

 

 

 

 

【AR】【Androiod】Unity AR Foundationって何? ※覚書

自分用の覚書

 

Unity AR Foundationって何?ってのはこちらを読んでねというのが正解です。公式が正義。

docs.unity3d.com

こちらは Unity 2020用のPluginバージョン4.1のページです。

古いバージョンのページを見ても英語なので楽するのは諦めましょう。というか、Chromeブラウザの翻訳機能を使っても結構読める日本語になる簡素な文章なので、僕みたいに英語に明るくない残念エンジニアにも嬉しいです。

 

 

以下は日本語訳ではありません。自分用の適当で意訳しまくり抜粋しまくりの覚書です。

■AR Foundatioとは

 Unityで使えるマルチプラットフォーム対応のAR開発機能だよ。ただし、インターフェースの提供だけなのでAR機能は以下のプラットフォームごとのパッケージも必要ね。

   Android用  : ARCore XR Plugin

   iOS用    : ARKit XR Plugin

   Magic Leap用 : Magic Leap XR Plugin

   HoloLens用  : Windows XR Plugin

 ちなみにこんなことができるよ。

   Device tracking : モノの位置と向きを検知する

   Plane detection : 平面(水平および垂直)を検出する

   Point cloud : 特徴点(特徴的な部分)の認識をする

   Light estimation : 色温度と明るさを推定する

   2D image tracking : 2次元画像をマーカーに使う

   3D object tracking : 3次元物体をマーカーに使う iOSのみ。

  ほかにも Face tracking(顔認識)とかOcclusion(深度検出)とかあるよ。詳細は公式読んでね。

 

■Platformサポート

 ARKitはたくさん使えるよ、もりもりと。ARCoreはちょっと使えないのあるよ。他はまぁこれからですかね。

AR Subsystemというプラットフォーム非依存のインタフェースで機能を使うよ。Subsystemは個別プラットフォームごとに実装がされていてこれをProviderと呼ぶよ。

 

■AR Foundationのインストール

 Package Managerから AR Foundation とプラットフォームごとのPluginをインストールしてね。

 

■用語集

用語 説明
Tracking ラッキング。カメラを移動させたときに現実世界で追跡(追随)させるAR機能
Trackable

ラッキング可能。平面などの現実世界の特徴を検出できること

Feature Point 特徴点。ARデバイスは特徴的な部分を検出して「環境マップ」を作成している
Session ARセッション。
Session Space セッション空間。ARセッションが開始された位置を原点 (0, 0, 0) とした座標系。

 

■AR Foundationの使い方

 GitHubのサンプル(https://github.com/Unity-Technologies/arfoundation-samples)を読んでね。

 

 ARアプリのSceneには「AR Session」と「AR Session Origin」を配置するよ。「AR Session Origin」の子要素には「AR Camera」が付いてるよ。デフォルトのMain Cameraはいらないよ。

 これらはHierarchyウインドウ > 「+」 > XR から作成すると楽ちんだよ。空のGameObjectに下記のコンポーネントを追加するのでもいいけどね。

 

AR Session コンポーネント

 ARアプリのSceneにはARSessionコンポーネントが1つ必要であり、これがライフサイクルを制御する。デバイスでARがサポートされているかなどをセッション状態として確認することができる。

 

AR Session Origin コンポーネント

 ARセッションの原点 (0, 0, 0) を元にして現実世界の位置とか向きなどをアプリ内の空間のものに変換してくれる。

 

AR Pose Driver コンポーネント

 

AR Camera manager コンポーネント

 

AR Camera Background コンポーネント

 

AR Input Manager コンポーネント

 

 

 

 

 

 

 

【AR】【Androiod】Unity AR Foundationのサンプルプロジェクトを動かす ※覚書

自分用の覚書

 

サンプルプロジェクトをダウンロードする

 こちら(https://github.com/Unity-Technologies/arfoundation-samples)のGitHubリポジトリにアクセス。

github.com

 

「Code」ボタン > Download ZIP と選択。

f:id:Hiesuke:20210225094859p:plain

 

ダウンロードした arfoundation-samples-main.zip を展開してお好きなフォルダに用意する。

Unity Hubで「リストに追加」して開く。※Unityバージョンは2020の最新版にアップグレードしましょう

 

Package ManagerのIn Project一覧を表示して追加済みのパッケージを確認すると何やらたくさん追加されているけど、とりあえずキニシナイで環境構築のときと同じ手順でAndroidにSwitch Platformしましょう。
Scenes In Buildの欄には、様々なAR機能の確認用シーンが既に登録されています。
Player Settings...から確認するとわかりますが、PlayerやXR Plug-in Managementの項目はすでに良い感じで設定されています。

 

あとは端末(スマホ)を繋いでBuild & Runすれば実行できるはずです。

無事に実行できたならば、アプリ画面に様々な機能確認用のシーンに移動するボタン群が表示されます。

f:id:Hiesuke:20210225103224p:plain

Android(ARCore SDK Plugin)だと使えない機能が多そうです。

 

さてこれからサンプルプロジェクトを読んで色々とお勉強していかないといけませんね。山道続く・・・

 

 

 

【AR】【Androiod】Unity AR Foundationの開発環境構築 ※覚書

自分用の覚書です。

 

(1) Unity Habをインストールし、そこからUnity 2020をインストール

※いままで推奨通りUnity 2019を使ってましたがもう今日から2020しか使わないぞ!

※これを書いている現在は Unity 2020.2.6f1ですな。おいおい毎日アップデートされてるぞ

※Unity 2021もアルファ版&ベータ版が出てきてる。怖い・・・

f:id:Hiesuke:20210224173029p:plain

 

(2) Unity 2020でプロジェクトを新規作成

(3) Windowメニュー > Package Managerと選択してPackage Managerを起動

(4) Unity registryの一覧表示にして、検索窓にARと入力

f:id:Hiesuke:20210224173339p:plain

 

(5) AR FoundationとARCore XR Plugin(Android開発用)を「Install」

 ※必要ならARKit XR Plugin(iOS開発用)も「Install」

 

(6) Fileメニュー > Build Settingsと選択

(7) Platform欄のAndroidを選択して「Switch Platform」

(8) 「Player Settings...」をクリック

(9) Company Name欄に自分の名前or会社名を入力

(10) 「Other Settings」を展開

(11) Graphics APIsからValcanを削除(Valcanを選択して「ー」ボタン)

(12) 「+」ボタンからOpenGLES2を選択

(13) Auto Graphics APIチェックボックスにチェックを入れる

(14) Multithreded Renderingのチェックを外すf:id:Hiesuke:20210224174435p:plain

 

(15) Minimum API LevelをAndroid 7.0 'Nougat' に変更

(16) Scripting BackendをIL2CPPに変更

(17) ARM64のチェックボックスにチェックを入れる

f:id:Hiesuke:20210224174545p:plain

 

(18) 左のXR Plug-in Managementを選択してARCoreのチェックボックスにチェックを入れる

f:id:Hiesuke:20210224174846p:plain

 

ダイアログウインドウを閉じて、環境設定はこれでおしまい。・・・たぶん

 

余計な設定もありそうに思ってるんだけど、AR Foundationの公式サンプルプロジェクトを開いて設定を確認したらこうなってたので、とりあえずこれで行きたい所存。

 

続いて開発入門を覚書しようと思ってる。

 

【AR】【Android】Unity AR FoundationでARアプリ開発を始めるっぽい

ARアプリ開発を始めようと環境設定をして苦労したというお話

 

Android端末でのARアプリを開発しようと開発マシン(PC)の設定をしてて無茶苦茶苦労したのだけど、結論から言うと

・Unity 2020.2*1を使えば余計な設定いらない

という状況でした。Unityだけで他のアプリやら他のライブラリいらないのよ、Unity純正の機能追加だけでオッケー!

 

Android用のARアプリを作成するにはARCore(Project Tango?)という機能を使うのがセオリーってことで「Unity  ARCore  開発  Android」とかで検索すると色々と記事が出てくるのですが、基本としてはUnity 2018 のほかに Oracle JDK8 + Android Studio(のSDK ManagerとNDK)をインストールしてUnity側でそれらのアプリやらを使う設定を行う(Edit > Preference > External Tools)ことが必要でそれが書かれているのですが、記述通りに行ってもうまくいかなかったんですよね。GradleのテンプレートファイルやらAndroid Manifestの書き換えやらGradleのバージョンを合わせるやらNDKを別途持ってきてインストールするやら……をしてハマる嵌る・・・)

Unity 2019になると、更にXR Legacy HelpersとかMultiなんちゃらというUnityの機能も追加して環境を作らないといけなかったり。まあ環境構築できなかったんですが。

Unity 2020でも同じような設定で環境設定をしようして駄目だったのですが、ARCoreの後継というか上位層としてのUnity純正機能「AR Foundation」で色々試していたら環境設定ができあがりました。まあそれがUnity 2020.2 ならJDKもNDKもGradleのUnityインストール時に一緒に追加するAndroidモジュールでイケルみたいだなということでした。長々書いちゃいましたが、長々と回り道しちゃったなと。

では、ゆるゆると開発に取り組んでみたいと思います。
次の記事は、AR Foundationでの開発入門記事になるかも。まずはTryしてみます!

 

 

*1:自分は2020.2.5f1でした

【Android】ビューバインディング(View Binding) を使いましょうと教えていただきました

ご注意:この記事はまだKotlinではAndroidアプリを一度も(一度も!)作ったことのない人間が書いています。ほんと、お触りしかしたことないのですよ。いろいろごめんなさい。

 

KotlinでAndroidアプリを作る人は「findViewByIdなんて使わなくてもいいんだぜ!キャストが不要になったからっていちいち参照を取得するなんてかったるくてやってられないぜ!! import kotlinx.android.synthetic.main.activity_main.* って書くのはまあちょっとめんどくさいけどな」ってJavaな人にユーエツカンを抱きながら開発をしていると思っているのですけど※1、この synthetics という機能はもう使えなくなるようですね。まあ、超久々にKotlinを試してみたところ使えなくなってたのでググって調べたらわかっただけなんですが。詳しくは↓こちら。

developers-jp.googleblog.com

 

というわけで皆さん、2021年9月に完全終了する機能からAndroidの公式ライブラリであるビューバインディング(View Binding)に切り替えましょう。こちらはJavaでも使えますので。詳しくは↓こちら。

developer.android.com

 

でも個人的にはfindViewByIdが超好きなのですが(老害脳)。

 

おしまい

 

※1 超偏見

【VR】株式会社ハシラス様のライドデバイス「キックウェイ」を使ったアプリを作った

みなさま年末進行お疲れ様です。忙しい中ですが何モノにもなれないHiekichiがお送りいたします。ネンマツシンコー!

 

これは

qiita.com

の12月23日の記事です。たぶん・・・

 

・・・というわけで、表題のとおりライドデバイス「キックウェイ」(by ハシラス)用のアプリを作りました。

作ったのですが、どこまでオープンにしていい情報なのかわからないので、絶対に大丈夫だろうということを箇条書きで記してみます。

 

■キックウェイについて

・キックウェイは風(サーキュレーター)と床移動(左右にちょっと動いたり振動したり)を制御できる乗り物風デバイスVRと連動させて体験させることで体験の質を向上させる。

・キックウェイとUSBで繋がっているPC上でキックウェイのハードウェア(HW)を制御するソフトウェア(サービス)が動いている。キックウェイ対応アプリは専用のコンポーネントを介してHWの制御をサービスに依頼している。ちなみにIPアドレスを指定するだけの簡単設定。

・ハードウェア制御ソフトウェアへの依頼(指示)は、スクリプトから行うこともできるけどTimelineに風とか床移動とか床回転のトラックを作成して、時系列に沿ったクリップを配置するだけでOK。素晴らしい。

 

■作ったアプリについて

・グライダーに乗って飛ぶのを体験するっぽい気持ちのアプリ。

・風を受けて(サーキュレーターが回って)乗ってる(つもり)のグライダーが回転したり浮上したりする。そのグライダーの移動に合わせて風や床移動などのクリップをタイムラインに配置した。

・カメラの移動はタイムラインで行わせるのがふつ~だと思うけど、Cinemachineを使ってみたかったのでそいつのDolly Cart機能でOculus用のカメラ(OVRCameraRig)を移動させている。

・Oculus Quest 2用のアプリとして作った。キックウェイに繋がっているPCで動くHTC Vive用のアプリとして作るのが普通だと思うけど。

 ・開始と終了がめんどくさい(ViveだとPCのキーボードで開始が指示できるけど、Oculus Questだとそうはいかない)ので、アプリ起動とともに児童開始されて延々とループするようにした。

・アプリ開始と同時にDolly Cartでのカメラ移動と、Timelineの開始を行う。カメラの移動が一周したタイミングでTimelineを再度実行させるようにしてみた。まあ、だいたい合ってればいいかなと。

 

 

■その他

 ・HTC Vive用のアプリも初めて作ってみた。でもやっぱりなんか性に合わない。なぜだ?

 

動作はこんな感じです。Vive用に改めて作ってみました。適当な無料アセット(Skybox、シーンなど)をダウンロードしてSteamVR PluginやCinemachineの設定、Timelineなどを作って手直しして・・・で、2時間くらいでした。

www.youtube.com

 

 

というわけで、23日の記事でした。

明日は @godan09先輩の「ちょっとポエムでも書くか「入社3年目から見える風景 もしくは 激動の2020年と2021年生存戦略」という記事です。後輩の皆様ご拝聴くださいませ。楽しみですね。セイゾンセンリャクー!

 

おっと、明日の晩はクリスマスですね。昔は「日没から翌日の日没までが1日だった」ので、12月24日の日没から12月25日の日没までがクリスマスであり、12月24日の日没から12月25日の日の出までが夜(クリスマスのイブニング=クリスマスイブ)である。ってことをアイザック・アシモフ先生のエッセイで知った、ということは毎年なにかしらで伝えていきたいと思います。

間違っても23日をイブイブとか言うなよ! 

 

では良いクリスマス&新年を!