資料
ダウンロード

Technology > 実モーションキャプチャで3Dアバターを踊らせる ―「関節角度」でロボットともつながるデジタルツイン

実モーションキャプチャで3Dアバターを踊らせる ―「関節角度」でロボットともつながるデジタルツイン

プロのダンサーが踊った“動きのデータ”(モーションキャプチャ)を、Webブラウザ上の3Dアバターにそのまま踊らせる ― そんなスタジオを作りました。全身の動き・表情・視線・口パクまで、ブラウザだけで動きます。

はじめにお断りしておくと、動きもアバターも「既存の転用素材」です(動き=Mixamoのモーションキャプチャ、アバター=VRM・GVRMのサンプルモデル)。当社が独自に作ったのは“システム”の側 ― 動きのデータを解析し、別骨格のアバターへ移し替え、制御して、2方式で描画するまでを1つに束ねる部分です。

そして本記事で一番お伝えしたいのは、この「関節角度の時系列で身体を動かす」という枠組みが、そのままロボットの制御・デジタルツインと地続きだということです。

デモ映像

※ 実モーションキャプチャの再生から2方式の描画、ロボットとの共通性までをまとめた紹介映像です。

動きの主役は「実モーションキャプチャ」

まず、動きの入り口を整理します。モーションキャプチャ(mocap)とは、実際の人が動いたときの「関節の回り方」を記録したデータです。3Dの動きは、突き詰めれば関節を少しずつ回していくこと。その回し方を時系列で記録したものが mocap で、本システムでは指まで含めた52本のボーンを実キャプチャの角度で駆動します。

サンバのモーションキャプチャを1秒ごとに並べた棒人間の連続ポーズ
実モーションキャプチャの再生(サンバ)。指を含む52本のボーンを、実キャプチャの関節角度で駆動しています。動きの素材は Mixamo のロイヤリティフリー mocap(Dancing / SambaDancing / ZombieKicking)を転用しています。

動きをアバターに移す ― FBX再生パイプライン

外部の mocap(FBX形式)を、アバターの骨格に適用するまでの流れです。

FBX(mocap)→パース→リターゲット→FK描画の4段パイプライン図
① FBX(mocap)を読み込み → ② ボーン・カーブを抽出 → ③ アバター骨格へリターゲット → ④ 順運動学(FK)で全身と指に適用。外部の mocap を、当社の独自パーサと独自リターゲットエンジンでアバター骨格へ載せています。

ここで地味ですが重要なのが ③リターゲットです。mocap の骨格とアバターの骨格は、ボーンの名前も向きも違います。そのままでは手足があらぬ方向を向いてしまうため、

  • ボーン名の表記ゆれを正規化して VRM 標準骨格へ対応づけ、
  • 親ボーンの静止姿勢を使って骨格差の向きのズレを補正する、

という処理を独自に実装しています。「ある身体で記録した動きを、別の身体で正しく再現する」 ― これは後述するとおり、ロボティクスの異機種間モーション移植とまったく同じ問題です。

1つのシステム × 2つのレンダリング

同じシステム・同じ mocap で、2種類の描画方式のアバターを踊らせられます。

左:ポリゴン(VRM)アバター、右:ガウシアン(GVRM)アバターが同じmocapで踊る比較
左=ポリゴン(VRM):メッシュをスキニングして変形。右=ガウシアン(GVRM):点群状の Gaussian Splatting をボーンで駆動。どちらも同一システム・同一 mocap で踊っています。アバターはいずれも転用のサンプルモデル(右は実写ベースのサンプルのため顔を伏せています)。
  • ポリゴン(VRM) ― いわゆる3Dキャラクター。メッシュをボーンに追従させて変形します。
  • ガウシアン(GVRM) ― 写実的な Gaussian Splatting(点の集まりで見た目を表現する新しい手法)を、同じ骨格で駆動します。

描き方が違っても、動かしているのは同じ「関節角度」。ここが次の話につながります。

補足:外部素材ゼロでも動く「プロシージャル生成」

mocap を使わず、数式(正弦波の合成)から動きをその場で作る自前エンジンも積んでいます。idle(待機)・wave(手振り)・walk・run・spin・dance など25種をリアルタイム生成でき、外部の mocap 素材が一切なくてもアバターを動かせます

