2010年06月28日

ReTargetの研究4(RergetRig)

前回までの推論を元に作られたのがこのRetargetRigだ。

シーンファイル retarget1_20100628.zip

.

Null_FootScale、Null_ArmScaleをスケーリングすることで手IKCtrl、
足IKCtrl及びHipsの高さを変更することが出来る(図の白いNull)。
スケール値は直後のNullでスケール相殺されている。

AutomatonZでモーションをコピーする方法は以下の手順で行う。

1)モーションを付けたキャラクタにMotSaverプラグインを実行する
 MotSaverはDStromのサイトからダウンロードすること。また、モーション
 をつけた キャラクタは1体でなくてはならない。

2)MapMotion2を実行し上記で作成したMotファイルをオープンする。
 「読み込み」ボタンでMapFileを指定する。MapFileはZipのmapfile
 ディレクトリに入っている。キャラクタ数に合わせて適切なファイルを
 指定する必要がある。どうも9.6のLoadFromItemには微妙なバグがあり
 同じ名前のItemがあるとExpressionが混乱する。MapMotion2も内部で
 LoadFromItemが使用されてるみたいで普通に読み込むとExpressionの
 Linkが壊れてしまう。
 
 これを回避する為には、複数キャラクタのモーションを割り当てる際に
 MapFie経由でモーションを指定しなくてはならない。

 MapFileでController(Hips)には位置と回転を、Boneには回転のみ
 割り当ている。

3)Null_FootScale、Null_ArmScaleにスケールを掛けてモーションを調整
 する。「自動では変更されない」(重要(゚ε゚)だってなんだもん)
 スケールの際には3軸の値が合うようにする。モーションによっては
 IKの向きが逆に曲がってしまう場合もあるので角度制限を掛ける必要が
 ある。

RetagetRigでRergetされた歩行モーションはこのようになる。
IKCtrlの軌跡を拡大している白いNullに注目するとスケーリング
の状況が判る。








もう複雑な走行モーションはこうなる。








このモーションでは手が合わさった状態で動いている。こうしたモーション
の場合、通常のRetargetでは誤差から手の位置がずれることがある。今回の
Rigでは両手が基準なのでずれを少なく出来る。また、このモーションでは
右足のみ逆向きに折れ曲がる現象が見られたのでIKの角度制限を追加して
いる(RightLeg)。


このRigを使えば歩行モーションのようなものはほぼ問題なく転写出来る。
もっと複雑なモーションを作る場合はローカルモーションを意識し、
スケールポイントからずれが少ないモーションを作らなくてはならない。

もうすこしだけ続くじゃよー

2010年06月21日

ReTargetの研究3(スケールは最後の武器)

ながながとモーションにおけるスケールの悪行を語ってきたが本題に
入ろう。今回のRetargetではこの悪のスケールを活用し体格差のある
キャラクタにモーションを流し込もうという話なのだ。

通常モーションをスケールしても体格差のあるキャラクタには適応
出来ない。しかし軌跡の場合は別だ。軌跡は特定の条件化ならば
拡大縮小が可能だ。

特定の条件とはスケーリングする位置だ。つまり

 中心点であれば軌跡はスケーリングが可能

なのだ。

ではモーションにおける軌跡とはなんだろうか。これはIKControlの
動きに他ならない。動きのど真ん中を見つければIKControlの軌跡に
スケーリングを掛けることが出来ることを意味している。

Reterget_ctrlpoint.jpg

上図はCtrlをコピーしArmの長さに従って拡大したものだ。赤い部分は
図形が相似形であることを判りやすくする為に位置を合わせている。
中心位置をArmの付け根にすることでArmのRetargetが可能であること
が判る。

人間においてIKを使う部分は
・手
・足
・視線、首
・背骨(AutomatonZの場合、背骨はFKなんで無視する)
が多い。

つまりこれらの部位の中心点を見つければRetargetが出来ることになる。

手の場合、モーションを考える上では2本セットで考えた方がよい。
刀やマシンガンといった両手で把握するモーションのRetargetが最も
厄介だからだ。両手の中心は胸の辺りになる。確かに刀の補助Rigも
この部分をRootにすることが非常に多いのだ(逆に肩にRootが来ること
はほとんど無い)


足の場合ちょっと工夫が必要だ。単純に腰の位置に中心を持ってくると
足が地面にめり込んでしまうのだ。これは発想を転換する必要がある。
軌跡を描くものが右足、左足、腰の3点あるということだ。そしてこの
3点のほぼ中心が腰から鉛直に下ろした地面の点、AutomatonZのRoot
位置になる。

