書籍転載:Intel RealSense SDKセンサープログラミング(3)

書籍転載:Intel RealSense SDKセンサープログラミング(3)

RealSense SDK Unity ToolkitによるUnityアプリ開発の基礎
― Chapter 8 Unityで作る「ゲーム/ノンゲーム」アプリケーション ―

2015年8月11日

インテル RealSense SDK Unity Toolkitの概要と、それがUnity向けに用意している各種機能を紹介する。

前本 知志
  • このエントリーをはてなブックマークに追加

 前々回前回は、インテル RealSenseテクノロジーの概要を紹介しました。今回からは、インテル RealSenseの活用方法がイメージしやすくなるよう、実際のサンプルアプリ開発を紹介します。

書籍転載について

 本コーナーは、翔泳社発行の書籍『Intel RealSense SDKセンサープログラミング』の中から、特にBuild Insiderの読者に有用だと考えられる項目を編集部が選び、同社の許可を得て転載したものです。

 

 『Intel RealSense SDKセンサープログラミング』の詳細や購入は翔泳社のサイト目次ページをご覧ください。プログラムのダウンロードも、翔泳社のサイトから行えます。

ご注意

本記事は、書籍の内容を改変することなく、そのまま転載したものです。このため用字用語の統一ルールなどはBuild Insiderのそれとは一致しません。あらかじめご了承ください。

 本章ではUnityを使って作成するアプリケーションの例を紹介します。どのようにしてインテル RealSenseテクノロジーの機能が使えるか、参考にしてください。

8-1 SDK Unity Toolkit

 インテル RealSense SDKでは、Unityから簡単に利用できるようにUnityパッケージ形式でツールキット「SDK Unity Toolkit」が提供されています。まず、このツールキットについて、解説します。

8-1-1 SDK Unity Toolkitについて

 「SDK Unity Toolkit」はUnityアプリケーション構築の際にインテル RealSense SDKを少ないコーディングで手軽に利用できるように整備された便利なスクリプトやプレファブから構成されるユーティリティのセットです。SDK Unity Toolkitを利用すれば、簡単なアプリケーションはパーツをシーンに配置してプロパティを設定するだけで構築することができるので非常に優れたものだと筆者は感じています。ぜひ初心者の方もSDK Unity Toolkitを使って目に見えて動いてすぐ試せるアプリケーションを作って楽しんでみてください!

 もちろんエキスパートな開発者であれば、SDK Unity ToolkitをベースにインテルReal Sense SDKのC# SDKを直接利用することができますので、高度な機能も余すところなく利用することが可能です。

>SDK Unity Toolkitの構造

 SDK Unity Toolkitとインテル RealSense SDKの関係は図8.1のような階層構造になっています。SDK Unity Toolkit経由でSDK Unity C#のオブジェクトを取得できるので、開発者のスキルや知識に応じて柔軟な開発ができるようになっています。また、中間層のパッケージでPCまたはUnity Web Playerへ書き出したときの差異を吸収するようになっています。

図8.1 SDK Unity Toolkitの構造

図8.1 SDK Unity Toolkitの構造*1

 各中間層パッケージはC:\Program Files (x86)\Intel\RSSDK\framework\Unity配下に配置されていますので、Unityにインポートして利用します。このとき、Unity Web Player用パッケージUnity.WebPlayer.unitypackageをインポートすると大量のコンパイルエラーが発生しますが、これはPC用のライブラリとの重複部分があることが原因です。Assets\Plugins.Managed\libpxcclr.unity.dllを手動削除すれば解決することができます。

>SDK Unity Toolkitの構成要素

 SDK Unity Toolkitは表8.1の4つの構成要素からなっています。とくに「Action」「Trigger」「Rule」は、それぞれ図8.2のように関係しています。

