10連休に改めてARを勉強する日記 その1

投稿者: nantekottai 投稿日:

Pocket

10連休に改めてARを勉強することにした。まずは1日目から3日目まで。

Day 1

10日間でARを勉強するにあたって、どこから手をつけていくか検討する。QiitaやTwitterを見る限りでは、ARKitとAR.jsが人気の様子だったので、この二つのどちらかを試していくことにした。10日間もあるので、この日はひたすらARKit / AR.jsのそれぞれのサンプルや記事を見ながら、何ができるのか/全体像を外から把握していくことにした。

ARKit関連

ここで困った問題が発生した。公式サンプルはビルドできるものの、ARKit-SamplerとARKit-Emperorはビルドの途中でmacOS全体が応答しなくなってしまう問題が発生してビルドできない。環境依存の問題かと思ったが、iMacとMacBookいずれでも発生してしまい、先に進めなくなってしまったので、一旦これらのサンプルのビルドは断念。

AR.js関連

スマホでの動作確認にHTTPS通信が必要なため、ngrokなどを使う必要があってそこが面倒臭いのだが、ブラウザで動作するというのは気軽でよかった。ただ、開発がアクティブに行われているためドキュメント/ネット上のサンプルと最新の仕様が違っていたり、ARToolKitベースなのでARKitに比べると精度・機能・パフォーマンス的には劣る部分がある。

結局初日はARKit / AR.jsそれぞれのサンプルをいじるだけで終わってしまった。

Day 2

ARKit-Sampler / ARKit-Emperorのビルドの途中にOSが応答しなくなる問題の原因がわからないのは懸念事項だが、やはり精度とデバッグのしやすさなどを考えて、今回はARKitの方を勉強していくことにした。

公式ドキュメントとネット上の記事を読みながらマーカーのトラッキングとSceneKitについて勉強を進める。公式ドキュメント以外では、下記の記事がわかりやすくてよかった。

ARKitのマーカーは面白い。ARToolKit系ではマーカーはQRコードを使うことが多かったが、ARKitではカラーで特徴的な画像をマーカーに使う。確かにカラーでの識別が前提となれば白黒のQRコードよりもカラー画像の方がマーカー間の識別は効率が良さそう。

ARKitには環境マッピングのテクスチャ自動生成機能が用意されていることも知り、至れり尽くせりだなと思いつつも、ARKit以外にも色々と勉強しなければいけない範囲が大きいなということも見えてきた。10日間でどこまで勉強できるか…。

  • 二つのConfigurationの違い「画像追跡」と「画像検出」
  • SceneKitの使い方
  • シェーダーの書き方

ARKitと関係ないが、マーカーを毎回画面に出すのが面倒くさい、かつ液晶上に表示されたマーカーは認識されにくいということもあり、コンビニで印刷して使うようにしたら便利だった。ただ、黒いインクは反射が起こりやすく、認識の妨げになるようだった。

Day 3

2日目も割とサンプルを読みながら動かすことを重視してしまったので、もう一度公式ドキュメントをしっかり読んでARKitの基礎を理解することにした。

画像追跡と画像検出の違いについてはこちらの記事がわかりやすかった。ARKit 2.0から追加された画像追跡は、超ハイパフォーマンスで動作し、マーカーの動作にも追随していくことができるが、マーカーが画面の外に出てしまった場合に座標を保存しておくことができなかったり、平面検知や環境マッピング用のテクスチャ生成などができないなど色々と制約がある。一方で画像検出の方はマーカーの動作に高速に追随していくことができない。どちらを使うべきかは作っていくアプリの内容に合わせて選んでいく必要がある。

その後、マーカーの認識精度について色々実験をしてみた。マーカーを色々なサイズで印刷し、どの程度の距離で認識できるかを試していた。画像追跡の方では、一度認識をした後は少し距離が離れていても引き続きマーカーを認識できるのだが、一度カメラの外に出てしまったりした場合は、ある程度近づかないと認識できない、という少し特徴的な挙動を確認できた。

一旦、三日分の勉強の内容をまとめて、勉強用に書いたコードを綺麗に整理したりしていたら1日終わってしまった。3日間でARKitを使うARアプリの基本的な構造と何を勉強するべきかは少し見えてきた気がする。ひとまず、今後何を作るにせよ、画面の表示の部分に使うSceneKitの理解と3D数学の理解がすぐに必要になってきそうなので、4日目はその辺りを勉強しようと思う。

続きはこちら

カテゴリー: ARiPhone

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です