堀゜ちえみ(3):歩行モーション

ちえみサービスショット。
画像

なかなか見栄えしねーなこの子わ…。


IKで歩行モーションを組んでみたわけですが…これがけっこう難しいですね。

ループさせないモーションならそれほど難しくはないんだけど、ループする場合、偏りがあると気になっちゃいます。
あと、フルタイムIKだとゴールにキーを打っても再生時にちょっとずれちゃうんだよね。
なんでか知らんけど。
フルタイムをやめるって手もあるけど。

あと、IKは曲げるのは得意だけど伸ばすのが得意じゃないとゆーことが分かりました。

今回腕の振りがちょっとむむむなんだけど、腕を伸ばせないんでちょっとこわばった感じになっちゃいました。

肘や膝にIKゴールを追加するとかやり方があるのかも知んないけど、今回は基本とゆーことで。


●モーション階層

画像
前回左側しか作ってなかったボーンを階層鏡面で右側にコピー。
さらに、ボーンオブジェクト直下にrootというボーンを追加して、全てをこの下に入れてみました。
これは、rootで移動の向きや方向を制御しようと思ったからです。
最初はボーンオブジェクトとかボーンの代わりにNullを使ってみたけど、これだと後述のモーションミキサでボーンと一緒にアイテムを登録できないんだよねー。
いや、できるのかも知れないけど、シーンエディタで同時に選択できない。
謎だ。


●モーションミキサーでウハウハ

今回は静止状態から数歩あるいてまた止まる、というモーションをやろうと思ったんだけど、頭から作っていくとポストビヘイビアでOffsetRepeatとかが使えない。
なぜなら最初は静止しているから。

数歩分のモーションを作ってみたところで、ふと
「左・右の2歩分のループモーションを作って、以前標準ちゃんの表情で使ったモーションミキサーでクリップ化して静止モーションと補間してみたらどうだろう」
と思い、適当なところで切り出してみました。

2つのモーションを補間するには、ウェイトカーブよりもトランジョションカーブのほーが良いようです。
画像
こんな感じ。
[L]となっているバーはポストビヘイビアで、ループしてる。
真ん中の薄い水色の部分がトランジションの領域で、グラフエディタでカーブを編集できる。
画像
試してないけど、上のように完全にオーバーラップさせないで一部だけオーバーラップさせればカーブ付けなくてもそれなりに補間してくれるんじゃないかな。

あと、静止(idle)→歩行(walk)→静止、とすると、歩行が終わったとたんに最初の位置に戻ってしまうんだけど、これはOffset Editorでwalk→idle移行時のrootを相対(REL)にすることで解決。
画像

ポストビヘイビアのバーを伸ばせば、好きなだけ歩かせることができます。

他のモーションと混ぜるにはウェイト(weight)、切り替えにはトランジョション(transition)、再生スピードの制御にはタイムワープ(timewarp)を使うようです。
いやマニュアルに説明あるけど、横文字だとよくわからないんで。
まあ一回使えばわかるか。


●縦横無尽に移動させたい

モーションクリップを作る際にrootに直進の移動値を入れているので直進は問題ないんだけど、これだと好きな位置で向きを変えたいとか坂を登らせたいとかができない。

rootに色々プラグインを入れてみたけど、結局のところコンストレインかFollowerで丸々制御するしか方法がないみたい。

しかしこれが結構大変。

やりたいこととしては、適当に引いた「歩行パス」を、任意の移動速度でトレースするということなんだけど、これに相当するプラグインはないし、既存のプラグインを組み合わせてもできない。
(移動速度を指定できるCruiseControlは2点間だけだし、各コンストレイン系はウェイトだけ。)

プロはこんな場合どーするんでしょーかね。
いったんベイクしてからカーブいじるとか?


しょーがないんでプラグインをこさえました。

やってることは以下。
1. 移動速度から現在時間までの積算移動距離を求める。
2. 上記距離から目標アイテムのパス上の位置を求める。
3. パスに沿う場合はPositionカーブの接線を微分して求める。
4. 目標の回転を加える場合は2に対応する時刻を求め、Rotationカーブの対応時刻の向きを取得する。

距離計算はまじめに計算しててちょっと重めなのでスクリプトじゃなくDLLにしてみました。
(C++で組んだほうが圧倒的に組みやすいしね。)

プロパティはこんな感じ。
画像

移動速度(Velocity)にはカーブが付けられるので、「静止→徐々に加速→等速歩行→停止」みたいなことが自在にできるわけです。
画像
向きをパスに沿うこともできるし、ウェイトにもカーブを入れて、目標と補間することができる。
目標アイテムの向きを相対的に加えることもできる。

こんなんけっこう需要ありそうな気もするけど…。

ほんで最終的な動画がこれ。






静止から歩き、歩きから静止にトランジションを使ってるのでそれなりにきれいに補間されてます。
まあゆっくりにすると足が滑ったりしますが。

移動量は、Pathオブジェクトの移動速度とは無関係に一定の速度になってることにご注目。
移動速度Velocityはトランジションに合わせてカーブを付けてます。
パスに沿うようになってるんで、向きも変わってます。
これは楽ちんだー。

今回SDKのモーションクラス(LWItemMotionHandler)を使うのは初めてだったんでちょっと調べるのに時間がかかったけど、各関数とパネル管理をクラスでラップしたんで、以後このテのプラグインを作る場合はかなり簡単になります。
これでスクリプト版のゆれものをDLLに移せるし、IKゴールだとちょっと怪しい「目標を注視」するエイムコンストレインも作れそう(これは視線とか首の制御に使います)。


次回はそろそろモーション階層をモデル階層にコンストレインしてちえみを動かしてみたい。


●おまけ:一方その頃の悪魔ッ娘

ちえみのほうにかかりきりであまり進まず。
予定よりかなり遅れててやばいんで、2日伸ばしてちょっとやってみますた。

・暫定の名前がレイチェルになりました。(絵には全然関係ないけど。)
・ツインテールが暫定的に本番になりました(謎)
 ちょっとミョウガっぽくなっちゃったけど。
・Super Cel Shader の肌パラメータをいじって影境界を柔らかくしました。
・肌のスペキュラにノイズテクスチャを入れてハイライトをちょっぴり散らしました。
・ニップルテクスチャをちょっと大きくしました(これは個人的楽しみ。)
・その他小物追加、肩と鎖骨を一生懸命調整中

普通サイズのレンダリング画像を貼っておきますね。
画像

画像

画像

画像


まだ30%くらいか…。
この娘はハロウィン向けなんで、再来週辺りからスパートかけなきゃならなくなりそうです。

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 2

なるほど(納得、参考になった、ヘー)
ナイス

この記事へのコメント