1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Automatic Rigging and Animation of 3D Characters (2007)

1
Posted at

Automatic Rigging and Animation of 3D Characters (Popovic, 2007)

3行要約

  1. 本論文は、3Dキャラクターのアニメーションにおける手動リギングの煩雑さを解消するため、静的なキャラクターメッシュと汎用スケルトンから自動的にリギングとアニメーションを行う手法を提案します。
  2. 提案手法は、まずキャラクターの内部構造にスケルトンを適応させる「スケルトン埋め込み」と、メッシュ頂点へのボーンウェイトを熱平衡方程式で決定する「スキンアタッチメント」の2つの主要ステップから構成されます。
  3. このシステム「Pinocchio」は、多様なキャラクターに対して高い汎用性とビデオゲームに匹敵するアニメーション品質を実現し、多くの場合1分未満でリギングを完了します。
     
    image.png

Q:何が問題で、それをどのように解決したのか、わかりやすく説明してください

A:


論文が解決しようとした問題:

3Dキャラクターをアニメーションさせる際、これまでは「リギング」という作業が非常に手間のかかるボトルネックでした。リギングとは、以下の2つの手作業を指します。

  1. スケルトン(骨格)の配置: キャラクターの内部に、どの位置にどの関節(ジョイント)があるべきかを手動で定義すること。
  2. スキンアタッチメント(スキニングウェイトの割り当て): キャラクターの表面(メッシュ)のどの部分がどの骨に追従して変形するかを、ウェイト(重み)として手動で設定すること。

この手作業は専門知識と時間がかかるため、初心者や子どもが気軽に3Dキャラクターを動かすことを難しくしていました。論文の著者たちは、「子どもがユニコーンのモデルを作って、"四足歩行ギャロップ"ボタンをクリックするだけで、ユニコーンが走り出すようなシステム」を想像していました。

どのように解決したのか:

この論文では、この手動リギングのプロセスを完全に自動化する方法を提案しています。彼らが開発したシステム「Pinocchio(ピノキオ)」は、以下の2つの主要なステップで問題を解決します。

1. スケルトン埋め込み (Skeleton Embedding)

キャラクターのメッシュ(表面形状)の中に、汎用的なスケルトン(骨格)を自動的にフィットさせ、配置します。

  • 課題: スケルトンをキャラクターの内部に「綺麗に」配置するのは、膨大な組み合わせの中から最適なものを選ぶ難しい最適化問題です。
  • 解決策:
    1. キャラクターの内部構造の解析: まず、キャラクターの内部を「距離場」という情報を使って解析し、骨格が通りそうな経路(近似的な中央表面)を見つけ出します。そこに「球体」を敷き詰め、これらの球体の中心を結んで「グラフ」を作成します。このグラフが、骨格のジョイントが配置されうる候補地となります。
    2. 離散的な最適化(大まかな配置): 次に、スケルトンの主要なジョイント(関節)をこのグラフの頂点に配置する問題を解きます。この際、「ペナルティ関数」というものを使って、「骨が短すぎる」「骨同士が重なる」「足が地面から離れすぎる」といった不適切な配置に高いペナルティを与えるように設計されています。このペナルティ関数の各項の重みは、機械学習(最大マージン法)によって自動的に学習されるため、手動調整の手間を省き、様々なキャラクターに対応できます。A*アルゴリズムに似た探索手法で効率的に最適な大まかな配置を見つけます。
    3. 連続的な最適化(詳細な調整): 大まかな配置が見つかったら、より細かい関節も含めたスケルトン全体の位置を、勾配降下法などの連続的な最適化手法で微調整し、キャラクターの内部にぴったりと収まるようにします。

2. スキンアタッチメント (Skin Attachment)

配置されたスケルトンの動きが、キャラクターの表面メッシュをどのように変形させるかを定義する「スキニングウェイト」を自動的に計算します。

  • 課題: メッシュの頂点ごとに、どの骨の影響をどれだけ受けるかを数値(ウェイト)で設定する必要があります。これが手動では非常に繊細で手間がかかります。また、メッシュの解像度(細かさ)に依存せず、かつ滑らかに変形するウェイトが必要です。
  • 解決策:
    1. 熱伝導の比喩: キャラクターの表面を「断熱された熱伝導体」と見立て、各骨を「一定の温度を持つ熱源」と考えます。
    2. 拡散方程式の利用: 各骨が放出する熱が表面でどのように平衡状態になるかを「ラプラスの拡散方程式」を使って計算します。この平衡状態における各頂点の「温度」が、その骨に対する「スキニングウェイト」となります。
    3. 利点: この方法により、ウェイトはメッシュの解像度に依存せず、表面上で非常に滑らかに変化します。また、骨と頂点との距離だけでなく、キャラクターの形状(熱が伝わる経路)を考慮するため、「胴体が腕にくっついてしまう」といった不自然な変形を防ぎます。

論文の貢献と成果:

この自動化されたアプローチにより、Pinocchioは以下の3つの基準で高い性能を達成しました。

  • 汎用性: 1つの汎用スケルトンで、人間型、ロボット、奇妙なクリーチャーなど、幅広い種類のキャラクターをリギングできます。
  • 品質: 自動生成されたアニメーションの品質は、最新のビデオゲームに匹敵するレベルです。
  • 性能: リギングにかかる時間は、一般的なPCで1分未満と非常に高速です。

この技術によって、3Dアニメーションの専門家でなくても、より多くの人々が手軽にキャラクターを動かせるようになりました。また、スキンアタッチメントの熱伝導を用いた手法など、個々の技術も他の3Dパッケージに応用できる可能性があります。

