そらとぶろーぐG

MMDのモーションのお話に終始すると思います。

補間曲線で滑らかモーションを目指す話 その4

2021年11月30日 | MMD

補間曲線の限界

 

前回までは補間曲線の基本的な仕組みについて触れてみました。

始点から終点まで補間曲線をS字に設定する、途中にいくら中間点を打ったとして全体で始点から終点までS字にすればいい。

しかしそれでも滑らかにならない箇所があったりします。

移動ボーンは軸ごとに補間曲線を設定することができますので、回転ボーンも同じようにできるのではないか、とあれこれいじってもどうにも滑らかにならない。

 

今回は回転ボーンのその辺に触れてみます。

 

補足

MMD同梱の初音ミクV2の構造、通称標準ボーン(捩りボーン入)を対象としています。

基本的な操作方法については割愛させていただきます。

「自分のモーションを滑らかにしたい」方に向けた記事で「こうすべき」と言うわけではありません。

ここから私感が入ってきます

 


 

 

途中で変えたくなりますが

 

 

さて、こんなモーションを作ってみました。

 

一見ただの往復モーションですが……

 

始点と終点を往復させるだけだとこの動きになってしまいます。

実は正面を向いた時に上半身が前に傾いており、左右の回転と前後の傾きが合わさったモーションになっています。

 

これを再現しようとすると始点から終点の間に中間点を打ち、そこで上半身を前に傾けて首と頭を起こし、上半身・首・頭の補間曲線は始点→中間点→終点でS字に設定するのかな、と思いつくのではないでしょうか。

中間点を打った辺りでカクっとなって「滑らかにならない」と悩んでしまいます。

 

 

 


 

少しわかりやすくするために先ほどのモーションとは別に、上体を左右に振るモーションを作ってみました。

 

この真ん中に中間点を打ち、上体を前に傾けます。

補間曲線は左右動の始点から中間点を経て終点までをS字に設定します。

すると上のモーションと同じくカクっとなってしまいます。

 

実は回転ボーンの補間曲線は全ての軸回転をまとめた設定しかできないため、動き出したボーンの速度変化以外には何の変化もつけることができません。

角度を変えるとそのまま角度を変えてしまいます。

イメージです

補間曲線は左右動の始点から終点をS字に設定する必要がありますのでこれを変えることはできません。

しかも始点→中間点→終点の補間曲線は中間点で最も速度が高くなりますので、角度が変わる部分が目立ってしまいます。

 

対策として中間点を分散してみました

MMD黎明期から採られている方法ですが、

始点→中間点→中間点→中間点→中間点→終点でS字に設定しますと、

中間点を越える際に等速で角度が変化しますので、先ほどよりも若干緩やかな角度変化になります。

 

幾分滑らかになったような気がします。

 

 

が、実際は中間点を越えた時に角度が変わる事はどうすることもできません。

イメージです

 

結論としては始点から終点までの間にキーフレームを打って角度を変えることそのものがカクつきの原因となるわけです。

これは補間曲線ではどうにもできません。

 

キーフレームをもっと細かく、つまり1フレームずつ打って力業で滑らかにする方法もあるにはありますが、補間曲線を使うというテーマからは離れますので割愛します。

……後でモーションを修正しようとすると大変なことになります。

 

 

つまりモーションを滑らかにするには中間点を越える際の速度を同じにする、と同時に

 

「中間点で角度を変えない」

 

のがモーションを滑らかにするポイントになります。

始点から終点までの間に中間点を打つのはあくまで回転ボーンの仕様上どうしても必要な場合にとどめた方がいいかもしれません。

 

ボーンの角度を変えずにどうやってモーションの軌道を変えるのか。

補間曲線が使えないなら他に使えるものを考えなければなりません。

 


 

コンビネーション。

 

 

さて例えばこの動き。

腰を左右に動かし、上体も左右に動いています。

このモーションを作るとなると

「センターボーンを左右に移動・上半身ボーンを左右に回転」

で作る人が多いのではないでしょうか。

ちなみに首・頭も左右回転しています

 

そう、我々は無意識にボーンの動きを分け、2つのボーンで1つのモーションを形成していたりします。

これを意識的に行おうというわけです。

 

 

それでは最初のこのモーション。

 

上半身を回転しつつ上半身を前に倒したいが、倒すとカクっとする。

なので上半身の回転と上半身を前に倒す動きを分けます。

上半身の回転は同じような回転ができるボーンを探すとセンターボーンのY軸があります。そして前に倒すのは上半身ボーンに割り振ります。

 

30フレームが動き始め、90フレームが動き終わりです。

 

30~90フレームまでセンターボーンをY軸回転させて始点から終点までをS字に設定します。

上半身は上半身を倒す動きのみになり、30~60フレームが始点から終点、上半身を起こす60~90フレームが始点から終点になります。

それぞれのボーンの動きの角度が途中で変わることがありませんので、カクっとなる部分が発生しなくなります。

というわけで無事こんな風になりました。

 

 

センターボーンは前後左右上下動に使うことが多いので、そこに回転を加えるとキーフレームが複雑になりそうですが、前回触れた「軸ごとの始点から終点までをS字にする」を応用させるとそう難しいことではありません。

ついでに上半身を倒した時に腰を引いた感じを出すため、60フレームでセンターボーンをZ軸移動させました。

センターボーンは左右動から半円を描きつつ回転する動きになりますが、これも基本的な部分は何も変わりません。

 

 


 

 

……ちなみにこの動きは大変でした。

センターボーンのZ軸を回転させて上体を左右に振り、上半身ボーンを前に傾けてみました。

センターをZ軸回転させてX軸移動で元のポーズにできるだけ近づけています。

 

 

しかしセンターボーンは標準ボーン準拠に見えるモデルでも、ボーンの位置、特に高さが違う場合がありますので、そういったモデルにモーションファイルを読ませると元モーションと同じ動きにはならない場合があり、モーションの互換性は下がってしまいます。

私はセンターボーンの回転はできる限りY軸回転のみに留めています。

 

というわけでセンターをY軸回転にしてみました。

センターを回転させると上半身と下半身ボーンも回転しますので、逆回転をさせて静止させます。しかしセンターボーンと下半身ボーンのZ軸位置がずれているため、センターボーンを180度回転させると下半身ボーンの位置が少し後ろにずれてしまいます。なので動き始めの段階でセンターボーンを90度Y軸回転させておき、そこから180度回すことで始点→終点での下半身の位置が変わらないようにし、センターボーンの始点→中間点→終点の中間点でZ軸移動させて下半身の位置がなるべく動かないようにして

……何とか形に持っていきました。

ボーンを分けるとどんな動きにも対応できる、というわけにも行かないようです。

 

 

……この方法も忘れない方がいいかもしれません。

 

 

 


 

終わりに

 

さて、今回は

「中間点で角度を変えない」

「角度を変えずにボーンを組み合わせる」

という部分に触れてみました。

 

上半身の動きを例にしましたが、実は最もこの組み合わせが必要とされるのは腕回りのモーションだと思います。

ダンストレースでも腕を回すモーションは非常に多く、腕周りが滑らかにならずにつまづく人は多いのではないでしょうか。

 

次回はその辺に触れてみたいと思います。

 

 

モデル  :  初音ミクV3 Rev1.9  マシシさん

      :  初音ミク1052C-Re Ver.1.9  箔鳥居さん