Unity Live Captureを使ってUnity+iPhoneで簡単にフェイスキャプチャする手順メモ

■概要
iPhone X以降にはフェイスキャプチャーの機能がありますが、このデータをUnityで受信して扱うことができます。以前まではこの機能を使うにはiOSアプリとそれと通信する部分を自前で実装する必要がありましたが、最近になってUnityがその機能を簡単に使えるプラグイン「Unity Live Capture」を用意して簡単に使えるようになりました。iOSアプリもUnity側で用意してくれているため、簡単に導入することができます。
 
例えばVtuberのように、iPhoneをPCに接続してiPhoneでフェイスキャプチャーを行いデータをUnityエディターにネットワーク経由で送信。そのフェイシャルデータをUnity側でリアルタイムに受け取ってモデルデータの表情などを動かすことができるようになります。
※注!Unity Live Captureはもともとバーチャルプロダクション用途に開発されたもので、Unityエディタでの動作に特化しています。アプリケーションにビルドして使うことは現時点ではできません。
 
本記事はそのセットアップ方法をメモしたものです。
 
Unity Live Captureには
・iPhoneでのフェイシャルキャプチャ
・上記のモーションデータの録画
・iPhoneやipadをバーチャルカメラとして使用する
などの機能があります。本記事ではフェイシャルキャプチャのみに特化した内容で、バーチャルカメラやモーション録画については触れていません。
 
■前提条件
Unity 2020.3.16f1 以降
iPhone X以降
ARKitのフェイシャルモーフ仕様に対応したモデルデータ
参考:https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation
モーフ(ブレンドシェイプ)の名前も一致していないとダメ
 
■手順
1.Package Managerから、「Live Capture」をダウンロード&インポートする。
ただしUnity2020だとデフォルトでは出てこないので、
左上の+をクリックして「Add Package from git URL」を選択→「com.unity.live-capture」と入力してAddを押すと出てくる
 


※ちなみに本記事執筆時点での最新プレビュー版は3.0.0-pre.6で、「com.unity.live-capture@3.0.0-pre.6」。ここでの画面は3.0.0-pre.6を使っているのでボタンの文言などが2.0系とは多少違うかも。
 
パッケージマネージャーで対応した表情モーフの入ったサンプルCGもあるので持っていない人はLive Captureの同じ画面内からSamples > ARKit Face SampleでDLする。
※このサンプルモデルは首から上がなく、首の関節がないため頭を動かすことができないので注意。

 2.Hierarchy上で右クリック -> Live Capture -> Take Recorderオブジェクトを作成
「Take Recorder」というコンポーネントがアタッチされたオブジェクトができるので、ここの「Capture Devices」で右下の+をクリックして「ARKit Face Device」を選択


 
Take Recorderの子オブジェクトとして「New FaceDevice」というオブジェクトができるので好きな名前に変える。(ここでは「FaceDevice」にした)

3.FaceDeviceオブジェクトにはARKit Face Deviceコンポーネントがアタッチされている。
 
ARKit Face Deviceのインスペクタで「Head Position」の選択だけ外す(iPhoneフェイスキャプチャーで頭の位置の移動はさせない)
分かりづらいがグレーになっているボタンが選択オフ。
 

4.表情モーフのあるモデルデータのオブジェクトに「ARKit Face Actor」コンポーネントをアタッチする。 
 

5.Project上で適当なフォルダを作って右クリック -> Create -> Live Capture -> ARKit Face Capture -> Mapperを選択して作成。Mapperに適当な名前をつける。 

6.表情を動かしたいモデルのプレファブを作り、Mapperのインスペクタの「Rig Prefab」にそのプレファブをD&Dする。
D&Dすると他の項目が増えるので、
Left Eye,Right EyeのTranfsormを選択
Head Position、Head Rotationで頭のTransformを選択(この2つは同じものでいい)
 
Add Rendererボタンを押して、Head(表情)とSkullの2つを作成
ここでARKitの表情ブレンドシェイプ名とモデルのブレンドシェイプ名が異なる場合は、ここで再マッピングをする。(モデル側で同じブレンドシェイプを備えている場合はこの作業は不要。)
   

7.4で設定した「ARKit Face Actor」コンポーネントのMapperに5-6で作成したMapperデータをD&Dする。 

 8.HierarchyのFace Deviceオブジェクト上のARKit Face DeviceコンポーネントのActorに、4で設定した「ARKit Face Actor」コンポーネントをアタッチしたモデルオブジェクトをD&Dする

9.UnityのWindow -> Live Capture -> Connectionsウインドウを開き、「Create Server」ボタンを押す。右上の「Start」ボタンを押してサーバー起動。
 

10.iPhoneのApp Storeで「Unity Face Capture」アプリをインストールする
iPhoneはUnityが動いているPCと同じWi-Fiネットワークに接続する
起動し、同じネットワーク内を自動検索してくれるのでサーバ(PC)名が出たら「Connect」を押す。出ない場合はPCのIPアドレスを調べ手動で入力して接続する。
Connectionsウインドウの「Available Interfaces」にPCのIPアドレスが表示される。 

アプリ側の起動画面でManualタブでIPアドレス手入力する
 
接続成功すると、この時点で再生ボタンを押さなくてもGame画面でフェイスキャプチャーが反映されているはず。再生ボタンを押してないときはUnityエディタにフォーカスがないと反映されない。再生ボタンを押すとバックグラウンドでも表情が反映される。

■その他
現時点でアプリケーションにビルドしてもフェイスキャプチャは機能しないのですが、一応やる方法はあるっぽいので調査中です。Unity公式も要望があることは把握してるっぽいのでいずれは公式で実装されるでしょう。
 


この記事が気に入ったらサポートをしてみませんか?