Q:全体像をもう少しわかりやすく説明してもらえますか?

A:

Pinocchio:動き出す3Dキャラクターを自動で作り出す魔法のシステム

Pinocchioが解決したい一番大きな問題は、「3Dキャラクターをアニメーションさせるために、手作業で骨を配置し、皮膚と骨を結びつける作業(リギング)がすごく大変で、専門家でないとできない」というものでした。

Pinocchioの目標は、まるで「子どもが作った粘土の動物に、たった一押しで命を吹き込む」かのように、この作業を全自動で、素早く、どんなキャラクターにも対応できるようにすることでした。

そのために、Pinocchioは大きく分けて2つの主要なステップを踏みます。


ステップ1:骨格をキャラクターの「身体の中」にぴったり収める(スケルトン埋め込み)

  1. キャラクターの身体を「スキャン」して内部を理解する:
    • まず、Pinocchioは与えられた3Dキャラクターの「内部がどうなっているか」を詳細に調べます。まるで病院でMRIを撮るように、キャラクターの厚みや形、空洞になっている部分などをデータとして捉えます。これにより、「どこに骨を通すスペースがあるか」を把握します。
       
  2. 「最適な骨格の配置」を「学習されたルール」で探す:
    • 次に、標準的な「人型」や「四足動物型」などの骨格の設計図(ジェネリックスケルトン)を準備します。Pinocchioはこの設計図の骨格が、キャラクターの身体の中で最も自然で、かつアニメーションしやすい位置に来るように、何千、何万もの配置の組み合わせの中から最適なものを選び出そうとします。
    • このとき、Pinocchioには「こんな配置はダメだ!」というルールブックがあります。例えば、「骨がキャラクターの体から飛び出ている」「左右の腕の骨の長さが全然違う」「足の骨が空中にある」といった配置には大きなペナルティ(減点)を与えます。
    • ここで、サポートベクターマシンの「考え方」が登場します:この「ルールブック」の各ペナルティ(「骨の長さ」や「左右対称性」など)に、どれくらいの重要度(重み)を与えるべきか?これをPinocchioは、事前に「このキャラクターはうまく動いた」「このキャラクターはうまくいかなかった」という経験データから、賢く自動で学習します。これにより、開発者が手作業で細かく調整する手間が省け、新しい形のキャラクターにも柔軟に対応できるようになります。
    • そして、この学習されたルールを使って、最もペナルティが少ない(つまり、最も自然で良い)骨格の配置を、効率よく探索して見つけます。
       
  3. 微調整で完璧なフィットを実現:
    • 大まかな骨格の配置が決まったら、今度はキャラクターの身体の曲面に沿って、もっと細かく、滑らかに骨格を微調整します。これで、骨格がキャラクターの内部に「しっくり」と収まります。

ステップ2:骨格の動きが「皮膚」にどう伝わるかを決める(スキンアタッチメント)

  1. 骨と皮膚を「熱の伝わり方」で結びつける:

    • 骨格がキャラクターの身体の中に配置されたら、次は「この骨が動いたら、キャラクターの表面(皮膚)のどの部分がどれくらい動くべきか」を決めます。これが「ウェイト」と呼ばれる情報です。
    • Pinocchioは、このウェイトを非常に巧妙な方法で計算します。それは、まるでキャラクターの身体が「熱を伝える物体」で、骨が「熱源」であるかのように考える方法です。
    • 例えば、「右手首の骨」が熱源だとして、そこから熱がキャラクターの体表面に伝わっていく様子をシミュレーションします。このとき、右手首の骨から直接熱を受け取った部分は「右手首の骨に強く結びついている」と考え、遠い部分は影響が少ないとします。
  2. 自然で滑らかな動きを実現:

    • この「熱伝導」の考え方を使うことで、以下のような利点が得られます。
      • 滑らかな動き: ウェイトが表面全体で自然に、滑らかに変化するため、関節が曲がっても皮膚がガタガタせずに、柔らかく変形します。
      • 身体の構造を考慮: 熱は壁や障害物を越えて伝わらないため、「腕の骨の動きが、離れた場所にある胴体の一部に誤って影響してしまう」といった不自然な結びつきを防ぎます。
      • どんな形のキャラクターにも対応: 細かいメッシュ(表面の三角形)の数に左右されず、キャラクターの実際の形状に基づいてウェイトが計算されるため、様々なキャラクターに適用できます。

まとめ

Pinocchioは、これらの自動化されたステップを通じて、静的な3Dキャラクターのメッシュと、動きの設計図となるジェネリックスケルトンを受け取り、数分でアニメーション可能な状態に変換します。

Q:この論文の概要を教えてください

A:

image.png

本論文は、静的な3Dキャラクターメッシュと汎用的なスケルトンから、キャラクターを自動的にリギングしてアニメーションさせる手法を提案しています。これにより、熟練者でなくてもキャラクターを簡単に動かせるシステム「Pinocchio」を実現しています。従来の手動によるリギング作業(スケルトンの配置やサーフェスのボーンへのアタッチ)の煩雑さを解消し、ユーザーフレンドリーなアニメーション制作を可能にします。

