iPhone X からフェイシャル アニメーションを記録する

Live Link Face アプリ、ARKit、Live Link を使用してキャプチャしたフェイシャル アニメーションを Unreal Engine のキャラクターに適用する方法を説明します。

Choose your operating system:

Windows

macOS

Linux

Apple iPhone の最新モデルは、ユーザーの顔の 50 の特定の筋肉の位置、トポロジー、移動を認識する最新の顔認識機能とモーション トラック機能を提供します。IPhone に深度カメラと ARKit 機能が備わっている場合、Epic Games から無料で提供されている Live Link Face アプリを使って、Unreal Engine 内の 3D キャラクター上で複雑なフェイシャル アニメーションを操作して、それらを iPhone 上でライブでエンジンに記録することができます。

このページでは、Live Link Face アプリを使ってライブ パフォーマンスを適用し、適用したフェイシャル キャプチャ システムをフルスケールの制作撮影に活用する方法を説明します。

Live Link Face アプリは Epic Games Launcher の [Learn (ラーニング)] タブから使用できる Face AR Sample が使用している ARKit 機能と同じものです。ただし、Face AR Sample は iOS 用にコンパイルする必要があり、この作業には Mac と Apple developer account が必要になります。Live Link Face アプリを使うと、フェイシャル アニメーションをすぐに適用して、Unreal Engine プロジェクトのキャラクターを適切に設定することができます。

前提条件:

操作を開始する