この位置にスケールポイントを置けばIKの拡大縮小が出来るのだ。

retarget_human.jpg


まだまだ続く

2010年06月16日

ReTargetの研究2(スケールの相殺)

さて、唐突にはじまったReTargetの話だが長い、そしてくどい。
本題の部分は来週ぐらいからになるので覚悟するように(゚ε゚)


スケーリングは悪徳金融からの借金みたいなものだ。親での借金が子供に
渡りどんどん加算されていく。借りた借金はすぐ返す。スケールでも同じ
ことが言える。これをスケール相殺という。スケール相殺の方法は
[1/親のスケール]を掛けてやれば良い。

LightWave96のIK-Scaleを使えばExpressionを書かなくてもスケール相殺が
出来る。モーション設定のIK「Scale」でスケールアイテムを親(もしくは
相殺したいItem)を指定し「補正」を選択する。格軸の項目を
「アイテムと同じ」にすればスケールが相殺される。

scaleIK1.jpg

ただし、3軸でスケール値が異なっていると完全には相殺出来ないので
注意すること。これはスケールの計算と回転の計算が混じってしまう為に
起きる。どうしても3軸で異なる値を入れたい場合はダミーのNull(Bone)
を入れ、スケールを完全に相殺してからBone等が動くようにすれば良い。








上図はスケール相殺を行った場合のモーションの違いをムービーにしたものだ。
X軸だけ3倍のスケールがかかっている。
・「なし」の場合、モーション歪んでいるのがわかる。
・「Boneで相殺」の場合、前腕の回転では相殺してるが下腕(IKScaleのあるBone)
 の回転が始まると歪みが生じる。
・「Nullで相殺」の場合、ダミーでスケールを相殺してからBoneの回転を
 行うので元と同じ軌跡を描く。

2008年03月31日のATMuscle.lsのマイナススケールと同等のことがIK-Scale
で可能だ。伸縮ボーンを使う場合はこの機能を使うと良いだろう。
http://noboyama.sblo.jp/archives/200803-1.html

2010年06月14日

ReTargetの研究1(悪=スケール)







モーションのコピーは

回転角(FK)のコピーと位置(主にIKControl)のコピー

に分類できる。

FKのコピーは体格に依存しない。しかしIKは体格(骨の長さ)によって
修正する必要がある。通常の修正は一旦骨の長さに依存しないFKに置き換え、
骨の長さを変更し、新しい位置を決めるこの作業をReTargetと呼んでいる。

Reterget1.jpg

正確なReTargetは上記の手法を取るのだが人間のようにある程度骨格が
決まっている場合は適当な手法でも以外になんとかなるのである。

今回から数回に渡ってこのRetarget手法を紹介しよう。

今日は核となるパラメータ「スケーリング」だ。

モーションにおいてスケーリングは鬼門だ。スケーリングを使う前に他の
手法で置き換えられないか考慮すべきだ。LW以外のツールでは体格や
ミラーコピーの為にスケーリングをすることがある。これ自体は問題が
無いが、「モーションをつける前には正規化」しなくてはならない。
モーションやExpression/Pluginで起きる不正の大部分がこの形状のための
スケーリング「ジオメトリスケーリング」で発生している。

ではモーションでのスケーリングはどういうときにつかうのだろうか?

それは動きのなかで大きさが変わるものを扱う場合だ。たとえば変身して
巨大化するヒーローや膨らむ風船と言ったアニメーションの場合には
スケールが有効だ。また伸縮等の場合も使わざるを得ない場合がある。
こういった場合はなるべく階層の末端部分にのみスケールが掛かるよう
にRigを構築すると問題が起き難い。親階層でスケールするとスケールが
蓄積されてしまう。これが下記のせん断スケールの原因になりやすい。
この蓄積スケールは原因がわかりにくいバグの原因になるので出来る限り
先端へ持っていくことが重要になる。

スケールする際に最も注意しなくてはいけないの項目がある。それは
3軸の値を揃えることだ。3軸の値が違うスケールの場合せん断変形
になりMatrix→オイラー角変換に影響が出る。これによってプラグインや
Expressionなどでおかしな問題が発生しやすくなるのだ。また、せん断変形
によって空間が歪みFKの回転が均一でなくなる。この為モーションに
嫌なよどみやジャンプが出来るのだ。

さてまとめると

モーションでスケールすんな。(ジオメトリとモーションのスケールの分離しろ)
スケールするときは末端で行うこと。
スケールするなら3軸を揃えること。

これがモーション上のスケールの鉄則である。

続く

最近の記事