提案手法は主に「スケルトン埋め込み」と「スキンアタッチメント」の2つのステップから構成されます。

  1. スケルトン埋め込み (Skeleton Embedding)
    このステップでは、与えられたスケルトンをキャラクターの内部に最適に配置します。これは3次元空間におけるジョイント位置を決定する最適化問題として定式化されますが、直接的な連続最適化は計算上困難です。

    • 離散化 (Discretization)
      まず、キャラクターを軸に揃えられた単位立方体内にリスケールし、適応的にサンプリングされた符号付き距離場をオクツリー上に計算します。この距離場を用いて、おおよそメディアルサーフェス(物体内部の中心軸)上の点群をサンプリングします。C1不連続点を検出するために、オクトリーのセル境界で勾配ベクトルの角度が120度以上となる点をメディアルサーフェス上の点として識別し、キャラクター表面に近すぎる点(2τ以内)は除外します。
      次に、これらのメディアルサーフェス上の点を用いて球体をパッキングします。表面からの距離が遠い点から順に処理し、既存の球体に含まれない点に、表面までの距離を半径とする球体を追加します。
      最終的に、球体の中心をグラフの頂点とし、球体が交差する場合や、交差しないがエッジが表面から十分離れており(より小さい球体の半径の半分以上)、かつガブリエルグラフの条件を満たす場合にエッジを追加して、離散的なグラフを構築します。このグラフの全ての頂点ペア間の最短経路を事前に計算しておきます。

    • 削減スケルトン (Reduced Skeleton)
      最適化の自由度を減らすため、膝などの次数が2のジョイントを結合し、ボーンチェーンを1つにまとめた「削減スケルトン」を使用します。これにより、ジョイント数がsからr(例えば、ヒト型スケルトンで18から7)に削減されます。削減スケルトンの埋め込みが決定すれば、中間ジョイントは最短経路を分割することで計算されます。

    • 離散ペナルティ関数 (Discrete Penalty Function)
      削減スケルトンをグラフGに埋め込む問題は、頂点$v = (v_1, \dots, v_r)$のr-タプルを見つけることで、与えられたスケルトンからの逸脱にペナルティを課す関数$f(v)$を最小化します。
      ペナルティ関数$f$は$k$個の「基底」ペナルティ関数$b_i(v)$の線形結合$f(v) = \sum_{i=1}^k \gamma_i b_i(v)$として表現されます。本論文では、短いボーン、不適切なジョイント間の向き、対称ボーンの長さの違い、ボーンチェーンの頂点共有、足が底にないこと、ゼロ長ボーンチェーン、不適切なボーンの向き、極端な頂点に埋め込まれない次数1のジョイント、グラフ上で近いがボーンチェーンでは遠いジョイントなどにペナルティを課す9つの基底関数を使用します。
      係数$\Gamma = (\gamma_1, \dots, \gamma_k)$は、サポートベクターマシンに触発された新しい「最大マージン」アプローチによって半自動的に学習されます。学習の目的は、与えられた「良い」埋め込みと「悪い」埋め込みのフィーチャベクトルの間で最適化マージン$\min_{i=1}^n \Gamma^T q_i - \min_{i=1}^m \Gamma^T p_i$を最大化することです。これにより、最も良い「悪い」埋め込みと最も良い「良い」埋め込みを区別できる$\Gamma$を見つけます。この最適化は、ランダムな初期値からNelder-Mead法を用いて行われ、手動での分類とトレーニングセットの拡張を繰り返すことで$\Gamma$を安定させます。
      image.png

    • 離散埋め込み (Discrete Embedding)
      離散埋め込みを計算するために、部分的な埋め込みから$f$の良い下限を推定できるA*アルゴリズムに似た分岐限定法(branch-and-bound method)が使用されます。優先度キューに部分的な埋め込みを下限推定値でソートして保持し、最適な部分埋め込みを拡張していきます。これにより、指数関数的な探索空間を持つ問題でも、多くの実用的なスケルトンに対して高速な解を得られます。ジョイントは次数が高いものから順に埋め込まれることで、より正確な下限推定が可能になります。

    • 埋め込みの洗練 (Embedding Refinement)
      離散最適化で得られた削減スケルトンの埋め込みは、連続的な最適化によって洗練されます。これにより、次数が2のジョイントが再挿入され、ボーンチェーンがキャラクター内にきれいに収まるように調整されます。連続ペナルティ関数$g(q_1, \dots, q_s) = \alpha_A g_A(q_1, \dots, q_s) + \sum_{i=2}^s g_i(q_i, q_{p_S(i)})$は、非対称性、ボーンが表面内に収まっているか、ボーンの長さ、与えられたスケルトンとの向きの違いにペナルティを課します。この最適化には勾配降下法が用いられます。
       

  2. スキンアタッチメント (Skin Attachment)
    スケルトンの変形をキャラクターメッシュに適用する方法を定義します。本論文では、広く使われている線形ブレンドスキニング(LBS: Linear Blend Skinning)を採用します。これは、各頂点$v_j$の変換後の位置を$\sum_i w_{j}^i T_i(v_j)$と計算するもので、ここで$T_i$は$i$番目のボーンの変換、$w_{j}^i$は$i$番目のボーンに対する頂点$j$のウェイトです。
    ウェイト$w_j^i$は、メッシュの解像度に依存せず、表面上で滑らかに変化し、ジョイントから表面までの距離に比例するような遷移幅を持つことが望ましいです。これを実現するため、本論文では熱平衡の類推を使用します。キャラクターのボリュームを断熱された熱伝導体とみなし、ボーン$i$の温度を1、他のボーンの温度を0に保ったときの表面の平衡温度をボーン$i$のウェイトとします。
    計算を簡略化するため、ボリューム全体ではなく表面のみで熱平衡を解きます。各頂点$j$における骨$i$の熱平衡は、次の方程式で与えられます:
    $- \Delta w_i + H w_i = H p_i$
    ここで、$\Delta$はコタンジェント公式で計算される離散表面ラプラシアン、$p_i$は頂点$j$の最も近いボーンが$i$であれば1、そうでなければ0となるベクトル、$H$は対角行列で、$H_{jj}$は頂点$j$の最も近いボーンからの熱寄与重みです。$H_{jj} = c / d(j)^2$として定義され、$d(j)$は頂点$j$から最も近いボーンまでの距離、$c$は約0.22の定数です。$c=1$に設定することで、より自然な結果が得られることが実験で示されています。
    この方程式は疎な線形システムであり、左辺の行列$(-\Delta + H)$はボーン$i$に依存しないため、一度因子分解すれば各ボーンのウェイトをバックサブスティテューションで効率的に計算できます。