このセクションの手順に従って、Unreal Engine プロジェクトの設定、Live Link Face アプリの接続、アプリで記録されたデータの 3D キャラクターへの適用を行います。

  1. プロジェクトで次のプラグインを有効にします。

    • Live Link

    • ARKit

    • ARKit Face Support

  2. ARKit の顔認識で生成された顔のブレンド シェイプと一致するブレンド シェイを使ってキャラクターを設定する必要があります。通常この作業は Autodesk Maya などサードパーティのリグ構築およびアニメーション ツールで行い、その後でキャラクターを Unreal Engine にインポートする必要があります。

    使用するキャラクターがサポートする必要のあるブレンド シェイプの一覧は「 Apple ARKit ドキュメント 」を参照してください。

    使用するキャラクターを準備していない場合は、Epic Games Launcher の [Learn (ラーニング)] タブから「 Face AR Sample 」を使用することができます。

    使用するキャラクターのブレンド シェイプの名前は ARKit ブレンド シェイプとまったく同じである必要はありません。 LiveLinkRemap アセット内にカスタムのブループリント関数を作成して、ARKit ブレンド シェイプ名を自分のキャラクターで使用する名前に変換することができます。手順については「 Face AR サンプル ドキュメント ]」を参照してください。ただし、最良の結果を得るために、使用するキャラクターのフェイシャル ブレンド シェイプがカバーする顔の領域は ARKit ブレンド シェイプと同じになるようにしてください。

  3. Live Link Pose ノードが含まれるアニメーション ブループリントを使って Unreal Engine にキャラクターを設定します。たとえば、Face AR Sample の男の子をアニメーション ブループリントに取り込みます。

    Live Link Pose node in an Animation Blueprint

    後でこのノードを使って写真からキャラクターに送信されたアニメーションを適用します。

  4. 使用するコンピュータの IP アドレスを取得します。これを Live Link Face アプリを接続する必要があります。

    IP アドレスは、通常はコンピュータのコントロール パネルまたは設定で確認できます。または、ほどんとの Windows では ipconfig コマンドライン ユーティリティを使用することができます。

    • コンピュータがインターネットに接続している場合、ネットワーク内でのみ表示されるローカル IP アドレスとオープン インターネット上での特定が可能なパブリック IP アドレスの両方が表示される場合があります。その場合はローカル IP アドレスを選択してください。ローカル IP アドレスは通常 10. または 192.168. で始まります。

    • また、異なるアダプタ用に複数の IP アドレスが設定されている場合があります。たとえば、有線イーサーネット アダプタとワイヤレス アダプタのそれぞれが個別のアドレスをもつ場合があります。ご使用のコンピュータがどちらのアダプタを使用していても、IP アドレスは使用する iPhone と同じネットワークに接続する設定になっていることを確認してください。

  5. Apple App Store で Epic Games が無料で提供している Live Link Face アプリを探して iPhone にインストールします。

    Live Link Face icon

  6. iPhone をコンピュータと同じワイヤレス ネットワークに接続するか、Lightning Ethernet アダプタを使ってイーサーネット ケーブルで iPhone を直接コンピュータに接続します。

    Live Link はネットワーク データ ソースが必要なので、USB で iPhone をコンピュータに接続するには十分ではありません。

  7. iPhone で Live Link Face を実行します。ホーム画面から開始します。ここで新しい記録を開始することができます。

    [プレビューメッシュ] 設定をオフにすることでオーバーレイを無効にして顔を確認することができます。以下の「 Live Link Face アプリの操作

  8. 左上にあるアイコンをタップして、アプリ設定を開きます。最低でも、コンピュータに接続可能にするために LiveLink 設定を開く必要があります。

    [LiveLink] 設定ページで [ターゲットを追加] を選択してコンピュータの IP アドレスを入力します。

    アニメーションを複数の Unreal Editor インスタンスに配信する必要がある場合、ここに複数の IP アドレスを入力します。以下の「 複数のユーザーと作業する 」セクションを参照してください。

    Live Link Face アプリのその他の設定の詳細については、以下のセクションを参照してください。

  9. Unreal Editor のメインメニューから [Window] > [Live Link] を選択して [Live Link] パネルを開きます。iPhone がサブジェクトとしてリストに追加されていることが確認できます。

    Live Link subject

  10. キャラクターのアニメーション グラフで、 Live Link Pose ノードのサブジェクトを iPhone にします。

    Live Link Pose node with subject

  11. Animation ブループリントを コンパイル 保存 します。

  12. キャラクターを選択します。 [Details (詳細)] パネルで、 [Skeletal Mesh (スケルタルメッシュ)] カテゴリの [Update Animation in Editor (エディタでアニメーションを更新)] が有効になっていることを確認します。

    Update Animation in Editor

  13. Live Link Face に戻って、アプリが顔を認識し、顔の動きの追跡を開始するまで自分の顔を iPhone のカメラに向けます。

    この時点で、Unreal Editor のキャラクターが自分に合わせてリアルタイムで顔を動かすことを確認できます。

  14. パフォーマンスを記録する準備が整ったら、Live Link Face アプリの赤い [Record (記録)] ボタンをタップします。これにより、iPhone へのパフォーマンスの記録が開始し、Unreal Editor のテイクレコーダーが起動し、エンジンのキャラクター上のアニメーション データを記録を開始します。

    記録を停止するには、再度 [Record] ボタンをタップします。

    頭の回転を設定する

    Live Link Face App からのデータを使用してアクタに頭の回転を適用するには、頭の関節を操作するためにまずイベント グラフとアニメーション グラフでブループリントを設定する必要があります。

    Head Rotation ブループリント - イベント グラフ

    このブループリントは、キャラクターのアニメーション ブループリントのイベントグラフに配置されます。Live Link パフォーマンスからヨー、ロール、ピッチのデータを取り込み、それをキャラクターのリグの適切なボーンに適用します。

  1. ブループリントを右クリックして、Event Blueprint Update Animation** ノードを追加します。これにより、動きがある各フレームで頭の位置が更新されます。

  2. 次に、[My Blueprint] パネルで、「 HeadRoll 」、「 HeadYaw 」、および「 HeadPitch 」という名前の 3 つのフロート変数を作成します。それぞれをブループリント内にドラッグし、メニューから [Set] オプションを選択します。

  3. Event Blueprint Update Animation ノードからドラッグして、 Evaluate Live Link Frame ノードを作成します。これにより、フロート変数に格納される Live Link ソースからのデータが提供されます。

  4. [Subject (件名)] ドロップダウン メニューを使って、iPhone を表す件名を選択します。

  5. [Role (ロール)] ドロップダウン メニューを開いて、 [LiveLinkBasicRole] を選択します。

  6. Evaluate Live Link Frame の近くを右クリックして Get Property Value ノードを作成します。これらを使って Live Link アプリからヨー、ロール、ピッチを取得します。各ノードの [Property Name (プロパティ名)] ボックスを使用して、1 つを headYaw 、もう 1 つを headRoll 、最後を headPitch に設定します。

  7. 上の画像のように、Evaluate Live Link Frame の**Valid Frame 出力を Set** 変数に接続します。

  8. 最後に、Get Property Value ノードの Value 出力を、対応する Set 変数ノードの float 入力に接続します。

