理想のモデル創造プロジェクト第八弾 モデルの足が滑らないようにする方法
新しいサイトに移転しました。
約5秒後に自動的にリダイレクトします。
私はこれまで、そこそこの数のモーショントレースをこなしてきました。
しかしながら今でも、モーショントレースをする際に神経を尖らせていることがあります。
それは、モデルの足の滑りです。
当然のことですが、普段、私たちが動く時に地面に着いた足は動きません。(スキーやスケートなんかは別ですが・・・)
一方、3D空間でMMDモデルを動かす場合、3D空間内の地面は仮想的なものですから、足と地面との摩擦や衝突といったものは一切ありません。
要するに、モデルの足を前後・左右・上下に制限なく動かせるので、モデルを操作する人がモデルの足を地面にぴったりと着けたり、歩く時に地面に着いた足が動かないようにしなければならないんです。
これが3D CGの世界でよく言われている「フロアコンタクト」の問題です。
「え~っ! ちょっとくらい足が動いたっていいんじゃないの?」って思ってませんか?
いえいえ、これは結構大きな問題なんです。
なぜなら、モデルの足が少しでも滑ると、見ている人は敏感に違和感を感じてしまうから。
だから、モデルを動かす際には、常にモデルの足の状態に気を配らないといけません。これ、結構辛いです。
なので、「もっと楽にフロアコンタクトできるようにできないかしら」ってずっと思っていたんですが、ハイエンドのCGソフトウェアの中には自動でフロアコンタクトできるものがあることを、最近知りました。
全自動とまではいかなくても、もしMMDでこれに類する機能を実現することができたら、モーショントレース時の負担が軽くなるに違いない。
と言うことで、フロアコンタクトの問題を軽減する方策について検討することにしました。
題して、「理想のモデル創造プロジェクト第八弾 モデルの足が滑らないようにするには」です。
それではまず、モデルの足が地面に着くとはどういう状態のことなのか調べてみることにしました。
[1]モデルの足が地面に着く条件とは?
MMDでモデルの足を動かす場合、両足のIK(インバースキネマティクス)を動かすことはご存知ですよね。
またMMDでは、選択したボーンの初期状態(モデルを読み込んだ直後の状態)からの移動量および回転量が、下図の朱色で囲まれた部分のところに表示されています。
なので、この部分を見ながらモデルの足をいろいろと動かしてみると、足が地面に着いている(ように見える)時には、次のような状態になっていることが分かりました。
(2)つま先、あるいは踵が上がっている場合には、足IKのY座標の値はゼロではなく少し高くなっている
逆に言うと、足を地面に着けたい場合には、この状態を意図的に作り出せば良いということ。
つまり、MMDには数値を入力してボーンの位置や回転を制御する機能がありますから、足が地面に着くためのY座標の値を入力すれば良い訳です。
[2]モデルの足が滑るのを防ぐためには?
私の経験から言えば、モーション制作をしている時にモデルの足が滑ってしまうのは、「足が接地する前後で足首が回転するから」です。
具体的に説明しましょう。
人間(二足歩行の動物)が歩いたり走ったりする時、いきなりつま先と踵が同時に地面に着くことは少なく、ほとんどの場合、つま先か踵が先に着いてから足裏全体が地面に着きます。
また、足が地面から離れる場合でも、いきなり足裏全体が地面から離れるよりもつま先か踵が遅れて地面から離れることの方が多いです。
このため、足が接地する前後ではほとんどの場合、足首が縦方向に回転することになります。
一方、MMDモデルの足は踝(くるぶし)付近に配置されているIKを回転の中心として回転します。
このため、つま先や踵を上げるとIKの位置は動かなくてもつま先と踵の位置は前後・上下に微妙に移動することになります。
これが、モデルの足が滑る(ように見える)原因です。
と言うことは、これを防ぐためには、足が接地する前後で「足IKをX軸(Local)回りに回転させると共に、Z軸(Local)方向およびY軸(Local)方向に移動」させれば良いんですね。
[3]フロアコンタクトさせるための具体的な調整方法
足を接地あるいは滑るのを防止するための方法が分かりましたので、具体的な調整方法について検討します。
言葉で説明すると分かりにくいので、検討結果を図で示します。
中央の図が足裏全体が接地している状態、左右の図はつま先が接地している状態および踵が接地している状態です。
図の見方ですが、つま先が接地している状態の図で説明します。
足裏全体が接地している状態から足首(足IK)を回転すると赤い点線の三角形になります。
このままだとつま先が地面より沈み込んでいる上、もともとのつま先の位置から後ろにΔZだけ後に移動しています。
足が滑らないためにはつま先の位置が変わってはいけませんから、足IKを平行移動させてつま先が元の位置に来るようにします。(緑色の三角形の位置です)
この時の移動量がΔYおよびΔZです。
まとめますと、
(2)つま先を上げる場合には、足IKをΘ0+Θ3だけ回転させた後、ΔZ、ΔYだけ平行移動する
このようにすれば、理論上は足が滑ることなくつま先や踵を上げることができることになります。
なお、足IKの回転角や移動量を計測するために、PMXエディタを用いてつま先と踵にダミーのボーンを設置し、このダミーボーンの位置座標をMMDで確認しています。
ところが、実際にこの方法で足IKを回転・移動させても思ったとおりの動作にはなりませんでした。
その原因は、足IKの回転角の算出方法にありました。
上述の方法では、足IKの回転角を逆三角関数(アークタンジェント)を用いて計算するんですが、この計算方法では各ボーンの位置座標の誤差が大きく影響するために回転角が大きくぶれてしまうんです。
そこで、いろいろと試行錯誤した結果、最終的にはMMD上で実際に足IKを回転・移動させて実測することにしました。(最初からこうすれば良かった・・・)
実際のモーション制作において適用する場合には、足IKを希望する位置に移動させてから、実測した回転角と移動量を数値で入力すればOK。
これで、モデルの足の滑りを防止できるようになりました。ぱちぱちぱち。
[4]ここで紹介したフロアコンタクトを運用する上での注意点
今回の検討でモデルの足の滑りや接地の問題はかなり抑えられるようになりました。
かなりと言うのは、今回の検討結果を適用しても微調整は必要になるからです。
微調整が必要になる原因としては、
(1)モデルの足IKがY軸まわりに回転している(つまり、足首を捻っている)と移動量ΔY、ΔZが変わる
(2)モーション制作の場面では、つま先立ちおよび踵を上げる時の足IKの回転角が異なる(例えば、踵を高く上げたい場合もあれば、それほど高く上げなくても良い場合もある)
からです。
それでは今回の検討は無駄だったのかと言うと、そうではありません。
と言うのも、MMDで足IKを思った方向・角度に回転させるためには、視点を変えながら何度も調整する必要があるからです。
その点、今回の方法を用いた場合、視点を変えなくても大まかに足IKの位置と角度を一度に決めることができます。
その上で、後は微調整をするだけで良いのです。
これは、モデルの足の滑りに悩んでいる人にとっては、かなり大きなメリットなんです。
とは言っても、毎回足IKの回転角度と移動量を数値入力するのは面倒ですね。
なので、私がいつも使っているモーション制作用の自作ツールにこの機能を組み込むことにしました。
このツールを使うことで、MMD上で足IKを選択した後、接地させる部位を選んでボタンを押すだけで踵やつま先を上げた状態にできるようになりました。
このように、やり方次第でかなりモーション制作の作業量を減らすことができます。
しかも、全てマニュアルで足を接地させるよりも精度は上げられるんです。
なので、モーション制作時の足の滑りに悩んでいる人は、是非、今回の検討結果を自分なりの方法で試してみて下さい。
【本プロジェクトの一時中断について】
本プロジェクトでは、MMDのモデルを制作して動かす上で、個人的にネックと感じているいろいろな問題点について検討してきました。
そのおかげで、完璧とまではいかなくても、そこそこのレベルのモデルが作れるようになりました。
なので、本プロジェクトを一時中断し、しばらくの間、モデルの制作に注力したいと思います。
モデルの質を向上させるには、結局、数をこなす以外にはありませんからね。
その過程において新たな問題点が出てきた場合には、その時点でまた再開したいと思います。
その代わりと言っては何ですが、新年からは制作したモデルを使った新しいタイプのイラスト制作を試そうと考えています。
まだまだ構想の段階なのでお披露目の時期は未定ですが、本ブログで公開したいと思っていますのでその時は見てやってくださいませ。
それでは、ここまで付き合って頂いて、ありがとうございました。
今後ともよろしくお願いいたします。