結果
Pinocchioプロトタイプは、開発に使用されなかった16のキャラクターに対してテストされました。そのうち13のモデル(81%)でスケルトンが正しく埋め込まれ、残りの3モデルでも単一ジョイントのヒントで修正可能でした。多様なプロポーションのキャラクターや異なる種類のスケルトン(例えば、ケンタウロスの海賊にケンタウロススケルトン)にも対応できる汎用性を示しました。アニメーションの品質は最新のビデオゲームに匹敵するとされていますが、LBS固有の欠点(例えば、関節の折りたたみアーティファクト)や、キャラクターの材質を考慮しないことによるリアリティの欠如が課題として挙げられています。パフォーマンス面では、1.73MHz Intel Core Duo(1GB RAM)のPCで、平均33,224頂点のモデルに対して約31.3秒でリギングを完了しました。処理時間の大部分は離散化(特に距離場の計算)に費やされます。

結論と将来の展望
本論文は、見慣れないキャラクターに対して自動的にスケルタルアニメーションのリギングを行う初めての手法を提示しました。静的なメッシュから素早くアニメーション可能なキャラクターを作成できます。LBSウェイトの計算方法や、ペナルティ関数の重み学習アプローチなど、いくつかの技術は他の分野でも有用であるとされています。将来の課題として、楕円体パッキングによるグラフサイズの削減、より高品質なスキニングモデルの採用、モーションリターゲティングとジョイントリミットの組み合わせによるアーティファクトの削減、およびキャラクターが明確な内部を持つという前提の排除が挙げられています。手や顔のアニメーションへの拡張も将来の興味深い課題とされています。

Q:提案手法の処理の流れを順序だてて説明してください

A:

全体は大きく「スケルトン埋め込み」と「スキンアタッチメント」の2つのフェーズに分かれ、それぞれがさらに複数のステップで構成されています。


Pinocchio 提案手法の処理の流れ

フェーズ1: スケルトン埋め込み (Skeleton Embedding)