Head Rotation ブループリント - アニメーション グラフ

アプリから頭と首の回転データを取得して、アニメーション グラフのキャラクターのリグに適用できるようになりました。

上記のセクションは、アニメーション グラフの最後の Output Pose ポーズノードの直前に追加されます。

  1. Output Pose から開始し、 Result から引き出して、 Component To Local ノードを作成します。

  2. 次に、回転データの影響を受けるキャラクターのスケルトンの各頭と首のボーンに Transform (Modify) Bone ノードが必要です。Face AR Sample プロジェクトの Kite Boy を使用している場合は、2 つ必要になります。

  3. それぞれのノードに対して、ブループリント上でノードをクリックし、[Details] パネルの [Bone to Modify] 設定に正しいボーン名を設定します。Kite Boy の場合、 neckRoot および head です。

  4. 上の画像のように、最初のノードの出力を次のノードの Component Pose 入力に接続します。

  5. それぞれの Transform (Modify) Bone ノードで、 [Translation Space] オプションのドロップダウンをクリックして、 [Bone Space] に変更します。

  6. Transform (Modify) Bone ノードの [Details] パネルの Rotation セクションで、 Rotation Mode Add to Existing に変更し、 Rotation Space オプションを Bone Space に変更します。

  7. 次に、イベントグラフで収集されたヨー、ピッチ、ロールのデータを受け取り、頭と首のボーンの回転を更新するために Rotator を作成します。以前に作成した各フロート変数のコピーをドラッグして、メニューから [Get] を選択します。

  8. 各変数について、出力からドラッグし、 Float x Float ノード を作成します。ピッチ (上下動) を 15 倍、ヨー (左右回転) とロール (進行軸回転) を -15 倍にします。目的の結果を得るには、ヨー、ピッチ、ロールの乗数を調整する必要がある場合があります。正しい回転を得るために、正と負の値を試す必要がある場合があります。

  9. 乗数を設定したら、ローテータを作成します。ブループリント パネルを右クリックして、 Make Rotator ノードを作成します。

  10. ヨー乗数の出力を Make Rotator の X (Roll) 入力に接続します。

  11. ピッチ乗数を Z (Yaw) に接続します。

  12. 最後に、ロール乗数を Y (Pitch) に接続します。

  13. Make Rotator の出力をそれぞれの Transform (Modify) Bone ノードの Rotation 入力に接続します。

  14. Live Link Pose ノードを作成し、 Live Link Subject Name を iPhone に設定して、シーケンスを終了します。出力からドラッグして、 Local to Component ノードを作成します。

  15. 最初の Transform (Modify) Bone ノードの Component Pose 入力に出力を接続します。

正しい回転を行うために、ヨー、ピッチ、ロールの接続の調整が必要な場合があります。回転を確認する最善の方法は、シーケンスが完了した後にライブ テストを行うことです。自分のキャラクターが自分と一緒に動くはずです。自分が頭を左に傾ければ、キャラクターも左に向かって同じことをするはずです。

エディタで [Play (プレイ)] を押して、頭の回転設定をテストします。Live Link アプリで記録されている動きと一致するために、キャラクターの頭が回転します。

Live Link Face アプリの操作

Live Link Face アプリのホーム画面では以下の操作ができます。

1

設定ダイアログを開きます。

2