要素説明
Prefab Prefabは、あらかじめインテル RealSense SDKの機能が実装済みですぐに利用できる部品。例えばカラー画像を表示するImageやデバッグ表示をしてくれるDebug Viewerなど便利なものが用意されている
Action Actionはシーン内のGameObjectに対する特定の動作を表す。例えば「移動させる」ならTranslation Action、「回転させる」ならRotation ActionといったActionがあらかじめ用意されている。
ActionはTriggerから発動される。Actionは種類によって固定のTriggerが設定されているものと、任意のTriggerを追加して利用できるものがある
Trigger Triggerはセンサーが検知する何らかユーザーの動作やイベントを表す。Triggerは種類に応じて設定できるRuleの種類が決まっており、それらの中から選択して付与することで発動条件を指定する。例えば、一連の動作の開始から終了までを表すTrackingTrigger、回転動作を表すRotationTriggerなどが用意されている
Rule RuleはTriggerがどんな条件でActionを発動させるかという条件を表す。1つのTriggerには複数のRuleを設定することができ、どれか1つでもRule条件が満たされるとTriggerが発動する。例えばEventTriggerに付与できるHandClosed Ruleの場合は、
・左右どちらの手を検知するのか?
・距離が近い手遠い手どちらを検知するのか?
・どの程度の閉じ具合で検知するのか?といった細かいルール設定をすることができる
表8.1 SDK Unity Toolkitの構成要素
  1. スマイルレベルが50以上になってRule条件を満たしたらTriggerが発動!
  2. ActionがGameObjectを移動させる!
図8.2 Action、Trigger、Ruleの関係。スマイルでGameObjectを移動させる例

8-1-2 SDK Unity Toolkitのプレファブ

 ここではSDK Unity Toolkitに用意されているプレファブ(Prefab)を簡単にご紹介します。シーンに配置するだけで使えるので、ぜひ試してみてください。

>Debug Viewer

 Unityプロジェクトからインテル RealSense SDKやインテル RealSense 3Dカメラが正常に利用できるか簡単にテストすることができるプレファブです。深度(Depth)映像や手などの認識状況をリアルタイムに表示してくれます。

図8.3 Debug Viewerプレファブ実行時

図8.3 Debug Viewerプレファブ実行時
>Face tracking, Full Hand tracking-(left,right), Image, ImageSegmentation

 顔のトラッキング(Face tracking)、手のトラッキング(Full Hand tracking-leftかRight)、カラー映像(Image)、背景抜きカラー映像(ImageSegmentation)をリアルタイムに表示してくれるプレファブです。

図8.4 Face tracking, Full Hand tracking-(left,right), Image, ImageSegmentationプレファブ実行時

図8.4 Face tracking, Full Hand tracking-(left,right), Image, ImageSegmentationプレファブ実行時
>PointCloudMesh

 3Dスキャンを行って奥行情報からポリゴンメッシュ化した物体をリアルタイムに可視化してくれるプレファブです。PointCloudMaterialプロパティを変更することで表面の色等の表現を変えることもできます。

図8.5 PointCloudMeshプレファブ実行時

図8.5 PointCloudMeshプレファブ実行時
>Sense AR

 AR(Augmented Reality)アプリケーションを開発するために利用できる、現実世界を映し出すカメラと仮想世界を映し出すカメラ、2つのカメラを重ね合わせて画面表示を行ってくれるプレファブです。

図8.6 Sense ARプレファブ実行時

8-1-3 SDK Unity ToolkitのAction

 ここではSDK Unity Toolkitに用意されているActionの利用方法をご紹介します。

>Actionの追加

 Actionの追加はUnityのメニューから行うことができます。ここではサンプルとして、手を閉じると立方体が消えるものを作ってみましょう。

 まずは新規のシーンに光源としてDirection LightとCubeを1つ配置しましょう(図8.7)。CubeはMain Cameraから見える位置に配置します。この例では原点(Position:X=0, Y=0, Z=0)に配置しました。

図8.7 シーンに光源とCubeを配置

 Cubeを選択した状態でUnityの[RealSense Unity Toolkit]メニューから[Add Action]→[Hide]を選択します(図8.8)。

図8.8 HideActionをメニューより追加

 これでCubeにHideActionが追加されます。Inspectorビューを見ると、デフォルトでGesture DetectedのRuleが付与されており、ジェスチャーを認識したときにActionが発動するようになっています(図8.9)。

