結構使い勝手の良いAcs3bですが使い込んでくると不満が出てこない訳ではありません。最大の不満がFlipです。たとえAcs3bであっても、LightWaveモーション付けの最大の敵、Flipが発生するのです!
このページではFlip発生の原因を探り、その原因を(むりやり)押さえ込むことでFlipの影響を少なくする方法について考えて行きます。
左図はFlipを起こしているモーションのアニメーションGifです。この図を見るとFlipは矢印の近傍で発生しています。この矢印はL_Shoulderの回転軸を表してします。
また、軸を対称に肘が同じような形になっています。
そうです、この点こそがFlipの発生元なのです。肘の曲がり角度や初期状態により多少変動しますが、Flipが発生する点は常にこの軸の近傍にあります。
左図は腕の回転を司るR/L_ArmDirのバンク回転のファンクションカーブです。Flipを起こした部分で位相が180度変化してるのが観察できます。この瞬間、Flipgが発生しているのです。
では、どうすればこのFlipを抑えられるのでしょうか?答えは簡単です。軸に接近させなければFlipは発生しないのです。
左図は肩であるR/L_Shoulderのバンクを動かしコントローラR/L_ArmGorlと軸が近接しないように調整したモーションです。Flipはまったく発生しません。また、上記の例とは異なり肘の角度がほとんど変化しないの注目に値します。
この状態でのファンクションです。0〜180度内の変化にとどまっているのが判ります。
そうです、ついにFlipを押さえ込むことに成功したのです!
上記の例では稼動範囲が比較的狭いので、R/L_Shoulderをバンクさせることで発生する肩の破綻があまり目立ちません。しかし、腕を振り回す等の動作を行なった場合、肩が破綻することになります。
だからと言って上記のTipsが使えない訳ではありません。むしろ、
「R/L_Shouldeを利用することでFlipが発生する位置を意図的に変える事が出来る」
ということを覚えておくと、Flipが発生した場合の修正が楽になるはずです。
Flipを抑える方法はこれ以外にも肘にIKを付け、肘の方向を制御する方法もある。この方法と上記の方法の違いを比べて見た。
緑 今回紹介した方法、親を回転させる。
オレンジ 何も対策をしていないもの。
水色 手首と肘にIKを付け肘の向きをIKコントロールしたもの
になっている。(ここをクリックするとスケマティックビューを拡大したものを表示)
テストの結果、水色の肘、手首をIKでコントロールする方法は肘が大きく曲がるようなモーションでは制御できないことが判った。
それに対し基準の軸をコントロールした場合、ほとんど影響が出ていない。
それにしても。Flip対策は「手首、肘IKコントロール方法」がもっとも有効と思っていただけにこれはかなり意外かも。
Flip実験の続き。
前回の理論を自動的に行なうLScriptを作成し、Flipに対して有効かどうかを実験した。緑が新理論で作成されたIK、オレンジが通常のIK。この実験のスケマティックは左図の通り。
緑のIKは基準となる骨(赤い部分)が常にコントロールの方向を向くようになっている。この基準骨の向きはIKの計算が安定する様に3軸の中間になるように調整した。実際のモーションは左図の様になった。
この方式でもFlipが完全になくなる訳ではないが、かなりスムーズになることが実証できた。(y軸上に乗るとFlipする。向きの計算でUPベクターをY軸と同じにしてるのが問題なだけかも。)
まぁ、これを実際のモデルに適応出来るかは微妙。問題点は
基準点が回転してしまうので別の意味でモデルの破綻が起きる可能性が高い。
このままでは肘の向きを制御することが出来ない。
等がある。