メインコンテンツへスキップ
Tech Playground
ゲーム開発

UE5.8 MetaHuman Facial Rig カスタマイズ完全ガイド|高度なモーションキャプチャ運用の実装手法

UE5.8 MetaHuman のフェイシャルリグをカスタマイズし、高度なモーションキャプチャデータを実装する実践ガイド。Control Rig カスタマイズ、ARKit/Live Link 統合、最適化手法を解説。

約11分で読めます

Unreal Engine 5.8 の MetaHuman は、リアルな人間キャラクターを短時間で生成できる強力なツールですが、商業プロジェクトや映像制作ではデフォルトのフェイシャルリグでは表現力が足りないケースが多発しています。特に、ARKit や Live Link などの高精度モーションキャプチャデータを扱う場合、カスタムリグの構築が不可欠です。

この記事では、UE5.8(2026年4月リリース)で強化された MetaHuman Facial Rig のカスタマイズ機能を活用し、プロダクション環境で実用的な高度なモーションキャプチャ運用を実装する方法を解説します。公式ドキュメントでは語られない実装の落とし穴と最適化戦略まで網羅します。

UE5.8 MetaHuman Facial Rig の新アーキテクチャ

UE5.8 では、MetaHuman の Facial Rig システムがモジュラー設計に刷新されました。これにより、従来は Blueprint でハックする必要があった表情制御が、Control Rig の階層的な拡張として実装可能になっています。

以下のダイアグラムは、UE5.8 の新しい Facial Rig アーキテクチャを示しています。

flowchart TD
    A["Live Link データソース<br/>(ARKit/Vicon等)"] --> B["Live Link Face Subobject"]
    B --> C["Face Control Rig"]
    C --> D["カスタムリグレイヤー<br/>(ユーザー定義)"]
    D --> E["Skeletal Mesh Component"]
    
    F["FACS Pose Asset"] -.->|ブレンド| C
    G["カスタムカーブ定義"] --> D
    D --> H["Deformer Stack"]
    H --> E
    
    style D fill:#ff6b6b,color:#fff
    style H fill:#4ecdc4,color:#fff

UE5.8 では、カスタムリグレイヤーと Deformer Stack が統合され、非破壊的なカスタマイズが可能になった

主要な変更点(2026年4月版)

  1. Control Rig Graph の階層化: 親リグを保持したまま子リグで拡張可能
  2. Live Link Face Subobject の改良: 52の ARKit blendshapes を直接マッピング
  3. Deformer Stack 統合: メッシュ変形をリグと独立して制御
  4. パフォーマンスプロファイラ: フェイシャルリグの CPU コストをリアルタイム可視化

特に重要なのは、Deformer Stack との統合です。従来は Morph Target のみだった表情表現が、Mesh Deformer による補正と組み合わせることで、極端な表情でも破綻しにくくなりました。

iPhone の TrueDepth カメラを使った ARKit フェイシャルキャプチャは、52 の blendshapes を提供しますが、MetaHuman のデフォルトリグは一部の微妙な表情(特に目の周辺と口角)を正確に再現できません

カスタムマッピングの実装手順

以下のフローチャートは、ARKit データから MetaHuman リグへのカスタムマッピング処理を示しています。

sequenceDiagram
    participant ARKit as ARKit Live Link
    participant UE as Unreal Engine 5.8
    participant ControlRig as Custom Face Control Rig
    participant Deformer as Mesh Deformer
    participant Mesh as Skeletal Mesh

    ARKit->>UE: 52 blendshapes データ送信
    UE->>ControlRig: Live Link Subject データ取得
    ControlRig->>ControlRig: カスタムカーブ変換<br/>(Remap + Filter)
    ControlRig->>Deformer: 補正用変形パラメータ
    Deformer->>Mesh: メッシュ変形適用
    ControlRig->>Mesh: ボーン変形適用
    Mesh->>UE: 最終フレーム出力

ARKit データは Control Rig で変換され、Deformer と並列で適用される

1. Control Rig アセットの作成

// Content/MetaHumans/Common/Face/ControlRigs/CustomFaceRig.uasset
// Control Rig Blueprint で実装

// RigUnit_LiveLinkEvaluate ノードでデータ取得
FLiveLinkSubjectFrameData SubjectData;
LiveLinkEvaluate(TEXT("iPhoneARKit"), SubjectData);

// カスタムマッピング(例: 口角の微調整)
float MouthSmileLeft = SubjectData.GetCurveValue(TEXT("mouthSmileLeft"));
float MouthSmileRight = SubjectData.GetCurveValue(TEXT("mouthSmileRight"));

// 非対称な笑顔の補正(デフォルトリグは左右差が弱い)
float SmileAsymmetry = MouthSmileLeft - MouthSmileRight;
SetCurveValue(TEXT("CTRL_L_mouth_smileDeep"), MouthSmileLeft + SmileAsymmetry * 0.3);
SetCurveValue(TEXT("CTRL_R_mouth_smileDeep"), MouthSmileRight - SmileAsymmetry * 0.3);