すべての LiveLink ターゲットにフェイシャル アニメーション データを送信するに切り替えます。緑で強調表示されている場合、アプリはアニメーション データを送信しています。

ライブの場合は、アプリ設定で設定されたタイムコード ソースから読み込まれた現在のタイムコード値もリスト表示します。

3

ビデオ表示とフェイシャル トラックのオンオフを切り替えます。

4

新規テイクの記録を開始および停止します。

5

アプリがこれまで記録したテイクのリストを開きます。

6

現在のスレートとテイク、LiveLink サブジェクト名を表示します。タップをして現在のスレート名またはテイク番号を変更します。

7

緑で強調表示されている場合、ARKit フェイシャル キャプチャ システムが現在のカメラ ビューの顔を正常に検知できていることを示します。

Live Link Face アプリの設定

ホーム画面左上のアイコンをタップして設定ページを開きます。ここでアプリの挙動を設定することができます。

設定

説明

LiveLink

Live Link を介してアニメーション データが送信され記録を制御するように、アプリを Unreal Engine を実行するコンピュータに接続するように設定します。

タイムコード

Live Link Face アプリのタイムコード ソースを設定します。詳細は タイムコード ソース を参照してください。

OSC

Live Link Face アプリと外部 OSC コントローラとデバイス間の接続を設定します。詳細は、以下の「 OCS で Live Link Face アプリを操作する 」を参照してください。

Stream Head Rotation

アプリが Live Link 接続を介して ARKit から頭の回転 (ヨー / ピッチ / ロール) データを送信するか指定します。

動かない三脚の上に iPhone を設置して、iPhone に対して自分の頭を上下左右に動かす時に Live Link Face アプリを使って仮想の頭の動きを操作する場合に便利なオプションです。

ボディ モーション キャプチャ設定と一緒に Live Link Face アプリを使用する場合はこの設定はおそらく不要です。その場合は通常、カスタム ヘルメットを使って常に自分の顔の正面にくるように頭上に iPhone を搭載し、ボディ モーション キャプチャに頭の上下左右の動きを記録させます。

プレビュー メッシュ

ARKit 顔認証システムで生成された三角メッシュでホーム画面のカメラ ピクチャをオーバーレイするかどうかを指定します。

記録ボタン

赤い記録ボタンをホーム画面上で視覚化するかどうかを指定します。

外部 OSC デバイスからの記録を切り替えている場合は、アクタが間違えて iPhone のボタンに当たってしまう可能性を避けるために、このオプションを無効にした方が良いかもしれません。

ブレンドシェイプ データ

すべてのフェイシャル ブレンド シェイプに対して ARKit 顔認証システムで生成されるデータ値をホーム画面に表示するかどうかを指定します。この情報は通常はデバッグ目的のみに有用です。

Take Recorder

ホーム画面が現在のスレート名とテイク番号、または現在の記録に対して使用されるファイル名を表示するかどうかを指定します。

オーバーレイ表示

Live Link Face アプリのメイン画面を常時表示するか、それともタッチスクリーンの操作時までフェードアウトさせるか指定します。

オーバーレイをフェードアウトすると、パフォーマンス中にキャプチャ ビデオを確認することでアクタの気が散ることを防げる場合があります。

ビデオ品質

参照ビデオのエンコードに使用する JPEG 圧縮の品質を指定します。品質を高めると画像はシャープになりますが、iPhone の保存容量がその分必要になります。

ストレージ

使用するデバイスの空き容量、および Live Link Face の使用量を表示します。この画面から、以前記録したテイクを消去することもできます。

最初から開始

アプリケーションのインストール後に変更した設定をすべて元に戻して、Live Link Face アプリを出荷時の設定にリセットすることができます。

About

アプリケーションのリーガル情報を表示します。

Raw データでのフェイシャル キャプチャを記録する

