はじめに
LeapMotionを買ってキャラクターの腕を動かせた
↓
顔もFaceRigみたいにキャラクターに反映させたい
↓
— アキヒロ (@akihiro01051) 2016年2月28日
普通のWEBカメラを用いてUnity上のキャラクターに顔の動きを反映させます.
Unityでは一部有料のアセット(FinalIK)を利用していますが,顔を認識させるだけなら必要ありません.
今回はRealsenseSDKからの顔認識情報をUnityにもってくるまでの紹介をします.
準備
使用ツール
- WEBカメラ
- Unity 5.3.1
- VisualStudio2015
- Intel Realsense SDK R4
- (FinalIK($90))
RealsenseSDK
Intelによる音声認識,顔認識,3Dスキャンなどを提供しているSDKです.
Realsenseカメラを接続しないと利用できない機能もあるが一部機能は通常のカメラで動作します.
今回は顔認識機能を利用.
プラグインの作成
SampleにあるC#のFaceTrackingでは通常のWEBカメラは利用できませんでした.
C++のデモでは利用可能だったので,C++のdllプラグインを作成してUnityと連携させます.
通常のカメラでは顔の位置と大きさ(Detection),顔の特徴点(Landmark),表情の一部(Expression)を取得可能.
今回はキャラクターに反映させる情報として,顔の位置と回転と表情を取得.
顔の位置はDetectionから取得し,顔の回転に関してはLandmarkから自力で計算させています.
ソースGitHub
Unityとの連携
作成したdllをUnityの/Plugins/x86 or x86_64フォルダにそれぞれ移動し,dllの情報を取得するコードを作成します.
プラグインとサンプルのコードを同梱したファイルを以下に置いておきます.
unitypackage
動作デモ
unitypackageをUnityにインポートしたらFaceTrackingフォルダにsampleがあります.
実行前にカメラデバイスの下図の赤ラインのデバイス番号を設定しておく必要があります.
Realsense R200,F200などdepthセンサを内蔵している場合にはデバイス名がcolorのものを選択してください.