次回、と言いつつかなり日数が経ってしまいましたが、続きをnoteに投稿しました。
補間曲線の限界
前回までは補間曲線の基本的な仕組みについて触れてみました。
始点から終点まで補間曲線を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 箔鳥居さん
縦と横に動ければつまりは縦横無尽
足IKやセンターボーンなどにある移動ボーン。
「どうせ始点と終点をS字にする」
正解です。
ですがどこの始点と終点か。
今回は移動ボーンのお話です。
◆2021年10月7日にサービスを終了したブロマガに書いていた2016年の記事を焼き直した物になります。
◆MMDの基本的な操作方法については割愛させていただきます。
◆「自分のモーションを滑らかにしたい」方に向けた記事です。
軸で見る
移動ボーンを滑らかにするには空間での始点と終点に注意する必要があります。
まず、この足の動きを左右・上下・前後と見るのではなく、
Global軸での「X軸移動・Y軸移動・Z軸移動」と考えます。
この動きは「右足IKを前に出して向きを変えてまた右足IKを前に出す」ではなく、
「右足IKをZ軸方向に出した後、向きを変えて右足IKをX軸方向に出す」と考えます。
これは斜めに足を出す、ではなくZ軸方向とX軸方向に移動しています。
そして移動ボーンの補間曲線はボーン移動のそれぞれの「軸ごとの始点と終点をS字」に設定します。
これはZ軸とX軸方向へ移動していますので、
Z軸とX軸をS字にします。
Z軸だけS字にすると、
X軸方向の移動が等速になりますので、動きが変わってしまいます。
軸を見る
歩く、飛ぶ、ステップなどなど足の動き、そしてモデルの腰の動きにあたるセンターボーンは基本的に前後左右上下に動きます。
XYZ軸への移動が組み合わさるだけでなく、回転も加わります。
そんな場合も「軸ごとのボーン移動の始点と終点をS字にする」ことで滑らかな動きになります。
例えば足を上げて前に出す場合。
軸ごとに分けると
700フレームから720フレームまでがZ軸移動、
700フレームから710フレームと710フレームから720フレームまでがY軸移動になります。
それぞれの軸ごとの始点と終点をS字にします。
そして中間点の扱いは前回の記事の通り。
ということで
710フレームと720フレームのY軸補間曲線は
710フレームと720フレームのZ軸補間曲線は中間に1つキーフレームが挟まる時の
このようになります。
回転も加えてみました。前に出した足が着地する前と足を戻そうと上げた時ににつま先が上がっています。
ややこしいように見えても
軸で分ければこんな感じ。
とにかく始点と終点をS字にすることには変わりません。
全ての親
あと注意したいのが「全ての親」ボーンを回転させると画面の座標軸は変わらないのにGlobal軸が一緒に回転してしまいます。
◆静止画です
全ての親ボーンを45度回転させ、センターと足IKを逆方向に45度回転させて正面を向いています。
見た目何も変わりがないこの状態、しかし座標軸はそのままでGlobal軸が45度傾いてしまっています。
足をZ軸方向へ移動させてZ軸の補間曲線をS字にすればOK……のはずが
こう見えてZ軸とX軸方向への動きになりますので注意が必要です。
全ての親は回さないほうがいいかもしれません。
これも軸ごとに分けられるので
軸足でくるっと回る「ターン」
回転の中心はつま先の親指の付け根辺り。
足IKボーンはくるぶしの辺りにありますので、足IKが円運動しながら回転することでこの動きになっています。
◆あまり見すぎると酔うかもしれません
上下の動き(ここではZ軸)と左右の動き(ここではX軸)、往復する2本の線の交わる点が円を描いています。(……描いていますよ)
つまりZ軸の往復とX軸の往復を組み合わせれば円の動きが再現できるようです。
図にしてみました。
各軸の両端が往復の始点と終点になります。
軸ごとのボーン移動の両端になる部分でキーフレームが必要ですので、
Global軸での0度・-90度・180度・90度・0度でキーフレームを打ちます。
920フレームは回転そのものの始まりなのでZ軸X軸ともに始点、
945フレームは回転そのものの終わりなのでZ軸X軸ともに終点になります。
927Fから
X軸
Z軸
という設定にしています。
こんな感じのターンでも見るのはあくまで軸ごとの始点から終点です。
ちなみに補間曲線設定はX印をドラッグするという目分量での設定になりますので、
どうしても均等な設定にならずにその場その場での微調整は必要になると思います。
おわりに
今回はボーンの移動について語ってみました。
回転と違うのはGlobal軸での軸ごとに移動を見る必要がある、という点です。
ただ、やっぱり「動きの始点と終点をS字にする」ことに変わりはなく、
じゃあもうなんでもとにかく始点から終点をS字にすることで滑らかになるのではないか。
……と、そうではない部分、むしろ補間曲線を設定したが故に滑らかにならない事。
それはまた次回に。
◆モデル : 初音ミク Ver2.3 あにまささん
はかなきものはモーションの始中終
前回は補間曲線でモーションを滑らかにしたい時の「動き始めと動き終わりをS字にする」に触れました。
動き始めと動き終わりだけキーフレームを打つのなら補間曲線の設定は簡単なのですが、間にキーフレームが挟まるとどうなるか。
今回は、「動き始めと動き終わりにキーフレームが入る場合」の設定について語ってみたいと思います。
◆2021年10月7日にサービスを終了したブロマガに書いていた2016年の記事を焼き直した物になります。
◆MMDの基本的な操作方法については割愛させていただきます。
◆「自分のモーションを滑らかにしたい」方に向けた記事です。
大きく回したい
MMDはその仕様上、ボーンの回転がちょうど180度だと右回りに回転します。
また180度以上回転させると今度は角度の小さい方向、つまり逆方向へと回ってしまいます。
このモーションは上半身が左右に110度ずつ、合計220度回っています。
これを前回の様な動きはじめ→動き終わりでキーを打ち補間曲線をS字にすると
角度の小さい方へ回ってしまいます。
ですので任意の方向へ回すには180度より小さい角度で一旦キーを打つ必要があります。
理屈の上では179度で打てば残り41度で220度になりますのでそれで任意の方向へ回ってくれますが、
補間曲線を使うには半分の110度で打った方が設定しやすくなります。
30フレームが動き始め、以降「始点」と称します。
45フレームは中間に打ったので「中間点」と称します。
60フレームは動き終わり、以降「終点」と称します。
◆勝手に呼んでますので他で言うと何それってなると思います。
中間点を挟んだ場合でも
補間曲線の設定は60フレームを選択しても一つ前は45フレームですのでそこから60フレームまでのボーンの動きを設定することになります。
つまり「動いている途中から動き終わり」になります。
同時に30フレームから45フレームまでは「動き始めから動いている途中」になります。
しかし「動き始めと動き終わりをS字にする」事に変わりはありません。
45フレームで選択した補間曲線を動き始めから徐々に加速していくのみの形に
そして60フレームは速度が出た状態から徐々に減速していく形に
そうする事で「動き始めと動き終わりをS字」に設定することができます。
こんな感じで積み上げると分かりやすくなるかと思います。
動き始めと動き終わりでS字が形成されました。
そして一番大事なのはこの赤丸の部分、中間点。
ここの繋がりで速度が急に変わるとモーションは滑らかにはなりません。
そこまでシビアではないのですが、中間点で目に見えて分かるような角度が付くと違和感が残ります。
「始点と終点をS字」にする事に加えて、
「中間点を超える際のボーン移動の速度変化をできる限りなくす」
ことが滑らかモーションを目指す際の大事な部分になります。
前回触れた通り、補間曲線操作欄は割合で表示されていますので、横軸のキーフレーム、縦軸のボーン移動量は脳内で引き伸ばして考えなければいけません。
ボーン回転を179度と41度で分けてしまうと、前半が縦に大きく、後半は縦に小さく考えなければならなくなるので、イメージが掴みにくくなります。
最初のうちは縦軸と横軸共に等分にしておいた方がイメージが掴みやすくなると思います。
もちろん補間曲線を変化させて動きのバランスを変えることもできます。
ボーンの回転は等分にしたまま、キーフレームを移動させてみました。
285フレームにあったキーフレームを278フレームに移動させました。
15フレームで110度回っていたボーンが8フレームで110度回るようになる、つまり前半部分の動きは速くなります。
逆に後半部分は22フレーム掛けて110度回る、つまり動きが遅くなります。
キーフレームは脳内で縮めたり伸ばして考える必要がありますが、
その辺りは調整と再生を繰り返して何とか持って行ってます。
◆一発で滑らかってのは無理です……
ぐるっと回したい
ボーンが180度以上回る場合は、間にキーフレームを1つ打てばいいのですが、360度以上回ると2つ打つ必要があります。
しかし
「始点(動き始め)と終点(動き終わり)でS字にする」
ことには変わりはありません。
390フレームが始点、435フレームが終点。
406と419フレームは両方中間点ですので中間点1と中間点2と呼んでおきます。
◆中間点が405、420ではない理由については後述
始点の390フレームから中間点1の406フレームまでは加速
中間点1の406フレームから中間点2の419フレームまでは等速
中間点2の419フレームから終点435フレームまでは減速
と、このように設定することで始点から終点までがS字で構成されます。
真ん中の操作欄は若干調整してあります。
補間曲線は設定したボーンの移動量内での速度バランスを変えるものですので、速度が遅い部分を作ると、他の部分はそれだけ速くなります。
つまり始点390フレームと終点435フレームで速度を遅くしていますので、405フレーム付近と419フレーム付近はボーン移動が等速よりも速くなっています。
そのため、当初405~420フレームに設定したキーフレーム間を縮める、つまりボーン移動速度を上げることで両側との速度調整を行っています。
もちろん先ほどと同じくキーフレーム間と補間曲線を変えて動きを変えることもできます。
こういった調整を行う際
ボーン移動量はそのままで
キーフレーム間を詰める → ボーン移動が速くなる
キーフレーム間を広げる → ボーン移動が遅くなる
キーフレーム間はそのままで
ボーン移動量を多くする → ボーン移動が速くなる
ボーン移動量を小さくする → ボーン移動が遅くなる
を覚えておくと便利です。
今回は中間点を超える際の調整をキーフレームを動かす、つまり速度を変えて行っていますが、ボーンの移動量を変えることでも調整することができます。
終わりに
今回は始点と終点のキーフレーム2つを打って補間曲線をS字、だけではなく、間にキーフレームを挟んでのS字について触れてみました。
中間点がある場合はそこを超える際にボーンの移動速度が急に変わらないようにしつつ、
何にせよ始点と終点をS字にすることには変わりがありません。
そして今回までは回転ボーンについてのお話でした。
回転ボーンとは趣が違ってくる足やセンターなどの移動ボーンについて
それはまた次回に。
◆モデル : 初音ミク1052C-Re Ver.1.9 箔鳥居さん
モーションを滑らかにしたい
……となれば「多段ボーンでモーションを作る」が一般的な答えではないでしょうか。
PMXエディタでモデルを改造してボーンを増やす、互換ソフトMikuMikuMovingのモーションレイヤー機能を使う。
私もそうやっていわゆる「多段ボーン」でモーションを作っていたのですが、ある日ふと「標準ボーンでも滑らかにしたい」と思うようになってしまいました。
しかし三つで何とかなるものを一つで何とかしたいと思っても、使えるものは一つのボーンと補間曲線しかありません。
そんな茨の道に自ら飛び込んでしまった私がボーンと補間曲線をで色々試して何となく分かったかもしれない事を書いてみたいと思います。
2016年に「補間曲線とは何か」についてブロマガにて記事を書いたのですが、大雑把な記事にも関わらずかなりの閲覧数をいただきました。
2021年にサービスが終了し記事が消えてしまったため、少しでも需要があればと記事を焼き直してみました。
ちなみにこんなモーションを作っています。
◆補足◆
◆2021年10月7日にサービスを終了したブロマガに書いていた2016年の記事を焼き直した物になります。
◆MMDの基本的な操作方法については割愛させていただきます。
◆「自分のモーションを滑らかにしたい」方に向けた記事です。
初期状態は滑らかではないので
モーションを滑らかにするにはまず補間曲線を使いこなす必要があります。
そもそも
補間曲線を設定しない初期状態ではボーンは等速で動きます。
例えば30フレームでボーンが90度動くモーションでは1フレームあたり3度。
等速で動き始めからいきなり3度動き、以降3度ずつ動いて急に止まります。
この瞬間的な速度変化を我々は「滑らかではない」と認識しているようです。
なのでまずこの初期状態を
とりあえず補間曲線で変えていくのが滑らかモーションの基本的な作業になります。
作るモーションに補間曲線を設定していく、または補間曲線を設定してどの様に動くかをイメージしながらキーフレームを打つ。
全てのキーフレームでそんな地道な作業の上に地道な作業が加わります。
さらに動き出し動き終わり以外にも滑らかではない部分がありますし、逆に補間曲線を設定したことで滑らかにならなくなる部分もあります。
その辺りは自身の欲求と技量、他の作業との兼ね合いなど適度に折り合いを付けつつ、というのが良いのかなと思います。
とりあえずS字に曲げてみる
「補間曲線はS字に」と言われます。
MMDの左下にあるこの補間曲線操作欄。
◆補間曲線を手動で設定する際は右側にある「☑自動設定」のチェックをオフにして下さい。
(初期設定ではオンになっています)
補間曲線操作欄は、「選択したキーフレームの一つ前のキーフレーム」から「選択したキーフレーム」までのボーンの動きが表示されます。
このキーフレームだと0フレームから10フレームまでの動きになります。
横軸が時間(フレーム)、縦軸は選択したボーンの移動量。
右向きに時間が進むと共に、ボーン移動量が上がっていきます。
分割してみました。
初期状態は直線なので時間ごとの移動量が等しく、つまり動き始めから動き終わりまで一定の速度になります。
今度は補間曲線をこんな風に設定してみました。
いわゆる「S字」と呼ばれる設定です。
左端の時間ごとの移動量が少なく、時間が進むにつれて段々時間ごとの移動量が増していきます。
そして真ん中から徐々に時間ごとの移動量が減っていきます。
つまり「ゆっくりした動き出しから段々速度を増していき、段々速度を減らしてやがてゆっくりと止まる」といった動き方になります。
ボーンが等速で動きそして止まる際の瞬間的な速度変化が緩やかな速度変化に変わるため、動き始めと動き終わりをS字にしておけばとりあえず滑らかになることから
「補間曲線はS字」と言われるのです。
補間曲線の「水平に近い=遅い」「垂直に近い=速い」を組み合わせて色々な動きに変えることができます。
ボーンの移動量そのものは変わらず、あくまで設定したボーン移動量の中での速度のバランスが変わるだけになります。
◆今回はS字のみですが、他にも様々な曲げ方があります。
色んなS字に曲げてみる
補間曲線操作欄は縦軸、横軸とも割合で表示されますので仮にフレーム間が3フレームしかない場合も、120フレームある場合も、同じ正方形の枠内に表示され、
ボーンが5度しか動いていなくても、120度動いていても、同じ正方形の枠内に表示されます。
例として上のモーションの補間曲線を変えてみました。
このモーションのキーフレーム間は30フレーム(1秒)で、それを往復させています。
動き出しはゆっくりですが、その後急加速しています。
割とクイックな動きになりました。
では次にキーフレーム間を60フレーム(2秒)に広げてみました。
補間曲線はさっきの急加速のままですが
さっきほど急加速しません。
こんな風に脳内で操作欄を縦横に伸びているのを押し込んである、と考えると解りやすいかもしれません。
◆互換ソフトMikuMikuMovingではこの辺を視覚的に分かりやすくした機能が搭載されています。
一例としては
こんなモーションを作る際、補間曲線をS字にして
後は止めておく、といった方法を取る人が多いかもしれません。
しかしCGのボーンは止めると本当にピタッと止まってしまうため、人体の動きとしては不自然に見えてしまいます。
それを避けるために上のキーフレームの43フレーム~60フレームの止まっている部分をちょっとだけ動かしたりすると、一旦43フレームで止まってから微妙に動きだす形になり、これまたどうも不自然だったりします。
こんな場合、脳内引き伸ばしで次のモーションが始まる170フレームまで止めない方法もあります。
もちろん補間曲線が先ほどのS字のままだとゆっくりとした動きになりますので、補間曲線操作欄を脳内で引き伸ばして
一見急加速ですが実はそうではないこの形に設定すれば
体を振った後、余韻のようにそのまま動き続けます。
ちなみに横軸だけでなく、縦軸も同じように使えます。
こんな感じで補間曲線操作欄は正方形ですが、縦に横に引き伸ばすイメージを持つことで様々なモーションを作ることができます。
終わりに
というわけで色々連ねましたが、結局のところ滑らかモーションの基本的作業は初期状態で等速で動くボーンの動き始めと動き終わりの速度変化を緩やかにする、つまり
「モーションの動き始めと動き終わりをS字にする」
ことに尽きます。
今回作った往復のモーションや単純なモーションの場合は、動き始め→動き終わりで2つのキーフレームですので、選択したキーフレームが動き終わりでその一つ前のキーフレームが動き始めになります。その場合は選択したキーフレームでS字にしておけば滑らかになるでしょう。
しかし選択したキーフレームが動き終わりではない場合はS字にしても滑らかにはなりません。
動き始め→動き終わりと2つのキーフレームでモーションが作れない場合は
……結構たくさんあります。
それはまた次回に。
◆モデル : 初音ミクV3 Rev1.9 マシシさん