Live Link Face アプリから新しい記録を開始すると、キャプチャは常に 2 つのファイルで iPhone に記録されます。

  • .mov ファイルにはカメラによって記録された参照ビデオが含まれます。

    ビデオ フレームは JPEG コーデックを使用して圧縮されますが、時間的圧縮を使用せずフレーム精度が高くなります。このファイルにはオーディオとタイムコードが含まれます。記録後にアニメーション パフォーマンスを操作する必要のあるアニメーター用の参照となるように作成されます。

  • .csv ファイルには記録中に ARKit によってキャプチャされた raw アニメーションデータが含まれます。

    このデータ ファイルは現在 Unreal Engine または Live Link Face アプリでは使用されていません。しかしながら、フェイシャル キャプチャに関する追加ツールをビルドを検討しているデベロッパーにとってこのファイルの raw データは有用です。

モードと結果を記録する

前述したとおり、iPhone で Live Link Face アプリから、あるいは Live Link Face アプリの OSC インターフェイスから記録を開始する場合、パフォーマンスは iPhone に記録されます。この方法で記録するために Unreal Engine のインスタンスに接続する必要はありません。

Live Link Face アプリまたは OSC インターフェイスからの記録開始時に Live Link を使って Unreal Engine のインスタンスに接続している場合、接続されているすべての Unreal Engine のインスタンスの Take Recorder 起動します。アニメーション パフォーマンスは iPhone とコンピュータの Take Recorder の両方に記録されます。

Live Link で Unreal Engine の 1 つ以上のインスタンスに接続し、iPhone または OSC インターフェイスから記録を開始するのではなく Unreal Editor インターフェイスの Take Recorder から記録を開始する場合、パフォーマンスは iPhone に保存 されません 。この場合、コンピュータの Take Recorder にのみ記録されます。

複数のユーザーを操作する

より複雑な現実世界の制作現場のおいては、同じ仮想世界でライブ環境で共同作業をするために マルチユーザー編集 を使って複数の人が Unreal Engine で同時に作業することがあります。この場合、すべての作業者が実行する すべての Unreal Engine インスタンスに Live Link Face アプリを接続する設定にすることを推奨します。アプリは、すべてのエンジン インスタンスにパフォーマンス キャプチャをマルチキャストします。これにより、すべての作業者が最小のレイテンシーで確実に受信するアニメーションデータを確認できるようになります。

タイムコード ソース

実際の制作において、Live Link Face アプリはさらに大規模なパフォーマンス キャプチャ 設定のほんの一部にすぎません。オーディオ、ライブビデオ、その他のボディ キャプチャ データ、カメラ トラック データなど、その他のものを記録しなければならない場合が多いです。これらの別の記録を完璧な精度で同期させるためには、確実にすべての記録が整合性のあるタイムコード値をエンベッドしなければなりません。

Live Link Face には 3 つのタイムコード ソース オプションがあり、設定パネルから設定することができます。

  • システム タイマー

    デフォルトで、Live Link Face のタイムコード値は iPhone のシステム タイマーに基づいています。このタイマーはシステムが最後に起動されてからの経過時間を元にします。これにより本質的に正確な基本オプションが提供されますが、このタイムコードを他のデバイスで実行された記録とリンクすることは困難な場合があります。

  • NTP サーバー

    1 日の時間に基づいて整合したタイムコードを取得する 1 つの方法は、Network Time Protocol (NTP) サーバーを信頼することです。このオプションを選択する場合、デフォルト サーバーは time.apple.com です。これは Apple が iPhone の時間と同期するために使用するサーバーと同じものです。ただし、多くのプロダクションがステージ上のデバイスのタイムコードと同期するため行っているように、カスタムの NTP サーバーを使用する場合はサーバー名と IP アドレスを入力することができます。

  • Tentacle Sync

    Tentacle Sync は、デバイスを Bluetooth を介してステージ上のマスタークロックと同期することができるサードパーティのハードウェア デバイスです。これがもっとも専門的なタイムコード オプションと思われます。ハイエンド プロダクションは通常撮影中のタイムコード同期をマスタークロックに頼っています。詳細は Tentacle Sync を参照してください。

OCS で Live Link Face アプリを操作する