このフェーズでは、与えられた静的な3Dキャラクターメッシュの内部に、汎用スケルトンを自動的に配置します。

  1. キャラクターのリスケール (Character Rescaling):
    • まず、入力された3Dキャラクターメッシュを、計算の都合上、軸に沿った単位立方体(unit cube)内に収まるようにリスケールします。これにより、以降のすべての許容誤差(tolerance)がキャラクターのサイズに対して相対的になります。
       
  2. 距離場の計算 (Distance Field Computation):
    • メッシュの内部構造を解析するために、適応的にサンプリングされた符号付き距離場(adaptively sampled signed distance field)をオクツリー構造で計算します。これは、任意の点からメッシュ表面までの最短距離を示す情報です。この情報を使って、キャラクターの内部がどのような形状をしているかを把握します。
    • $\tau = 0.003$ の許容誤差が、精度と効率のバランスに優れているとされています。
       
  3. 近似的な中央表面の抽出 (Approximate Medial Surface Extraction):
    • 計算された距離場を利用して、キャラクター内部の「近似的な中央表面」のサンプル点群を特定します。中央表面は、キャラクターの形状の中心線や中心面のようなもので、骨格が配置されるのに適した場所です。
    • 具体的には、オクツリーのセル境界で、隣接するセルの勾配ベクトル間の角度が特定の閾値($120^\circ$)以上となる点を中央表面の候補として抽出します。また、表面に近すぎる点($2\tau$以内)はノイズとして除外されます。
       
  4. 球体パッキング (Sphere Packing):
    • 抽出された中央表面のサンプル点の中から、グラフの頂点となる「球体中心」を選び出します。
    • これは、中央表面の点を表面からの距離が遠い順(つまり、最も内部にある点から)にソートし、未だ他の球体に覆われていない点があれば、その点を中心とし、表面までの距離を半径とする球体を配置していく「球体パッキング」アルゴリズムで行われます。これにより、キャラクター内部を効率的に覆う、大きくて最適な球体が選ばれます。
       
  5. グラフ構築 (Graph Construction):
    • パッキングされた球体の中心を頂点とし、その間に「エッジ(辺)」を構築して、幾何学的なグラフ $G = (V, E)$ を作成します。このグラフが、スケルトンのジョイントが配置されうる離散的な候補空間となります。
    • エッジは、球体同士が交差する場合、または交差しない場合でも、辺のどの点から表面までの距離が小さな球体の半径の半分以上であり、かつその辺の中間点に最も近い球体中心がその辺の端点である(Gabriel graph条件)場合に接続されます。
    • このグラフ上で、すべての頂点ペア間の最短経路を事前に計算しておき、後のステップでのペナルティ関数評価を高速化します。
       
  6. 縮小スケルトンとペナルティ関数 (Reduced Skeleton and Penalty Function):
    • 与えられたスケルトンから、膝や肘などの「次数2のジョイント」(つまり、1本の骨の中間に位置するジョイント)を一時的に除去した「縮小スケルトン」を作成します。これにより、最適化問題の自由度(次元)を大幅に削減します。中間ジョイントは、骨の両端が配置されれば、その間の最短経路を比例分割することで後から復元できます。
    • スケルトンの埋め込みの品質を評価するための「離散ペナルティ関数」を定義します。これは、$k$ 個の「基本ペナルティ関数」$b_i(v)$ の線形結合 $f(v) = \sum_{i=1}^k \gamma_i b_i(v)$ で構成されます。各基本ペナルティ関数は、骨の長さ、向き、対称性、共有経路、足の位置など、望ましくない配置にペナルティを与えます。
    • この線形結合の重みベクトル $\Gamma = (\gamma_1, \ldots, \gamma_k)$ は、手動ではなく、最大マージン法(サポートベクターマシンに触発された手法)を用いた機械学習によって、訓練データ(良い埋め込みと悪い埋め込みの例)から自動的に学習されます。これにより、ペナルティ関数が異なるキャラクターに対して汎用的に機能するようになります。
       
  7. 離散的スケルトン埋め込み (Discrete Skeleton Embedding):
    • 縮小スケルトンをグラフ $G$ に埋め込む最適な方法、つまりペナルティ関数 $f(v)$ を最小化するグラフ頂点の $r$-タプル $v = (v_1, \ldots, v_r)$ を見つけます。
    • これは「A*アルゴリズム」に似た探索手法(branch-and-bound)を使って行われます。部分的な埋め込みに対するペナルティ関数の良い下限値を見積もることで、指数関数的な探索空間を効率的に探索し、厳密な最適解を保証します。ジョイントを埋め込む順序は、次数が高いジョイント(多くの骨が接続されているジョイント)から先に行うと、下限値の精度が高まり、探索が効率化されます。
    • もし自動結果が望ましくない場合、ユーザーは特定のジョイントに対する制約(「左手は特定の頂点グループに埋め込むべき」など)を与えることで、探索を誘導することができます。
       
  8. 埋め込みの精緻化 (Embedding Refinement):
    • 離散的な最適化で見つかった縮小スケルトンの埋め込みを基に、除去されていた次数2のジョイント(膝、肘など)をグラフの最短経路を比例分割することで再挿入し、完全なスケルトンを復元します。
    • その後、この完全なスケルトンのジョイント位置 $(q_1, \ldots, q_s)$ を $\mathbb{R}^3$ 空間で連続的に微調整します。これは、よりシンプルな「連続ペナルティ関数」$g(q_1, \ldots, q_s)$ を最小化する勾配降下法によって行われます。この連続ペナルティ関数は、骨が表面内に収まるか、適切な長さか、元のスケルトンと同じ向きか、左右対称性などを評価します。この段階では、骨全体の大まかな形状はすでに正しいので、局所的なフィット感を向上させます。

フェーズ2: スキンアタッチメント (Skin Attachment)

このフェーズでは、埋め込まれたスケルトンの動きに合わせてキャラクターメッシュがどのように変形するかを定義する「スキニングウェイト」を計算します。

  1. ウェイト初期化と熱伝導のアナロジー (Weight Initialization and Heat Conduction Analogy):
    • 各メッシュ頂点 $j$ に対して、どの骨 $i$ の影響をどれだけ受けるかを示すウェイト $w_{ij}$ を求めます。
    • 論文では、キャラクターのボリュームを「断熱された熱伝導体」として、各骨 $i$ を「温度が $1$ の熱源」、他の骨を「温度が $0$ の熱源」と見立てます。この設定での熱平衡状態における各頂点の温度が、その骨に対するウェイト $w_{ij}$ になると考えます。
       
  2. 拡散方程式の解法 (Solving Diffusion Equation):
    • 表面上の熱平衡は、以下の修正された拡散方程式によって表現されます。
      $$ -\Delta w_i + H w_i = H p_i $$
      ここで、
      • $\Delta$ は離散的な表面ラプラシアン(コタンジェント式で計算)。
      • $w_i$ は骨 $i$ に対する全頂点のウェイトベクトル。
      • $p_i$ は、頂点 $j$ に最も近い骨が $i$ であれば $p_{ij} = 1$、そうでなければ $p_{ij} = 0$ となるベクトル。もし複数の骨が等距離であれば、$p_{ij}$ はそれらの骨間で均等に分配されます。
      • $H$ は対角行列で、$H_{jj}$ は頂点 $j$ から最も近い骨までの距離 $d(j)$ に基づく熱寄与重み $c/d(j)^2$。これにより、骨に近い頂点ほどその骨の影響を強く受けます。また、頂点から骨への最短線分がキャラクター内部に完全に含まれる場合にのみ熱寄与が考慮されます。
    • この線形システムは、骨 $i$ に依存しない左側の行列 $(-\Delta + H)$ を一度だけ因子分解し、各骨 $i$ に対して「バックサブスティテューション」を行うことで効率的に解かれます。これにより、すべての骨に対するウェイト $w_{ij}$ が計算されます。
    • この方法の重要な特性として、各頂点のウェイトの合計は自動的に1になります($\sum_i w_{ij} = 1$)。
      image.png

