WWDC 2017で発表されiOS 11から利用可能になったARKitですが、iPhone XのTrueDepthカメラによるFace Trackingが可能になりました。
UnityからリリースされているUnity ARKit Pluginも、Face Trackingに対応したAPIが追加されたのでちょっと遊んでみました。
参考: ARKit Face Tracking on iPhone X – Unity Blog
準備
Unity ARKit Pluginの使用にはUnity 5.6.1p1以降、iOS 11以降、Xcode 9以降が必要です。また今回のFace TrackingにはiPhone Xが必要です。
Unity ARKit PluginはAsset Storeから入手可能です が、 Face Trackingに対応したバージョンはまだリリースされていません(11月6日現在)。BitBucketで公開されているdefaultブランチからダウンロードします。
ダウンロードして展開したフォルダはUnityプロジェクトになっているのでそのまま開いて使えます。また、必要な物はAssets/UnityARKitPlugin
フォルダにまとまっているので、このフォルダを自分のプロジェクトのAssets
以下にコピーすればOKです。
UnityARKitPlugin/Examples/FaceTracking
フォルダには4つのサンプルシーンが含まれています。これらのシーンをビルドして実機で動かすと手軽にFace Trackingの動作を確認できます。
ビルド時の注意点はこんな感じです。
-
Player SettingsのOther Settingsにある「Camera Usage Description」に、ユーザーにカメラの使用許可を求めるアラートに表示される文言を設定する(これを設定しないとクラッシュする)
-
Player SettingsのOther Settingsにある「Automatic Signing Team ID」にApple DeveloperのTeam IDを設定しておくと何かと楽
FaceAnchorScene
ARKitによって検出されたARFaceAnchor
の位置にXYZの3軸を表示するサンプルです。顔の位置と向きをリアルタイムでトラッキングします。
FaceMeshScene
ARKitによって検出されたARFaceAnchor
のgeometry
プロパティ(ARFaceGeometry
クラス)から、顔表面のジオメトリ(vertices
、triangleIndices
、textureCoordinates
(UV))を取得できます。これを基にUnity側でメッシュを作りARFaceAnchor
の位置に表示することで、表情をリアルタイムにトラッキングするサンプルがこちらです。
サンプルの状態ではデフォルトのマテリアルのままなので、某スケキヨのようになっています…。
FaceBlendshapeScene
こちらのサンプルシーンはFaceMeshSceneとほぼ同じですが、画面左になにやら表示されています。これは、ARFaceAnchor
のblendShapes
プロパティから取得したキーと値の一覧で、目をどれくらい開けているか、口をどのくらい尖らせているかといった情報を0.0〜1.0の数値化したものです。
表示はBlendshapePrinter.cs
でおこなわれているのですが、実機で実行すると、フォントが小さかったり、数値が激しく変わりすぎたり、上の方がiPhone Xのセンサーハウジング部分にかぶっていたりして非常に見づらいので、
-
GUI.skin.box.fontSize = 30;
のようにしてフォントサイズを大きくする -
kvp.Value.ToString ("P0")
として、出力をパーセント表示 にする - 適当に先頭に改行を入れてセンサーハウジング部分を避ける
などすると見やすくなります。
なお、どのキーがどういう状態を指すのかは、Appleのドキュメントに図入りで記載されています(が、それでもよく分からないものもある…)。
FaceDirectionalLightEstimate
ARKitのARFrame
からLight estimation(シーンにおける推定の照明。環境光の強さや色温度)を取得することが可能で、このサンプルシーンでは取得した照明が顔にどのように当たるのか、顔の位置と6方向から見た様子を表示します。
せっかくなので
UnityのチュートリアルRoll-a-ballをFace Trackingで操作できるようにしてみました。
基のRoll-a-ballはカーソルキーの上下左右でボールを上下左右に動かしますが、Face Trackingバージョンでは目の上目線で上に下目線で下に、左目をつぶると左に右目をつぶると右に移動するようにしてみました。
プレイ動画はこちら!
Roll-a-ballをiPhone XのFace Trackingで遊べるようにしてみた。 https://t.co/RhFdPUKXlO
— Masayuki Iwai (@myb) November 6, 2017
Roll-a-ballの完成プロジェクトはAsset Storeからダウンロードできます。Roll-a-ballの完成プロジェクトにUnity ARKit Pluginを追加の上、こちらのリポジトリからFaceTrackingフォルダをインポートしてFaceTrackingシーンをビルドすれば、お手元でお試しいただけます。
2017/11/9追記
Face Trackingに対応したUnity ARKit Plugin 1.0.11がリリースされました。