UE5.8 では、LiveLinkPresetカスタムカーブリマップ設定を保存できます。

// Config/DefaultLiveLink.ini に相当する設定
{
  "SubjectName": "iPhoneARKit",
  "CurveRemapping": {
    "eyeBlinkLeft": {
      "TargetCurves": [
        {"Name": "CTRL_L_eye_blink", "Scale": 1.0},
        {"Name": "CTRL_L_eye_squintInner", "Scale": 0.2}
      ]
    },
    "browInnerUp": {
      "TargetCurves": [
        {"Name": "CTRL_C_brow_raise", "Scale": 0.8},
        {"Name": "CTRL_L_brow_raiseIn", "Scale": 0.6},
        {"Name": "CTRL_R_brow_raiseIn", "Scale": 0.6}
      ]
    }
  }
}

このマッピングにより、ARKit の単一カーブを複数の MetaHuman コントロールに分散でき、より自然な表情が実現します。

3. Deformer による補正

極端な表情(大きく口を開けるなど)では、ボーンアニメーションだけでは歯茎が露出したり、唇がメッシュを貫通します。UE5.8 の Mesh Deformer でこれを補正します。

// CustomMouthDeformer.usf (HLSL Compute Shader)
[numthreads(64, 1, 1)]
void MainCS(uint3 DispatchThreadId : SV_DispatchThreadID)
{
    uint VertexIndex = DispatchThreadId.x;
    if (VertexIndex >= NumVertices) return;
    
    float3 OriginalPosition = InputPositions[VertexIndex];
    float MouthOpenValue = ControlParameters.MouthOpen;
    
    // 口の開き具合に応じて唇の内側の頂点を後退させる
    if (IsLipInteriorVertex(VertexIndex))
    {
        float3 Offset = float3(0, -1, 0) * MouthOpenValue * 0.5;
        OutputPositions[VertexIndex] = OriginalPosition + Offset;
    }
    else
    {
        OutputPositions[VertexIndex] = OriginalPosition;
    }
}

この Deformer を Control Rig と並行して適用することで、物理的に正しい変形が可能になります。

Vicon / OptiTrack との統合と高精度キャプチャ

ARKit はモバイル向けとしては優秀ですが、映画・ゲームシネマティクスではVicon や OptiTrack などの光学式モーションキャプチャが標準です。UE5.8 では、これらのシステムとの統合が改善されました。

Vicon Shogun との接続設定

以下の状態遷移図は、Vicon Shogun からのデータ取得フローを示しています。

stateDiagram-v2
    [*] --> Idle: エンジン起動
    Idle --> Connecting: Live Link 接続開始
    Connecting --> Connected: Shogun からデータ受信
    Connected --> Streaming: フレームデータ取得開始
    Streaming --> Recording: テイク記録開始
    Recording --> Streaming: 記録停止
    Streaming --> Disconnected: 接続切断
    Disconnected --> Connecting: 再接続
    
    Streaming --> ProcessingFrame: 毎フレーム
    ProcessingFrame --> ApplyingRig: Control Rig 評価
    ApplyingRig --> Rendering: レンダリング
    Rendering --> Streaming: 次フレーム待機

Vicon Shogun は Live Link を介してリアルタイムストリーミングを提供

実装例

// Project Settings > Plugins > Live Link で設定
// C++ での Live Link Source 追加

#include "ILiveLinkClient.h"
#include "LiveLinkViconSource.h"

void AMyActor::SetupViconLiveLink()
{
    IModularFeatures& ModularFeatures = IModularFeatures::Get();
    ILiveLinkClient* LiveLinkClient = &ModularFeatures.GetModularFeature<ILiveLinkClient>(
        ILiveLinkClient::ModularFeatureName
    );
    
    // Vicon Shogun の IP アドレスとポート
    FLiveLinkViconConnectionSettings Settings;
    Settings.IPAddress = TEXT("192.168.1.100");
    Settings.Port = 801;
    Settings.SubjectName = TEXT("ActorFace");
    
    TSharedPtr<ILiveLinkSource> ViconSource = MakeShared<FLiveLinkViconSource>(Settings);
    LiveLinkClient->AddSource(ViconSource);
}

フェイシャルマーカーセットの最適化

Vicon でのフェイシャルキャプチャでは、マーカー配置が精度を左右します。UE5.8 の Control Rig では、以下のマーカーセットが推奨されます。

部位マーカー数配置ポイント
眉周辺6眉頭・眉山・眉尻(左右各3)
目周辺8上瞼・下瞼・目尻・目頭(左右各4)
3鼻筋・鼻翼(左右)
口周辺12上唇・下唇・口角(各4点ずつ)
4頬骨下(左右各2)

合計 33 マーカーが最小構成です。これを Control Rig でマッピングします。

