連載:C++で始めるLeap Motion開発 ―― タッチUIの先のカタチ ――
Leap Motionの使いどころ
最終回。これまでの連載内容を活用してLeap Motionに最適なアプリを作る場合、どのようなものがよいのか? 筆者が考える2つの方法とは?
これまでの連載でLeap Motionを使ったアプリを作成する土台は整った。では、これらを活用してLeap Motionに最適なアプリを作るには、どのようなものがよいのか。筆者の所感を記したい。多分に好みが入る部分であるので、参考程度にしていただければ幸いだ。
まずLeap MotionはUI(ユーザーインターフェス)に特化しているが、普通のコンピューター環境で使うにはまだ難がありそうだ。Leap Motionのストアである「Leap Motion App Store」にはさまざまなアプリがあるので試してみるとよいだろう。旧バージョン1向け作成した「Leap MotionでWindowsを操作するアプリ」を発展させた、Leap MotionでPCを操作するアプリもあるが、実際にやってみると、それほど上手には操作できないことが分かる。今までのデバイスに比べると精度が良いため、細かい操作も比較的やりやすくはなっているが、現状の入力デバイスを置き換えるかというとそうはいかないだろう。また、手を上げたままで操作するため非常に疲れる。これらはKinectが登場したときから言われていたことだ(もちろん企業や研究などでその前から取り組んでいる方は、Kinect登場以前から感じていることだろう)。
ではどのようにするのがよいか。筆者は2つの方法を特に有効と考えている。1つの方法は「触れないものに触れるようにする」ことだ。もう1つは「触ることができない環境で利用する」ことだ。実は、この2つはKinectを含むモーションセンサー全般に言えることである。
触れないものに触れるようにする
Leap Motionのような触らないデバイスで、触れること。というのは矛盾や、意味がないことのように思われるだろう。しかし「今まで触れなかったものに触れるようにする」と考えるとどうだろうか。
Leap Motionとプロジェクター
センサー類と相性が良いと感じているものがプロジェクターだ。プロジェクターは、普段はスライドなどを投影する機材というイメージだが、プロジェクションマッピングのような使い方を見ると、現実空間に仮想空間を投影するデバイスと考えられる。この現実空間と仮想空間の橋渡しにLeap Motionを利用する。
例えば次の動画はKinectとプロジェクターを利用して、何の変哲もない階段を、音が出て光る階段に変えている。
プロジェクションマッピングとKinectを組み合わせた光る階段
また次の動画は、壁に投影したPCの画面をKinectで操作しているものだ。Leap Motionのタッチ機能もこのように利用すると使いやすくなるだろう。
KinectによってどこでもタッチパネルでPCを操作する
Leap Motionと立体ディスプレイ
3Dディスプレイや、立体ディスプレイなど、3次元的に出力できるデバイスがある。これを利用して立体的に浮き出た、例えば3DモデルをLeap Motionで操作するのはどうだろうか。従来であれば触ることができない、または触るように操作できないもの(3Dモデル)を触るように操作できる。
※これは「http://channel9.msdn.com/coding4fun/kinect/Kinect--3D--Fusion4D」の最初の画像です。
筆者はLeap Motionと立体ディスプレイを使って、空間に浮き出たモデルを操作するアプリを過去に開発した。実際に操作も行いやすく、評価も上々だ。
Leap MotionとHMD(ヘッド・マウント・ディスプレイ)
現状でLeap Motionの一番の使いどころは、「Oculus Rift(オキュラス・リフト)」のようなVR系のHMD(ヘッド・マウント・ディスプレイ)との組み合わせだろう。Leap MotionのメールニュースでもほぼVR系のトピックスとなっている。Oculus Rift(図2)は、VR(バーチャルリアリティ: 仮想現実)のためのデバイスで、頭部に装着することで、立体映像を楽しむことができる。
このOculus RiftとLeap Motionを組み合わせた例が次の動画だ。
Oculus RiftとLeap Motionを組み合わせた例
Leap Motionでは、Unity環境用のLeap Motion+Oculus Riftのアセットを配布している。開発者は、このアセットに入っているLeap Motion+Oculus RiftのカメラをUnityのシーン空間に配置するだけで、VR空間内に自分の手を入れることができる。このアセットは、認識した手をUnityのオブジェクトとして扱ってくれるため、Unity空間内のオブジェクトとのあたり判定を持つことができる。これによって、メニューなどを追加することができ、見るだけのコンテンツから、ユーザーが触れる、操作できるコンテンツに変わっていく。
触ることができない環境で利用する
Kinectが手術室で利用される例があることはご存じだろうか。次の動画はKinectの活用事例で有名な“Opect”と呼ばれる手術支援システムだ。
"Opect" surgery driven by KINECT Jpn ver.
手術室では、術者は手袋を着用するが、この状態で患者以外に触れることはできない。しかし患者のカルテなど、術者の意志で操作したい情報がある。このような制約に置いて非接触のインターフェースは効果を発揮している。Kinectを利用すると、ある程度の距離が必要になるが、Leap Motionであればそれを手元で行える。
まとめ
このようにLeap Motionを有効に活用するには、考え方、使い方、置き方など含めて、今までの常識を超える必要があるだろう。また出力デバイスの進化によってLeap Motionをはじめとする入力デバイスの利用範囲が広がっていくということが想像できる。併せてウォッチしておきたい分野だ。
読者の方々にとって、この記事が少しでも何かのきっかけになり、素晴らしいアプリを世の中に出してくれることを願っている。
※以下では、本稿の前後を合わせて5回分(第2回~第6回)のみ表示しています。
連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。
2. Leap SDKで指を検出してみよう(Tracking Hands, Fingers, and Tools)
Leap Motionの最大の特長である手・指を検出するには? Leap Motion Developer SDKを活用した開発方法を詳しく解説。
3. Leap Motionでのタッチ操作はどう開発するのか?
Leapアプリのタッチ操作の認識方法と開発方法を説明。今回のサンプルでは、タッチを表現するためのGUIフレームワークとして「Cinder」を利用する。
5. Leap SDKのいろいろな使い方(フレームデータ、イベントなど)
データ取得方式「コールバック」「ポーリング」の選択指針とは? Leap Motionイベントをポーリング方式で処理する方法や、フレーム履歴、手/指IDの取得についても解説。