最終的なアニメーション

  • 計算された骨格の配置とスキニングウェイトを使って、与えられたスケルトンのモーションデータをキャラクターメッシュに適用し、アニメーションを生成します。この際、フットスケート(足が滑るように見える現象)を排除するために、既存のオンラインモーションリターゲティング技術も組み合わされています。

このように、Pinocchioは幾何学的処理、グラフ探索、機械学習、数値最適化、物理シミュレーションのアナロジーといった多岐にわたる技術を組み合わせることで、複雑な3Dキャラクターリギングの自動化を実現しています。非常に洗練されたアプローチと言えるでしょう。
image.png

Q:関連手法との比較について詳しく説明してください

A:

論文では、関連研究を主に以下のカテゴリに分類して議論しています。

  1. キャラクターアニメーション (Character Animation)
  2. スケルトン抽出 (Skeleton Extraction)
  3. テンプレートフィッティング (Template Fitting)
  4. スキニング (Skinning)

それぞれについて見ていきましょう。


1. キャラクターアニメーション (Character Animation) との比較

既存研究の傾向:
ほとんどの3Dキャラクターアニメーションに関する研究は、プロのアニメーターを対象としており、詳細な制御や高品質な結果に焦点を当てていました。初心者ユーザー向けにアニメーション作成を簡素化する試みは少なかったです。

  • 例: Motion Doodles [Thorne et al. 2004]、Igarashi et al. の Spatial Keyframing [2005b] や As-Rigid-As-Possible Shape Manipulation [2005a]。
  • 既存手法の課題: これらのアプローチは、アニメーション制御の簡素化に焦点を当てていますが、キャラクターの「関節構造の定義(リギング)」自体を簡素化するものではありませんでした。例えば、Spatial Keyframing システムは入力として「すでにリギングされた」キャラクターを期待します。As-Rigid-As-Possible Shape Manipulation は2Dに特化しており、関節情報は制約として与える必要がありました。Motion Doodles は2Dキャラクターの関節構造を推論する能力がありましたが、キャラクターの提示方法について非常に強い仮定を置いていました。

Pinocchioの優位性:
Pinocchioは、リギングプロセス自体を自動化することで、これらの既存手法とは異なる根本的な課題を解決しました。これにより、ユーザーは静的なメッシュを与えるだけで、すぐにアニメーション可能なキャラクターを得られ、その後、既存のアニメーション制御手法を適用できるようになります。特に、初心者や非専門家がキャラクターを動かすための障壁を大きく下げることを目指しました。


2. スケルトン抽出 (Skeleton Extraction) との比較

既存研究の傾向:
自動リギングに関する既存のスケルトンベースの研究の多くは、「スケルトン抽出」に焦点を当てていました。これは、与えられた3Dメッシュの形状から、その内部にあるべきスケルトンを生成するアプローチです。

  • 例:

    • Teichmann and Teller [1998]: Voronoi スケルトンの簡素化によりスケルトンを抽出(ユーザー補助あり)。
    • Liu et al. [2003]: 反発力場(repulsive force fields)を用いてスケルトンを見つける。
    • Katz and Tal [2003]: 表面分割アルゴリズムの応用としてスケルトン抽出を提案。
    • Wade [2000]: 距離場の不連続性を見つけることでメディアルサーフェス(中央表面)を近似し、スケルトンツリーを構築。これはPinocchioのアプローチに最も類似しているとされています。
  • 既存手法の課題:

    • トポロジーの不一致: スケルトン抽出は、キャラクターの形状に基づいてスケルトンを生成するため、ユーザーが持っている「モーションデータ」が設計されたスケルトンと異なるトポロジー(骨の接続構造)を持つスケルトンが生成される可能性がありました。例えば、四足動物のモーションデータがあるのに、複雑なキャラクターから抽出されたスケルトンが全く異なる構造を持つ、といった問題です。
    • ノイズへの脆弱性: キャラクターの形状の些細な特徴(例:図1のキャラクターの耳)が、誤って主要な骨格要素(例:腕)と解釈され、不自然なスケルトンが生成される可能性がありました。
    • 外部情報の欠如: 形状のみからスケルトンを抽出するため、期待される構造に関する事前の情報(例:これは人間型である、足は下にあるべき、など)を利用できませんでした。これにより、例えば「足が短すぎる」といった不適切なプロポーションのスケルトンが生成されることもありました。

Pinocchioの優位性:
Pinocchioは「スケルトン抽出」ではなく「スケルトン埋め込み (Skeleton Embedding)」を提唱しました。

  • 与えられたスケルトンの活用: Pinocchioは、ユーザーが提供する「汎用スケルトン」をそのままキャラクター内に埋め込むため、モーションデータとスケルトンのトポロジーが常に一致します。これにより、スケルトンのトポロジーが複雑なキャラクター(例:多数の腕を持つキャラクター)でも、安定して機能します。
  • 構造情報の利用: 与えられたスケルトンは、キャラクターの期待される構造に関する貴重な情報を提供します。これは、形状のみから推論するのが難しい情報です。Pinocchioは、この情報をペナルティ関数やジョイントの属性(例:「足」とマークされたジョイント)として活用します。
  • 堅牢性: キャラクターの些細な特徴(耳など)が誤って骨格の一部として扱われることを防ぎ、より解剖学的に妥当で、アニメーションに適したスケルトンを生成できます。

3. テンプレートフィッティング (Template Fitting) との比較

