Live Link の目的は、アニメーション データを外部ソース (DDC ツールや Mocap サーバー) から Unreal Engine (UE) にストリーミングして使用するための共通インターフェースを提供することです。Unreal プラグインを通じて拡張できるよう設計されており、可能な限りエンジンの変更やそのメンテナンスを必要とせずに、サード パーティによる新機能の開発を可能にします。
Live Link により、Maya や Motionbuilder などの DDC ツールを使用して外部でアニメーションを編集しながら、その変更を Unreal Engine でリアルタイムにプレビューできるようになります。モーション キャプチャ システムでも Live Link を使用してデータをエンジンにストリーミングすることができ、これもリアルタイムでプレビューすることができます。
Live Link クライアント
Live Link のハブとなるのが Live Link クライアント であり、プロジェクト内で Live Link プラグインを有効にした際に作成されます。このクライアントには主に 2 つの役割があります。
- ソースの管理:これらはデータのソースであり、Live Link にデータを提供する、同一マシン上またはネットワーク上の他のアプリケーションへの接続を主に表します。
-
サブジェクトの管理:サブジェクトはクライアント内の個々のデータ ストリームで、アニメートする 1 つのキャラクターが 1 つのサブジェクトになります。
サブジェクトは次のデータで構成されています。
- 名前
- 不変のスタティック データ (アニメーションの役割のスケルトンなど)
- データの 1 つ以上の「フレーム」 (アニメーションの役割のボーン トランスフォームなど)
また、クライアントには、エンジンで使用する次フレーム用データをビルドする役割もあります。直近で受信したデータの直接コピーか、受信データのバッファリングとユーザー定義可能な遅延を含む再生で作成された補間フレームを使用します。
役割
Live Link は、受信データの使用方法を定義する 役割 の概念に基づいています。これにより、エンジン内のターゲット アクタへのデータ マッピングをより簡単に行うことができます。サポートされている役割には、カメラ、ライト、キャラクター、トランスフォーム、および基本 (全般的なデータ向け) の役割があります。
ソース
ソースは、データが Live Link クライアントに取り込まれる方法を表します。ソースはプラグイン内で定義できるため、サード パーティの開発者はエンジン コードの変更なしに独自のものをビルドすることができます。ソースには、アニメーション データの受信方法を管理する役割があります。例えば、ネットワーク プロトコルを介したり、マシン自体に接続されているデバイス用の API から読み取ったりするなどの方法があります。それぞれのソースには、クライアントにデータを渡すことを可能にする参照が渡されます。 Live Link プラグイン内で、Unreal メッセージ バス接続からデータを読み取る独自のソース (メッセージ バス ソース) を定義しました。Maya および Motionbuilder 向けの Live Link プラグインのビルドにもこのソースを使用しました。
UDP メッセージング
Live Link メッセージ バス ソースを使用する際、メッセージ バス ソースは内部で UDP メッセージングを使用し、最初に検知するネットワーク アダプタを (デフォルトで) 使用します。マシンに複数のネットワーク アダプタが存在する場合は、特定のアダプタからデータを受信しようとする際にこれが問題となる可能性があります。 特定のネットワーク アダプタの UDP データを受信する場合は、[Edit (編集)] > [Project Settings (プロジェクト設定)] > [UDP Messaging] の [Unicast Endpoint (ユニキャスト エンドポイント)] で設定を変更する必要があります。
例えば、次の 2 つのアダプタがあるとします。
- アダプタ A:XX.X.XXX.123
- アダプタ BXXX.XXX.X.53
ネットワーク アダプタ B の Live Link メッセージ バス ソースからデータを受信する場合、[Unicast Endpoint] を 「XXX.XXX.X.53:0」に設定します。
「:0」の部分は、すべてのポートをリストすることを指定します。
UDP メッセージングは、「-game」ではデフォルトで有効になっていません。パッケージ化されたゲームで -messaging
を追加することでこれを有効にできます (シッピング ターゲットはサポートされていません)。
Live Link を有効にする
Live Link プラグインを有効にするには、[Plugins (プラグイン)] ウィンドウ ([Edit] > [Plugins]) で [Animation (アニメーション)] カテゴリを選択し、Live Link プラグインの [Enabled (有効化)] をオンにします。
Live Link の接続ウィンドウ
Live Link プラグインを有効にすると、 [Window (ウィンドウ)] メニューから Live Link クライアントにアクセスできるようになります。
Live Link オプションを選択すると Live Link 接続 ウィンドウが開き、ソース タイプとサブジェクトを追加することができます。
上の画像では、プラグインを実行している Maya のインスタンスへのオープン接続を含む Live Link クライアントを確認できます (左上のセクション)。 このインスタンスでは、2 つのカメラ サブジェクト (「EditorActiveCamera」と「camera1」) と、「TestCube」という名前のトランスフォーム データを含む 1 つのサブジェクトの計 3 つのサブジェクトをエディタに送信しています (左下のセクション)。
ソースを追加する
ソースを追加するには、 + Source (ソース追加) ボタンをクリックして、Live Link と接続するソースのタイプを選択します。
接続先のソースとして外部アプリケーションを表示するには、Live Link を介して Unreal Engine 4 にデータを送信するよう当該の外部アプリケーションを設定する必要があります。詳細については、 Live Link プラグインの開発 ページを参照してください。
メッセージ バス ソースを介したデータ受信に加えて、Live Link では Magic Leap などのデバイス用の ハンド トラッキング ソースと 仮想サブジェクト (複数のサブジェクトを 1 つの「仮想サブジェクト」に統合可) を作成する機能をサポートします。 例えば、キャラクター A の下半身とキャラクター B の上半身を組み合わせて新しいサブジェクトを作成できます。また、あるソースからのカメラ追跡データを使用して、別の追跡オブジェクトのトランスレーションのみを組み合わせて、手動で操作することもできます。
ソースのパネルでは、接続されたすべてのソースを管理できます。ソースの横にある ゴミ箱 アイコンをクリックして、そのソースを削除することもできます。
また、[Presets (プリセット)] ボタンをクリックして保存したり、以前に保存したプリセットをロードしたりすることもできます。
プリセットは コンテンツ ブラウザ 内でアセットとして保存され、これによって以前のコンフィギュレーションを簡単にロードできるようになります。
サブジェクト パネル
Live Link の接続ウィンドウの [Subjects (サブジェクト)] パネルには、接続されているソースとストリーミングされているサブジェクトが表示されます。
このパネルにはそれぞれのサブジェクトの名前、関連付けられている役割、ステータス インジケータが表示されます。データを受信している場合はインジケータが緑色で表示されます。 ソースに接続していても、指定した時間内 ([Project Settings] で設定可、デフォルトは「0.5」ミリ秒) にデータを受信しなかった場合はインジケータが黄色になります。
接続設定
有効な接続を確立したら、以下の設定を使用して接続のパラメータを定義できます。
プロパティ | 説明 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Evaluation Mode | フレーム スナップショットの作成方法を指定します。
|
||||||||||||
Valid Engine Time | フレームが ValidTIme よりも古い場合に、バッファ リストから削除されます (秒単位)。 | ||||||||||||
Engine Time Offset | 時間で評価する場合に、現在の時間からどれだけ戻ってバッファを読み取るかを指定します (秒単位)。 | ||||||||||||
Timecode Frame Rate | タイムコードで評価する場合に、タイムコードのフレーム レートの期待値を指定します。 | ||||||||||||
Valid Timecode Frame | フレームのタイムコードが ValidTimecodeFrame よりも古い場合に、バッファ リストから削除されます (TimecodeFrameRate 単位)。 | ||||||||||||
Timecode Frame Offset | タイムコードで評価する場合に、現在のタイムコードからどれだけ戻ってバッファを読み取るかを指定します (TimecodeFramerRate 単位)。 | ||||||||||||
Max Number of Frame to Buffered | メモリ内で維持する最大フレーム数を定義します。 | ||||||||||||
Source Debug Infos | ソースから渡されるデバッグ情報のコレクションです。 |
補間設定
サブジェクトを追加したら、選択したサブジェクトに [Pre Processors (プリプロセッサ)]、[Interpolation (補間)]、または [Translators (トランスレータ)] を割り当てることができます。
プロパティ | 説明 |
---|---|
Pre Processors | 任意のフレームに対して受信データをサブジェクトに渡す前の処理に影響を及ぼします。例えば、[Axis Switch (軸スイッチ)] を選択すると、受信したトランフォームの軸を別の軸に切り替えます。 |
Interpolation | フレームのブレンドに使用する補間方法を定義します。 |
Translators | データの役割を別の役割に変換します。例えば、データをスケルトンからトランスフォームに変換したりします。キャラクターの臀部の場所のみを取得する場合などに便利です。データを適切な役割に変換します。 |
エディタの統合
現バージョンのアニメーション エディタは Live Link とビルトインで統合されており、[Preview Controller (プレビューコントローラー)] プロパティの [Preview Scene Settings (シーン設定をプレビュー)] タブからアクセスできます。
Live Link プラグインを有効にすると、[Preview Controller] オプションを [Live Link Preview Controller (Live Link プレビュー コントローラー)] に変更できるようになります。これを選択すると、次のオプションを設定できるようになります。
- Subject Name:プレビュー メッシュに適用する Live Link のサブジェクトの名前です。
- Enable Camera Sync:Unreal Editor のカメラと外部のエディタの同期を有効にします。内部的には EditorActiveCamera と呼ばれるサブジェクトの Live Link が参照されます。内部で開発された Maya と Motionbuilder プラグインの両方でこれがサポートされています。
- Retarget Asset:プレビュー メッシュに適用される Live Link データに適用するリターゲット アセットを指定します。
下のビデオでは、Maya Live Link プラグインを使用して Unreal Engine と Maya との接続を確立しています。
Live Link コンポーネント
[Live Link Controller (Live Link コントローラー)] および [Live Link Skeletal Animation (Live Link スケルタル アニメーション)] コンポーネントをアクタに追加して、接続されている外部ソースの Live Link でアクタのパラメータを操作することができます。
これらのコンポーネントを使用するには、 [Add Component (コンポーネントを追加)] ボタンをクリックして、Live Link Controller コンポーネント (または Live Link スケルタル アニメーション コンポーネント) を選択します。
Live Link コントローラーは、[Details (詳細)] パネルの [Subject Representation (サブジェクト表現)] プロパティで、接続されたサブジェクトから選択することができます。サブジェクトに応じて役割が自動的に割り当てられますが、これを変更することも可能です。[Component to Control (制御対象のコンポーネント)] は実際に Live Link を介して操作されるコンポーネントを示します。 下のビデオでは、Maya からカメラを動かして焦点距離を変更できるようにする Live Link コントローラー コンポーネントを含む Cine カメラアクタが示されています。さらに、スケルタル メッシュで Live Link スケルタル アニメーション コンポーネントを使用して、アニメーション データをストリーミングする様子も示されています。このために Live Link Pose ノードがアニメーション ブループリントに追加されて、サブジェクトが選択されています。
Live Link コントローラーでもアニメーションを制御することはできますが、最良の結果を得るためには、アニメーションに Live Link スケルタル アニメーション コンポーネントを使用することを推奨します。
ブループリントの Live Link
ブループリント関数の呼び出しを使用して Live Link データにアクセスすることもできます。下の画像では、 Evaluate Live Link Frame 関数が任意の役割を使用して、指定されたサブジェクトから Live Link フレームを取得しようとします (下の例では、サブジェクトが「camera1」で、[Camera Role (カメラの役割)] にアクセスします)。
次に、フレーム データをデータの結果から取得します。この場合はサブジェクトからのトランスフォーム情報です。この情報は、ブループリント内で Cine カメラの相対トランスフォームの更新に使用されます。
Unreal Engine バージョン 4.23 より前の Maya Live Link プラグインを使用している場合、ブループリントを介してカメラを操作する際に、トランスフォームが適切に行われないことがあります。これを修正するには、下の画像にあるように Add Relative Rotation ノードを追加して、その値をそれぞれ 「0」、「180」、「90」 に設定します。
Live Link リターゲット
現バージョンでは、Live Link リターゲットはリターゲット アセットによって実行されます (基本クラス ULiveLinkRetargetAsset)。Live Link のポーズ ノードには、使用するリターゲット アセットを指定するピンが含まれています。Live Link から USkeleton への変換マッピングを可能にするために、非常にシンプルなリマップ アセット (ULiveLinkRemapAsset) が提供されています。次は、リターゲット アセットを実装する方法の例です。
Live Link リターゲット アセットで次の関数をオーバーライドする必要があります。
BuildPoseForSubject(const FLiveLinkSubjectFrame& InFrame, TSharedPtr<FLiveLinkRetargetContext> InOutContext, FCompactPose& OutPose, FBlendedCurve& OutCurve)
この関数では次の引数を受け取ります。
LiveLinkSubjectFrame
:オプションでバッファおよび補間される、Live Link が参照するトランスフォーム/スケルトンです。FLiveLinkRetargetContext
:ULiveLinkRetargetAsset が毎回インスタンス化されないため (CreateRetargetContext をオーバーライドすることでカスタマイズ可)、インスタンス データのリターゲティングを可能にします。FCompactPose
:アニメーションの評価に使用する形式、FCompactPose のリターゲティングからの出力ポーズです。FBlendedCurve
:出力カーブ データです。ULiveLinkRetargetAsset には、提供された Live Link データからこのデータを入力するヘルパ関数 BuildCurveData が含まれています。
リターゲット アセットはブループリントで操作することもでき、ユーザーはエディタ内でロジックを指定することができます (適切な場合)。この機能はリマップ アセットで使用され、エディタ内でボーン名を変換できるようになります。
Live Link リマップ アセット
新しいリターゲット アセットの作成に必要なものを示す例がエディタ内にあります。/Engine/Plugins/Animation/LiveLink/Source/LiveLink にある次のクラスを参照してください。
ULiveLinkRetargetAsset
ULiveLinkRemapAsset
リマップ アセットの作成には、エディタで LiveLinkRemapAsset クラス タイプを使用します。
リマップ アセット内では Get Remapped Bone Name 関数をオーバーライドできます。
これによってエディタ内でボーン名を変換できます。
上の例では、Maya のスケルタル メッシュからボーン名情報を取り込んでいます。このデータは修正されて、Unreal Engine のボーン名の命名規則にマップされます。
例えば Maya では、使用される命名規則はボーン名を CharacterName:BoneName として参照します。Unreal Engine では、スケルトン アセットは 「BoneName」 の部分のみを使用します。Maya で Unreal Engine スケルトンにデータをストリーミングするために、リマップ アセットを使用して、コロンの位置で文字列を分割し、コロン後の文字列情報のみを受け取ることで Get Remapped Bone Name 関数をオーバーライドします。つまり、 「CharacterName:BoneName」 ではなく 「BoneName」 を取得します。
[Preview Scene Settings (シーン設定をプレビュー)] ウィンドウで、このリターゲット アセットを使用するよう指定します。
アニメーション ブループリント
Live Link のデータはアニメーション ブループリント内で直接適用することができます。
これを行うには、アニメーション ブループリントの AnimGraph 内に Live Link Pose ノードを作成します。このノードには 2 つのプロパティがあります。
- Subject Name:データ ストリーミング元の Live Link のサブジェクト名です。
- Retarget Asset:Live Link からのデータをアニメーション ブループリントが使用するスケルトンに適用する際に使用するリターゲット アセットです。
Live Link Pose ノードの出力は、Anim ブループリント内の他のポーズ ノードから得られるものと同じような通常のポーズであるため、他のポーズと同様に操作することができます (例:Modifier ノードや Blend ノードに入力する)。
エディタでは Live Link Pose ノードを使用しなくてもアニメーションを操作することはできますが、アニメーションをランタイムで操作するには、アニメーション ブループリント内に Live Link Pose ノードを設定する必要があります。
モーション コントローラー
Live Link はモーション コントローラーとの併用が可能です。モーション コントローラーのモーション ソース プロパティを Live Link 内のサブジェクトに設定できます。
このように設定すると、モーション コントローラー コンポーネントの位置が、サブジェクトの最初のトランスフォームで管理されます。
モーション コントローラーの統合により、Live Link サブジェクトのカスタム パラメータにアクセスすることも可能です。これらのパラメータは、Live Link サブジェクトにビルトインされているカーブ サポートによって渡されます。これらの値にアクセスするには、 MotionControllerComponent
から新しいブループリントを派生させて OnMotionControllerUpdated
関数をオーバーライドする必要があります。OnMotionControllerUpdated
の間は、モーション コントローラー上で GetParameterValue
の呼び出しが有効になります。
プライグイン開発
Live Link との統合には 2 つの方法があります。
- Live Link に新しいソースを公開する Unreal Engine プラグインをビルドする。
すでに独自のストリーミング プロトコルがある場合はこの方法が推奨されます。
- サードパーティ ソフトウェアでメッセージ バス エンドポイントを統合することで、ビルトイン メッセージ バス ソースのデータ トランスミッターとして機能させる。
ここで Maya と Motionbuilder ブラグインに採用している方法です。
詳細については、「Live Link プラグイン の開発」を参照してください。
Maya Live Link プラグイン
Maya Live Link プラグインのプレビルド バイナリは、Unreal Engine 4 GitHub レポジトリの Maya Live Link Plugin から入手可能です。 zip ファイルをダウンロードして解凍すると、Windows 版 Maya 2016 ~ 2019 のバイナリがそれぞれ表示されます。
Maya プラグインは Maya Module 形式で提供されます。Maya プラグインをインストールするには、zip ファイル内にある適切なバージョンのフォルダのコンテンツを Maya Module フォルダにコピーします。 Live Link プラグインを Maya にインストールして有効にすると、自動的に Unreal Editor 内で接続として表示されるようになります。Maya でウィンドウを開いて、ストリーミング設定にアクセスすることができます。MEL コマンドの MayaLiveLinkUI によってスポーンされ、ツールバーのボタンにバインドすることができます。
上の画像の画面右上には、Maya のこのインスタンスが Unreal クライアントに接続されているかどうかが示されています。 [Unreal Engine Live Link] の下には、現在ストリーミングされているすべてのサブジェクトが表示されます。マイナス記号 (-) ボタンをクリックしてサブジェクトを削除したり、[Add Selection] ボタンを使って、シーンで選択しているアイテム (複数可) を追加したりできます。 また、[Stream Type] オプションを使用して、ストリーミングされているデータのタイプを割り当てることもできます。
Maya Live Link プラグインの詳細な設定手順については、「Unreal Engine を Live Link で Maya に接続する」操作ガイドを参照してください。
Motionbuilder Live Link プラグイン
Motionbuilder プラグインは Maya プラグインと同じ機能を提供し、Maya プラグインと同様にエディタ内で接続として表示されます。また、ストリーミングを管理するためのカスタム UI も備わっています。
上の画像のように、現在のシーンからオブジェクトを選択して、ストリーミングのリストに追加できます。この画面の Subject Name (サブジェクト名) 列で名前を設定し、カメラ、スケルトンなどと Stream Type (ストリーム タイプ) を設定することもできます。サブジェクト上でのストリーミングもここで有効/無効に設定できます。
Motionbuilder Live Link プラグイン のバイナリは、Unreal Engine 4 GitHub レポジトリからダウンロードできます。
Motionbuilder Live Link プラグインの詳細な設定手順については、「Unreal Engine を Live Link で Motionbuilder に接続する」 操作ガイドを参照してください。
ART Tracking Live Link プラグイン
ART Tracking (アドバンスト リアルタイム トラッキング) は、Live Link を通じて次の用途でサポートされています。
- ボディ トラッカー
- フライスティック トラッカー
- ハンド トラッカー
- ヒューマン モデル
Live Link を介した ART Tracking により、VR、AR、モーション キャプチャなどのアプリケーションで、さまざまなトラッキングに ART の技術を活用できるようになります。
ART は Live Link プラグインをマーケットプレイスで配布し、GitHub 上で最新の開発をホストします。