// Vicon マーカーから MetaHuman ボーンへのマッピング
void UCustomFaceControlRig::MapViconMarkers(const TArray<FVector>& MarkerPositions)
{
    // 眉の動きを3点から推定
    FVector BrowLeftInner = MarkerPositions[0];
    FVector BrowLeftMid = MarkerPositions[1];
    FVector BrowLeftOuter = MarkerPositions[2];
    
    // 眉の高さから Control Rig の Rotation を計算
    float BrowRaiseAmount = CalculateBrowRaise(BrowLeftInner, BrowLeftMid, BrowLeftOuter);
    SetCurveValue(TEXT("CTRL_L_brow_raiseIn"), BrowRaiseAmount);
    
    // 口の形状を12点から再構成
    TArray<FVector> MouthMarkers = MarkerPositions.Slice(15, 12);
    FMouthShape MouthShape = ReconstructMouthShape(MouthMarkers);
    ApplyMouthShape(MouthShape);
}

パフォーマンス最適化とプロファイリング

高精度なフェイシャルリグはCPU コストが大きいため、プロダクション環境では最適化が必須です。UE5.8 では、専用のプロファイラが追加されました。

Control Rig Profiler の使用

// コンソールコマンド
ControlRig.Profile 1  // プロファイリング有効化
ControlRig.Profile.ShowDetailedStats 1  // 詳細統計表示

// 出力例(UE5.8 の新フォーマット)
// ControlRig: CustomFaceRig
//   Total Time: 2.34ms
//   RigUnit_LiveLinkEvaluate: 0.45ms (19.2%)
//   Custom Curve Remapping: 1.12ms (47.9%)
//   Deformer Dispatch: 0.77ms (32.9%)

最適化戦略

以下の比較図は、最適化前後の処理時間を示しています。

graph LR
    A["最適化前<br/>2.34ms"] --> B["カーブ補間削減<br/>1.85ms (-21%)"]
    B --> C["Deformer LOD<br/>1.23ms (-34%)"]
    C --> D["非同期評価<br/>0.87ms (-29%)"]
    
    style A fill:#ff6b6b,color:#fff
    style D fill:#51cf66,color:#fff

段階的な最適化で処理時間を 63% 削減

1. カーブ補間の削減

// 遠距離では補間精度を下げる
float DistanceToCamera = GetDistanceToCamera();
int32 InterpolationQuality = (DistanceToCamera > 500.0f) ? 1 : 4;

// RigUnit_BezierCurveInterpolate の Quality パラメータ
BezierCurveInterpolate(SourceCurve, TargetCurve, Alpha, InterpolationQuality);

2. Deformer の LOD 切り替え

// Distance-based LOD for Deformer
if (DistanceToCamera < 200.0f)
{
    // High-quality deformer (full vertex processing)
    ApplyDeformer(HighQualityDeformer);
}
else if (DistanceToCamera < 500.0f)
{
    // Medium-quality (subsample vertices)
    ApplyDeformer(MediumQualityDeformer);
}
else
{
    // Deformer disabled, morph targets only
    DisableDeformer();
}

3. 非同期評価

UE5.8 では、Control Rig の評価を別スレッドに分離できます。

// Enable async evaluation in Control Rig settings
UControlRig* FaceRig = GetFaceControlRig();
FaceRig->bEnableAsyncEvaluation = true;
FaceRig->AsyncEvaluationPriority = EAsyncExecutionPriority::High;

// Game Thread での待機が不要になり、フレームレート向上

トラブルシューティングとデバッグ手法

よくある問題と解決策

問題原因解決策
表情が遅延するLive Link のバッファリング設定LiveLinkSettings.iniBufferSize=1 に設定
極端な表情で破綻Deformer の適用順序ミスControl Rig → Deformer の順に評価
非対称な表情が反映されないARKit のマッピング不足左右独立したカーブマッピングを追加
パフォーマンス低下不要な補間計算LOD システムの導入

デバッグビジュアライゼーション

// Control Rig のデバッグ表示
ShowDebug ControlRig

// 特定のコントロールのみ表示
ControlRig.Debug.ShowControls CTRL_L_eye_blink,CTRL_R_eye_blink

// Deformer の変形量を可視化
r.MeshDeformer.Debug 1

UE5.8 では、リアルタイムでカーブ値をグラフ表示できるデバッガが追加されました。

// Live Link Curve Debugger の起動
LiveLink.Debug.ShowCurveGraph iPhoneARKit

これにより、ARKit から送られてくる blendshapes の値をリアルタイムで監視し、マッピングの精度を確認できます。

まとめ

UE5.8 の MetaHuman Facial Rig カスタマイズは、以下の点で従来版から大きく進化しています。

  • モジュラー設計により、非破壊的なカスタマイズが可能
  • Deformer Stack 統合で極端な表情でも破綻しにくい
  • ARKit / Vicon などの高精度モーションキャプチャとの統合が改善
  • 専用プロファイラによる最適化が容易

特に重要なのは、Control Rig のカスタムレイヤーと Deformer の並列適用です。これにより、プロダクション品質のフェイシャルアニメーションが実現可能になりました。

次回以降、音声駆動アニメーション(Audio2Face)や、複数カメラでのマルチアングルキャプチャ統合についても解説予定です。

参考リンク

#Unreal Engine 5 #MetaHuman #Facial Rig #モーションキャプチャ #Control Rig
シェア: