僕のCGアカデミア

グラフィクス系(主にキャラクターアニメーションに関する)論文やアクティビティを簡単に紹介するログ

論文紹介: Adding Physics to Animated Characters with Oriented Particles

Matthias Müller and Nuttapong Chentanez,
Adding Physics to Animated Characters with Oriented Particles
VRIPHYS 2011
情報ページ

 概要

従来,様々な物体がシミュレーションによって動かせるようになってきているが,人間の動き,特に二次動作についてはまだまだ課題が多い.例えば,肌の揺れであったり,重ね着した服や髪の毛同士のコンタクトと自己衝突,それらに人間の複雑な動きが絡むと大変時間のかかる計算が必要になってくるだろう.その解決策として,筆者らがそれまでに提案したOriented Particles(以下OP)と呼ばれる手法を用いて,Shape Matchingに比べてより安定かつ高速な衝突判定が可能な,リアルなキャラクターアニメーションを実現した.

コントリビューション

  • キャラクターアニメーションとOPの統合(運動量保存)
  • 重なる衣服のような複雑な幾何学形状に対しても効率のよい計算が可能.
  • Particeの衝突判定計算が安定

手法

スケルトンとOPによるスキニング手法 (Vertex-particle skinning)

OPをキャラクターアニメーション,つまりスケルトンの動きに応じて動くキャラクターに対してどう適用するか,という点が参考になった.(Oriented Particesの原文を実はまだ読んでいないので,もしかしたら同じことが書いてあるかも)

というのも,一般的なスケルトンベースのアニメーションは,各ボーンが各頂点に対して,スキニングウェイトというものを保持していて,その値とボーンの回転行列からスキンの頂点が変形する(スキニングが行われる)んですが,ここで書いてあったのは,Oriented Particlesの楕円Particle自体が各頂点に対してウェイトを持っていて,Particleの持った回転行列とウェイトを通じて,スキンの頂点がスキニングされるるっていうのがちょっと新しい話で面白いな,と.この論文の中で紹介されてたのは以下.

  • vertex-particle skinning
  • vertex-bone skinning
  • particle-bone skinning 
運動量の保存

この論文のモチベーションがスケルトンの動きに応じて動くキャラクターアニメーションなので,例えば,キャラクターが自分の髪の毛を上に引っ張っても浮かないのと同じように,自分の動きだけで運動量が完結する(つまり,運動量を保存する)ための手法が書かれていました.その手法は結構単純で,スキニング等で変形された現在形状と更新された次のフレームでの形状(ここではShape Matchingに習って目標形状)とすると,

  1. それぞれでパーティクルの質量を考慮した運動量ベクトルとの差をとってMoment Matrixというものを作る.(この部分は,Shape Matchingに似てる)
  2. 極分解等により,Moment Matrixから回転行列を抽出
  3. 回転行列,目標形状,現在形状を用いて,座標を更新

でいけるそうです.

参考文献

M. Müller, N. Chentanez
Solid Simulation with Oriented Particles
SIGGRAPH 2011 

 OPに関する記事は(僕の大好きな)小山くんが詳しく書いてくれているので,ぜひ参照してください.

Unity 上に自分で物理エンジンを実装したい

論文読み: Position Based Fluids (SIGGRAPH '13)