図8.9 HideActionデフォルト状態のInspectorビュー

 ではここでアプリケーションを実行してみましょう。ゲーム画面が表示されたら、カメラに向かって手を握ってください。右手でも左手でも構いません。

 いかがでしょう。手を握った瞬間にCubeが消えましたね(図8.10)。

図8.10 手を握るとHideActionが動作してCubeが消える

図8.10 手を握るとHideActionが動作してCubeが消える

図8.10 手を握るとHideActionが動作してCubeが消える
>Actionの追加

 SDK Unity Toolkitには様々なActionが用意されています。表8.2は、主なActionの一覧です。

Action説明
Hide GameObjectをrenderer.enabled=falseとして非表示にする。デフォルトでは手を握ると実行される
Translate GameObjectの移動を行う。移動開始、移動、移動終了の3つのトリガーを設定可能。デフォルトでは手を握ると移動開始、握っている間移動を行い、手を開くと移動終了となる
Rotation GameObjectの回転を行う。回転開始、回転、回転終了の3つのトリガーを設定可能。デフォルトでは両手を握ると回転開始、両手を握って動かしている間回転を行い、両手を開くと回転終了となる
Deactivate GameObjectsプロパティに指定された対象GameObjectをActive=falseとして非アクティブにする。デフォルトでは手を握ると実行される。このActionはアタッチされたGameObject自身には影響を与えず、GameObjectsプロパティで指定されたGameObject群を処理対象とするので注意
Tracking GameObjectの位置や回転方向をトリガーの認識に追従して変更する。追従開始、追従、追従終了の3つのトリガーを設定可能。デフォルトでは手を認識すると追従開始、手を認識している間追従を行い、手の認識が失われると追従終了となる
Disable Behavior GameObject内Behaviourをenabled=falseとしてコンポーネントを無効にする。デフォルトでは手を握ると実行される
Show GameObjectをrenderer.enabled=trueとして表示する。デフォルトでは手を握ると実行される
Facial Animation 表情の状態をGameObjectのブレンドシェイプへ反映しアニメーションさせる
Scale GameObjectの拡縮を変更する。拡縮開始、拡縮、拡縮終了の3つのトリガーを設定可能。デフォルトでは両手を握ると拡縮開始、両手を握って動かしている間拡縮を行い、両手を開くと拡縮終了となる
Enable Behavior GameObject内Behaviourをenabled=trueとしてコンポーネントを有効にする。デフォルトでは手を握ると実行される
Activate GameObjectsプロパティに指定された対象GameObjectをActive=trueとしてアクティブにする。デフォルトでは手を握ると実行される。このActionはアタッチされたGameObject自身には影響を与えず、GameObjectsプロパティで指定されたGameObject群を処理対象とするので注意
Send Message トリガーが発動した時にFunctionNameプロパティで指定したUnity内でのメッセージを送信する。既存のActionでは実現できないカスタム処理をスクリプトで記述するケースなどで利用できる
表8.2 SDK Unity ToolkitのAction一覧

8-1-4 SDK Unity ToolkitのTrigerとRule

 ここではSDK Unity Toolkitに用意されているTriggerとRuleの利用方法をご紹介します。

>TriggerとRuleの追加

 TriggerはActionに追加して利用します。前項で紹介したサンプルに追加設定してみましょう。現在、CubeのAction設定は図8.11のように、手を握るとオブジェクトを非表示にするTriggerとRuleが設定されていますね。

 では、追加でにっこりスマイルをしているときだけ顔でCubeを動かせるようにしてみましょう。Cubeを選択した状態でUnityの[RealSense Unity Toolkit]メニューより[Add Action]→[Tracking]を選択します(図8.12)。

図8.11 CubeのAction設定(デフォルト状態)

図8.11 CubeのAction設定(デフォルト状態)
図8.12 TrackingActionをメニューより追加