Live Link Face アプリは Open Sound Control (OSC) プロトコルによる双方向通信をサポートしています。

  • OSC デバイスを使用して Live Link Face をリモートで制御することができます。たとえば、外部デバイスを使用してリモートでのアプリケーションの記録を開始することができます。

  • さらに、アクティビティの通知を他の OSC デバイスに送信するように Live Link Face を設定することができます。たとえば、アプリケーションが新たに記録を開始すると別のデバイス上でアクションをトリガーすることができます。

OSC を設定するには、アプリケーションの設定を開きます。

  • リスナー セクションには、使用している iPhone の現在の IP アドレスと、受信する OSC メッセージ用に Live Link Face アプリがリッスンするポートが表示されます。OSC リモート コントロール デバイスがこの IP アドレスとポートにコマンドを送信するようにする必要があります。

  • 別のデバイスをコントロールする OSC コマンドを Live Link Face に送信させるには、 [ターゲット] セクションにそのデバイスの IP アドレスとポートを入力します。

Live Link Face アプリは以下の OSC コマンドをサポートしています。

コマンド

説明

/OSCSetSendTarget <IP:string> <port:int32>

OSC 送信ターゲットに任意の IP アドレスとポートを設定します。アプリはコマンド /OSCSetSendTargetConfirm で新しい OSC 送信ターゲットに応答します。

/AddLiveLinkAddress <IP:string> <port:int32>

アプリがブレンド シェイプ データを配信するために Live Link ターゲットを追加します。

/ClearAllLiveLinkAddresses

すべての Live Link ターゲットを消去します。

/LiveLinkSubject <name:string>

Live Link サブジェクト名を設定します。

/LiveLinkStreamStart

すべての Live Link ターゲットにデータのストリーミングを開始します。

/LiveLinkStreamStop

Live Link ターゲットへのデータのストリーミングを停止します。

/BatteryQuery

デバイスのバッテリー レベルを要求します。アプリは /Battery <level:float32> で OSC 送信ターゲットに応答します。

/ThermalsQuery

デバイスの熱状態を要求します。アプリは /Thermals <state:int32> で OSC 送信ターゲットに応答します。

/Slate <name:string>

スレートを任意の名前に設定します。

/Take <number:int32>

テイク番号を任意の値に設定します。

/ARSessionStart

ビデオと AR トラッキングをオンにします。アプリは /ARSessionStartConfirm で OSC 送信ターゲットに応答します。

/ARSessionStop

ビデオと AR トラッキングをオフにします。アプリは /ARSessionStopConfirm で OSC 送信ターゲットに応答します。

/RecordStart <slate:string> <take:int32>

任意のスレートとテイク番号を使って記録が開始します。アプリは /RecordStartConfirm <timecode:string> で OSC 送信ターゲットに応答します。この時のタイムコードは常に 00:00:00.000 であることに留意してください。

/RecordStop

記録を停止します。アプリは /RecordStopConfirm <timecode:string> <blendshapesCSV:string> <referenceMOV:string> で OSC 送信ターゲットに応答します。以下の /Transport コマンドの2 つのストリングを使ってデバイスからデータをコピーすることができます。

/Transport <IP:port:string> <path:string>

/RecordStopConfirm コマンド (上記) で返されたパスを使って、ファイルのコンテンツを指定した IP アドレスとポートに転送するようにアプリにリクエストします。アプリはそのアドレスとポートに対して TCP 接続を開きます。最初のストリングは、ファイルの合計サイズを含む int32 をビッグエンディアン形式で送信します。その後でファイルのコンテンツを送信します。

/VideoDisplayOn

ビデオの表示をオンにします。

/VideoDisplayOff

ビデオの表示をオフにします。トラックと記録は引き続き発生します。

/AppActivated

iPhone でアクティブになると、アプリはこれを OSC 送信ターゲットに送信します。つまり、最初に開始したとき、フォアグラウンド状態になったときなどです。

/AppDeactivated

iPhone で非アクティブ状態になると、アプリはこれを OSC 送信ターゲットに送信します。つまり、キルしたとき、バックグラウンドに送信されたときなどです。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
閉じる