このページの本文へ

Swift Playgroundsで学ぶiOSプログラミング第94回

現実世界の水平面を検出する方法

ARKitを使って非現実世界との融合に備える

2018年07月11日 17時00分更新

文● 柴田文彦 編集●吉田ヒロ

  • この記事をはてなブックマークに追加
  • 本文印刷

 前回からARKitを利用するプログラムに取り組んでいます。とりあえず前回は、自分のiPadでARKitが動作するかどうかを試すために、簡単なテストプログラム的なものを動かしてみました。そこでは、まずARKitを通してiPad内蔵カメラにアクセスし、現実世界の映像を画面に表示しました。その後、文字列から作った3Dオブジェクトを現実世界の映像に重ねて表示してみました。これで、ひとまず現実世界と非現実のコンピューターグラフィックスを合成することができました。

 しかし、前回示した例では、現実世界のどこに何があるかという、人間なら当然認識している情報とはまったく関係なく、プログラム起動時のカメラの正面付近に3Dオブジェクトを配置していました。もちろん、そのオブジェクトは、あたかも現実世界に固定されたかのように振舞います。その後でカメラを動かしても、オブジェクトは元の場所に留まっていました。大きくカメラを動かせば、カメラの視界から消え、また元の方向にカメラを向けると、再び表示されるといった具合です。

 しかし前回のような表示では、変な言い方になりますが、非現実的な3Dオブジェクトのリアリティが今ひとつという感じでした。オブジェクトが現実世界とは関係ない位置に浮いていたからです。例えば室内では床の上に、外では地面に3Dオブジェクトが置かれているように配置できれば、現実と非現実が融合した感覚が味わえるはずです。拡張現実というのは、そもそもそういうものですし、もちろんARKitにもそのための機能が備わっています。

 そうした表示を実現するには、まず現実世界がどのようになっているのか、認識する必要があります。もう少し具体的に言えば、床や地面、あるいは壁がどこにあって、その平面の座標はどうなっているかを知らなければなりません。それらが分かれば、その座標に合わせて3Dオブジェクトを配置することができます。

 今回は、そのような現実世界の認識の第1歩として、カメラで撮影している映像の中にある水平面を認識する機能を試してみることにしましょう。

ARKitのデバッグ用表示をオンにして認識機能の動作を確認

 前回に示した最初のプログラムは、ARKitに含まれるシーンビュー(ARSCNView)を画面に表示するだけのものでした。見た目は、単にカメラの映像を画面に垂れ流しているだけのようにしか思えないものでした。実はその際にもARKit内部では、現実世界を認識しようとする機能が動いていたのです。そのような動作の一端は、ARKitのデバッグ機能をオンにすることで、画面で確認できるようになります。

 今回もまずは、前回の最初のプログラムとほとんど同じものから始めます。最初にビューコントローラーのviewDidLoadメソッドの中で元のビューをシーンビューに置き換えます。

今回も、前回のARKitの動作を確認する最初のプログラムと同様のところから始めます。まずはビューコントローラーを定義し、そのviewDidLoadメソッドの中で、ビューコントローラーのビューをシーンビューに置き換えます

 次に前回と同様に、viewWillAppearメソッドの中でARWorldTrackingConfigurationのオブジェクトを起動します。ただし今回は、そこでシーンビューのデバッグオプションを設定します。複数のオプションを同時に設定可能ですが、とりあえずshowFeaturePointsをオンにします。

viewWillAppearメソッドの中でシーンビューのセッションを開始するのも前回と同じです。しかし今回は、シーンビューのデバッグオプションとして、showFeaturePointsを設定し、面の検出機能が動いていることを確かめます

 これは文字通りフィーチャーポイントを表示するというものです。このフィーチャーポイントは、日本語では「特徴点」と訳すことができます。カメラで撮影している現実世界の物体の位置関係を表す特徴的な点のことです。このオプションをオンにすると、ARKitが検出中の特徴点を黄色いドットとして画面に表示ます。

シーンビューが検出したフィーチャーポイントは、黄色い点として表示されます。この点は撮影中の映像の変化に応じて現れたり消えたり、移動したりします。ちょっと気味悪く感じられるかもしれません

 よく言えば、黄色い光を放つ蛍が飛んでいるような、悪く言えば黄色い虫が這っているような映像が確認できるでしょう。

この連載の記事

週間ランキングTOP5

ASCII倶楽部会員によく見られてる記事はコレだ!

ASCII倶楽部の新着記事

会員専用動画の紹介も!