既存研究の傾向:
テンプレートフィッティングは、既存のテンプレートモデルをユーザー提供データに適合させることでアニメーションを行うアプローチです。

  • 例:

    • Moccozet et al. [2004]: 人間モデルに特化し、人体解剖学の特性を利用してテンプレートを適合させる。
    • Anderson et al. [2000]: シンプルな3Dモデル(キャラクターや無生物)に対して、ボクセルベースの体積テンプレートをデータに適合させる。
  • 既存手法の課題:

    • 汎用性の欠如: ほとんどの作業は人間モデルに集中しており、人間以外の多様なキャラクターに適用するのが難しいか、特定のテンプレートに非常に類似したモデルでしか機能しませんでした。
    • 変形の限界: テンプレートの形状が大きく異なるキャラクターに対しては、単純なフィッティングでは良い結果が得られにくい傾向がありました。

Pinocchioの優位性:
Pinocchioは、特定のテンプレートモデルに強く依存するのではなく、「汎用スケルトン」を多様なキャラクター形状に「適応させる」ことで、より高い汎用性を実現しました。

  • Pinocchioのアプローチは、モデルがテンプレートと「かなり類似している」必要がなく、プロポーションが大きく異なるキャラクター(例:腕が非常に長い、足が短いなど)にも対応できます。これは、ペナルティ関数学習と、メディアルサーフェスに基づく柔軟な埋め込み戦略によって実現されています。

4. スキニング (Skinning) との比較

既存研究の傾向:
メッシュ変形の手法は多岐にわたりますが、リアルタイムアニメーションの目的では、リニアブレンドスキニング (LBS: Linear Blend Skinning)、別名スケルトンサブスペース変形が、そのシンプルさと効率性から最も広く使用されていました。

  • LBSの課題: LBSは品質面で欠点(「キャンディラッパー」効果やボリューム損失など)があることが知られています。
  • 既存のLBS改善研究: 多くのリアルタイムスキニング研究(例:Kry et al. [2002]、Wang et al. [2007])は、複数の例示メッシュ(異なるポーズのメッシュ)からキャラクターの関節構造を推論し、LBSの欠点を改善することに焦点を当てていました。
  • スキニングウェイト割り当ての課題: 既存の手法は以下の問題がありました。
    • 単一メッシュの限界: Pinocchioの課題設定では「単一のメッシュ」しか入力がないため、複数の例示メッシュを必要とする改善手法は適用できませんでした。
    • メッシュ解像度依存: 一部の手法(Katz and Tal [2003])はメッシュの解像度に依存し、高解像度メッシュでアーティファクトが発生する可能性がありました。
    • 不連続なウェイト: ウェイトが表面上で滑らかに変化しない手法(Wade [2000])もあり、これも高解像度メッシュでアーティファクトを引き起こしました。
    • 幾何学的無視: 多くの商用パッケージ(例:Autodesk Maya 7)では、ウェイトが単に骨への頂点の近接度に基づいて割り当てられるため、キャラクターの幾何学的構造(例えば、胴体と腕が空間的に近いが論理的に遠い場合など)を無視し、不自然な変形を引き起こすことがありました。

Pinocchioの優位性:
Pinocchioは、「単一メッシュとスケルトン」という入力条件の下で、LBSの骨ウェイトを自動的に見つけるという、これまで十分に解決されていなかった問題に取り組みました。

  • メッシュ解像度非依存の滑らかなウェイト: 熱平衡(拡散方程式)に基づくスキニングウェイトの計算方法は、メッシュの解像度に依存せず、表面上でウェイトが滑らかに変化することを保証します。これにより、高解像度メッシュでもアーティファクトが抑制されます。
  • キャラクター幾何学の考慮: 熱伝導のアナロジーは、骨と頂点の距離だけでなく、キャラクターの内部構造(熱が伝わる経路)を考慮するため、「胴体の一部が誤って腕に接続される」といった論理的に遠い部分への不適切なウェイト割り当てを防ぎ、より自然な変形を実現します。

まとめ

Pinocchioは、特に初心者ユーザー向けの3Dアニメーション作成という文脈で、既存の手動リギングの困難さ、スケルトン抽出の堅牢性の欠如、テンプレートフィッティングの汎用性の限界、および既存のLBSウェイト割り当て手法の課題を克服するために設計されました。

その核となる革新は、「スケルトン埋め込み」と「熱伝導に基づくスキニングウェイト計算」という2つの自動化されたプロセスにあり、これにより高速、汎用性があり、品質の高いリギングを単一のメッシュ入力から実現しました。このアプローチは、当時の他の研究とは異なる根本的な問題解決を行い、3Dアニメーションの民主化に貢献したと言えるでしょう。

Q:提案手法の限界と今後の課題はなんですか?

A:


Pinocchio 提案手法の限界

  1. キャラクター形状の前提条件:
    • 接続されたボリュームの境界: キャラクターメッシュは、接続されたボリューム(内部が明確に定義された空間)の境界である必要があります。中空のモデルや、穴が多いモデルなどでは正しく機能しない可能性があります。
    • 近似的な向きとポーズ: キャラクターは、与えられたスケルトンと「およそ同じ向きとポーズ」で提供される必要があります。例えば、立っているバイペッド(二足歩行)スケルトンに対して、キャラクターが仰向けに寝ている状態では、スケルトンの埋め込みが困難になります。
    • プロポーションの類似性: キャラクターは、与えられたスケルトンと「大まかに似たプロポーション」である必要があります。あまりにもかけ離れたプロポーションのキャラクターでは、埋め込みが困難になることがあります(例:テストケース10や13で腕や脚が極端に細い・小さい場合に問題が発生)。
       
  2. 非常に薄い手足への対応:
    • Pinocchioは距離場に基づいて内部構造を解析し、グラフを構築します。この際、骨を埋め込める最小限の肢の半径が $2\tau$(距離場の許容誤差の2倍)に制限されます。
    • 「非常に薄い手足」を持つキャラクターでは、抽出されるグラフが分断されてしまい、スケルトンを正しく埋め込めない場合があります。$\tau$ を小さくすることで精度は上がりますが、計算コストが大幅に増加するというトレードオフがあります。
       
  3. 次数2ジョイントの配置の難しさ:
    • 膝や肘のような「次数2のジョイント」(つまり、1本の骨の中間に位置する関節)の位置を特定するのは難しい場合があります。
    • これらの部位は、キャラクターによっては他の肢の部分よりも太いこともあれば、細いこともあり、幾何学的な特徴だけから「正しい関節位置」を確実に識別する方法が確立されていません。これはアニメーション品質に影響を与える可能性があります。
       
  4. スキニング品質の限界(LBSの固有の問題):
    • Pinocchioは汎用性とリアルタイム性能のために「リニアブレンドスキニング (LBS)」を採用しています。LBSは効率的ですが、本質的に品質の欠点を持っています。
    • ボリューム損失: 関節を曲げた際に、関節部分のボリュームが不自然に縮小する「キャンディラッパー効果」が発生します。
    • 不自然な変形: 特に股関節や肩、膝などの複雑な関節部分で、手作業で調整されたウェイトに比べて不自然な変形が生じやすいです(図11の右膝や股関節の例)。
    • 材質の無視: キャラクターがドレスであろうと騎士の鎧であろうと、同じスキニングモデルが適用されるため、ゴムのような不自然な変形("rubbery quality")が生じることがあります。キャラクターの素材特性を考慮しないため、リアリズムに欠ける場合があります。
       
  5. ペナルティ関数学習の手間:
    • 基本ペナルティ関数の重み $\Gamma$ の学習プロセスは、一度行えば他のキャラクターにも汎用的に適用できるとされていますが、最初の訓練データ(良い埋め込みと悪い埋め込みの例)の作成と、それが不十分な場合の重みの微調整は「労働集約的 (labor-intensive)」であると論文中に記載されています。新しいタイプのスケルトンやキャラクター群に対応するためには、この作業を再度行う必要があるかもしれません。

今後の課題 (Future Work)

論文で提案されている、Pinocchioの改善のためのアイデアは以下の通りです。

  1. 離散化の改善:

    • 球体パッキングから楕円体パッキングへ: 現在はキャラクター内部を球体でパッキングしていますが、これを「楕円体」でパッキングする改善案が挙げられています。楕円体は肢のような細長い形状をよりよく表現できるため、グラフのサイズを大幅に削減し、結果として離散的な埋め込みの高速化と品質向上につながると期待されます。
  2. アニメーション品質の向上:

    • より良いスキニングモデルの採用: LBSの品質上の欠点を克服するため、Spherical Blend Skinning [Kavan and Žára 2005] のような、より高度なスキニングモデルの導入が考えられます。ただし、これはパフォーマンスとのトレードオフになる可能性があります。
    • LBSエラーの自動補正: 遅いがより正確な変形技術を使用して「例示メッシュ」を合成し、それらの例示メッシュを用いてLBSのエラーをリアルタイムで補正する手法 [Wang et al. 2007] と組み合わせることも提案されています。
    • 体積ベースの変形: 埋め込まれたスケルトン周囲に四面体メッシュを自動的に構築し、Capell et al. [2002] のような動的変形手法を適用することも考えられます。これにより、より物理的に正確なボリュームを保持した変形が可能になるかもしれません。
  3. モーションリターゲティングの改善:

    • 関節制限の組み込み: リターゲティングに「関節制限」を組み込むことで、モーション中の不自然なアーティファクトをさらに削減できます。
    • 物理的な妥当性: より高度なリターゲティングスキームを採用し、アニメーションの物理的な妥当性を高めたり、キャラクターが自分自身と交差する(自己交差)のを防いだりすることが目標とされています。
  4. 前提条件の撤廃:

    • 明確な内部空間の不要化: 現在のシステムでは、キャラクターが「明確な内部空間を持つ(well-defined interior)」必要があります。この前提条件を排除し、より多様な形状(例:開いた形状や非常に薄い形状)にも対応できるようにすることが課題です。
  5. より複雑なアニメーションへの拡張:

    • 手のアニメーション: 論文では、手のアニメーション(物体を掴む、タイピング、手話など)が興味深い問題として挙げられています。様々な手の形状(図9のモデル13, 5, 14, 11のような)に対応できる自動リギングは非常に挑戦的です。
    • 顔のアニメーション: 自動での顔アニメーション用リギングはさらに困難ですが、少量のユーザー補助で成功する可能性があると示唆されています。
    • モーション合成との統合: これらがモーション合成システム [Arikan et al. 2003] と組み合わせられることで、ユーザーが作ったキャラクターとインタラクションできるようになるでしょう。

Pinocchioは、3Dアニメーションのアクセシビリティを劇的に向上させた画期的な研究でしたが、リアリズムの向上や、さらに複雑なキャラクター(顔や手)への対応など、解決すべき多くの興味深い課題を残していると言えます。これらの課題は、現在のAIやコンピューターグラフィックスの研究テーマとも密接に結びついており、今後の発展が期待される分野です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?