図8.12 TrackingActionをメニューより追加

 TrackingActionが追加されました。デフォルトでは手の動きの認識に応じてオブジェクトを移動させるTriggerとRule設定があらかじめされています。

 Inspectorビューを見ると、Actionの開始を表すStartEventのTriggerには手を認識したしたことを表すHandDetectedのRule、認識中を表すTracking SourceのTriggerには手の追跡を表すHandTrackingのRule、Actionの終了を表すStopEventのTriggerには手の認識を失ったことを表すHandLostのRuleがあらかじめ付与されています(図8.13)。

 では、認識開始を示すTrigger、StartEventに笑顔の認識Ruleを追加しましょう。Start Eventの[Add]ボタンをクリックすると追加できるRuleのリストが表示されますので、
[Facial Expression Detected]を選択します(図8.14)。

図8.13 TrackingActionのデフォルト設定

図8.13 TrackingActionのデフォルト設定
図8.14 表情認識Ruleの追加

 追加されたFacial Expression Detectedを展開すると、デフォルトで笑顔(EXPRESSION_ SMILE)がレベル30を超えたらTriggerを発動する条件が設定されていますのでこのまま利用しましょう(図8.15)。Hand DetectedのRuleは利用しないのでチェックを外しておきま
す。

 同様の手順でTracking SourceにFace Tracking、Stop EventにFacial Expression Lostを追加しましょう。Hand系のRuleはチェックを外して無効とします。

 設定を終えると図8.16のような設定となります。

図8.15 笑顔でTriggerを発動させるRule設定

図8.15 笑顔でTriggerを発動させるRule設定
図8.16 笑顔をしている間Triggerを発動させるRule設定

図8.16 笑顔をしている間Triggerを発動させるRule設定

 ではここでアプリケーションを実行してみましょう。少しコミカルな動きになるので周囲の人の視線に気を付けつつ、カメラに向かってにっこり素敵なスマイルを作ってください。そしてそのまま顔を前後左右に動かしてみましょう。

 いかがでしょう。顔の動きに合わせてCubeが移動しますね。また、スマイルをやめたり顔が認識されなくなるとCubeは移動を停止します。

 もし、顔の動きとCubeの動きが合わない時は視点がずれているかもしれません。その場合はMain Cameraの向きや位置を調整してみてください。

 動作がわかりやすいようにImageプレファブからImageオブジェクトを追加してみると、
図8.17のような感じとなります。

図8.17 笑顔になるとCubeが移動する
>TriggerとRuleの種類

 SDK Unity Toolkitには様々なTriggerとRuleが用意されています。膨大な組み合わせがありますのでここではすべてを紹介しきれませんが、いろいろと組み合わせの設定を試して、どのような動きになるか試してみることをオススメします。

 とても簡単にインタラクティブなアプリケーションが開発できることに気づかれるのではないかと思います。

 次回は、インテル RealSense SDKとUnityを使ったサンプルアプリケーションを実際に作成してみます。

※以下では、本稿の前後を合わせて5回分(第1回~第5回)のみ表示しています。
 連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。

1. インテル RealSenseテクノロジーとは? 構成要素/SDK/動作環境

インテル RealSenseテクノロジーが登場するまでの流れ、RealSenseの仕様やSDKの概要について紹介する。

2. インテル RealSense SDKの機能概要(手・顔の検出から音声機能まで)

インテル RealSense SDKで利用できる機能を、実際の使用例を示しながら分かりやすく紹介する。

3. 【現在、表示中】≫ RealSense SDK Unity ToolkitによるUnityアプリ開発の基礎

インテル RealSense SDK Unity Toolkitの概要と、それがUnity向けに用意している各種機能を紹介する。

4. Unity+RealSenseで作るノンゲームアプリ「スマイルトレーニング」

インテル RealSense SDKとUnityを使ったサンプルアプリケーションを実際に作成してみる。

5. WPF(Visual Studio)+RealSenseで作る表情感知アプリ

インテル RealSenseを活用したサンプルアプリケーション開発の第2弾として、Visual StudioとRealSenseを組み合わせる方法を紹介する。

イベント情報(メディアスポンサーです)

Azure Central の記事内容の紹介

GrapeCity Garage 記事内容の紹介

Twitterでつぶやこう!


Build Insider賛同企業・団体

Build Insiderは、以下の企業・団体の支援を受けて活動しています(募集概要)。

ゴールドレベル

  • グレープシティ株式会社
  • 日本マイクロソフト株式会社