idle/wave/dance/walk/run/spinなど数式生成された多彩なポーズの棒人間
mocap非依存で数式生成した動きの一部(25種)。正弦波合成でリアルタイムに生成しており、素材がなくても動かせます。

細部も“それらしく” ― 表情・視線・物理

見た目の自然さは、細かな自動制御が支えています。

  • 自動まばたき ― 自然な間隔で目を閉じる
  • 視線制御 ― カメラや任意のターゲットを見る
  • 口パク ― 母音(あ・い・う・え・お)に応じた口の形
  • ばね物理 ― 髪や衣装の揺れを物理でリアルに(呼吸や体の微細な揺れも重畳)

ここが本題 ― デジタルツイン & ロボットとの共通性

さて、ここまでは「アバターを踊らせる」話でした。しかし当社がこの題材に取り組む理由は、ロボットにあります。

動きの本質は『関節角度の時系列』です。この一点で、人間アバターとロボットは同じ枠組みで扱えます

人間アバター(VRM)とロボットの処理の対応表。各ボーン回転=各ジョイント目標角、VRM Humanoid=URDFなど
人間アバターとロボットの処理は、ほぼ一対一で対応します。各ボーンの回転(rad)=各ジョイントの目標角(rad)、VRM標準骨格 ≒ ロボットの機体定義(URDF)、FBX→VRMリターゲット = 機種間モーション移植、というように、同じ骨組みで捉えられます。
  • アバター = 制御対象(実体/ロボット)のデジタルツイン ― 実キャプチャの関節角度は、そのままロボットのアクチュエータ目標角とみなせます。
  • 人間の動きの処理 = ロボットの動作の処理 ― VRMの標準骨格はロボットの URDF(機体定義)に相当し、mocap の移植は異機種間モーション移植と同じ問題です。

つまり、アバターを制御対象のデジタルツインとして扱えば、そのままシミュレーションへ応用できます。人の動きをロボットへ移す、ロボットの動きを画面上のツインで確かめる ― その基盤づくりを、扱いやすいアバターダンスの題材で先に固めているわけです。

システムアーキテクチャ

全体の構成です。外部システムからのコマンドを受け、モーション(mocap再生/数式生成)と表情・視線を統合し、ポリゴン/ガウシアンのいずれかで毎フレーム描画します。

外部システム→AvatarController/MotionController/EmoteController→リターゲット・描画の構成図
コマンド管理・モーション・表情の各コントローラを束ね、FBXリターゲットと VRM/GVRM レンダラを経て、Three.js 上で全身アバターを毎フレーム更新します。

技術スタック(概要)

  • フロント ― React + TypeScript / React Three Fiber + Three.js
  • アバター@pixiv/three-vrm(骨格・表情・ばね物理)/ FBXLoader で mocap を読み込み
  • 写実描画 ― Gaussian Splatting(ポリゴンと切り替え)
  • バックエンド ― Node.js + Express(設定APIを提供)
  • 転用素材 ― Mixamo の mocap(FBX)/ VRM・GVRM のサンプルモデル

いずれも公開されているライブラリ・素材を組み合わせており、独自性は「それらを束ねて動かすシステム」にあります。

まとめ

  • やっていること ― 実モーションキャプチャで、Webブラウザ上の3Dアバターを全身・表情・口パクまで踊らせる。
  • 独自なのはシステム ― 解析 → リターゲット → 制御 → ポリゴン&ガウシアン描画の統合。動き・アバターは転用素材(Mixamo mocap/VRM・GVRMサンプル)。
  • 人間×ロボットの共通言語 ― 『関節角度の時系列』で、人間アバターとロボットは同じ枠組みで扱える。
  • デジタルツインへ ― アバターを制御対象のツインとみなせば、そのままシミュレーションや実機への動作移植につながります。

身近な「アバターを踊らせる」題材の裏で鍛えているのは、人の動きとロボットの動きを同じ言葉で扱う基盤です。デモやご相談を承っています。

この技術や導入について、お気軽にご相談ください。

お問い合わせ・ご相談はこちら
一覧に戻る

CONTACT US

RECRUIT