読者です 読者をやめる 読者になる 読者になる

Shape Matching法の実装

グニョグニョ動く柔軟物の実装の一つにShape Matching法があります.
この手法は2005年のSIGGRAPHで発表されたものです.
www.youtube.com
幾何的な制約条件をもとに物体を変形させていく手法で,
有限要素法(FEM)とは全く別のアプローチをとっています.

FEMと比較したShape Matchingの特徴として,以下のものがあります.

  • 計算量が小さく高速
  • 物理的に不正確
  • 実装が容易

なので,CGなど,見た目がそれっぽければよい場面においては使える手法です.
今回は,上述の論文を読んで実装してみました.

手続き

各頂点のgoalpositionを毎ステップ求めていきます.
アルゴリズムは論文に書いてある通りなのですが,

初期位置の決定,初期重心の決定,qi=xi^0-xcm^0を予め求めておいて,

  1. 重心xcmの計算
  2. Apqの計算
  3. S=sqrt(Apq^t,Apq)の計算
  4. R=ApqS^(-1)の計算
  5. 各頂点のgoalposition=R(xi^0-xcm^0)+xcmの計算
  6. 速度と変位を求めて反映

というステップを毎サイクルまわします.
Apq^tとApqの積は対称行列なので,jacobi法で固有値固有ベクトルだして対角化し,
平方根求めるのが速いらしいです.

六面体要素ではこんな感じになりました.
www.youtube.com
www.youtube.com

Unity WebGL Player | basicPhysics
WebGLで遊べます(読み込みに少し時間がかかります).
球をカーソルで引っ張ってみてください.

最小の六面体要素ごとに,shape matchingを行っています.
shape matchingを行う要素の重なりが大きくなるほど,変形しにくくなります.
CPUに逐次計算をさせています.

ShapeMatchingをより複雑な変形を高速に行うための手法としては,
FastLSM(Lattice shape matching)とFastASM(Adaptive shape matching)が代表的です.