理想のモデル創造プロジェクト第八弾 モデルの足が滑らないようにする方法

私はこれまで、そこそこの数のモーショントレースをこなしてきました。

しかしながら今でも、モーショントレースをする際に神経を尖らせていることがあります。

それは、モデルの足の滑りです。

当然のことですが、普段、私たちが動く時に地面についた足は動きません。(スキーやスケートなんかは別ですが・・・)

一方、3D空間でMMDモデルを動かす場合、3D空間内の地面は仮想的なものですから、足と地面との摩擦や衝突といったものは一切ありません。

要するに、モデルの足を前後・左右・上下に制限なく動かせるので、モデルを操作する人がモデルの足を地面にぴったりと着けたり、歩く時に地面についた足が動かないようにしなければならないんです。

これが3DCGの世界でよく言われる「フロアコンタクト」の問題です。

「え~っ! ちょっとくらい足が動いたっていいんじゃないの?」って、思ってませんか?

いえいえ、これは結構大きな問題なんです。

なぜなら、モデルの足が少しでも滑ると、見ている人は敏感に違和感を感じてしまうから。

だから、モデルを動かす際には、常にモデルの足の状態に気を配らないといけません。 これ、結構辛いです。

なので、「もっと楽にフロアコンタクトできるようにできないかしら」ってずっと思っていたんですが、ハイエンドのCGソフトウェアの中には自動でフロアコンタクトできるものがあることを、最近知りました。

全自動とまではいかなくても、もしMMDでこれに類する機能を実現することができたら、モーショントレース時の負担が軽くなるに違いない。

と言うことで、フロアコンタクトの問題を軽減する方策について検討することにしました。

題して、「理想のモデル創造プロジェクト第八弾 モデルの足が滑らないようにするには」です。

それではまず、モデルの足が地面に着くとはどういう状態のことなのか、調べてみることにしました。

モデルの足が地面に着く条件とは?

MMDでモデルの足を動かす場合、両足のIK(インバースキネマティクス)を動かすことはご存じですよね。

また、MMDでは、選択したボーンの初期状態(モデルを読み込んだ直後の状態)からの移動量および回転量が、下図の朱色で囲まれた部分のところに表示されています。

なので、この部分を見ながらモデルの足をいろいろと動かしてみると、足が地面に着いている(ように見える)時には、次のような状態になっていることが分かりました。

  • 足裏全体が地面に着いている時には、足IKのY座標の値がゼロになっている
  • 爪先、あるいは踵が上がっている場合には、足IKのY座標の値はゼロではなく、少し高くなっている

逆に言うと、足を地面に着けたい場合には、この状態を意図的に作り出せば良いということ。

つまり、MMDには数値を入力してボーンの位置や回転を制御する機能がありますから、足が地面に着くためのY座標の値を入力すれば良い訳です。

モデルの足が滑るのを防ぐためには?

私の経験から言えば、モーション制作している時にモデルの足が滑ってしまうのは、「足が接地する前後で足首が回転するから」です。

具体的に説明しましょう。

人間(二足歩行の動物)が歩いたり走ったりする時、いきなり爪先と踵が同時に地面に着くことは少なく、ほとんどの場合、爪先か踵が先に着いてから足裏全体が地面に着きます。

また、足が地面から離れる場合でも、いきなり足裏全体が地面から離れるよりも、爪先か踵が遅れて地面から離れることの方が多いです。

このため、足が接地する前後では、ほとんどの場合、足首が縦方向に回転することになります。

一方、MMDモデルの足は踝(くるぶし)付近に配置されているIKを回転の中心として回転します。

このため、足IKを回転させて爪先や踵を上げると、IKの位置は動かなくても爪先や踵の位置は前後・上下に微妙に移動することになります。

これが、モデルの足が滑る(ように見える)原因です。

と言うことは、これを防ぐためには、足が接地する前後で「足IKをX軸(Local)周りに回転させると共に、Z軸(Local)方向及びY軸(Local)方向に移動」させれば良いんですね。

フロアコンタクトさせるための具体的な調整方法

足を接地あるいは滑るのを防止するための方法が分かりましたので、具体的な調整方法について検討します。

言葉で説明すると分かりにくいので、検討結果を図で示します。

中央の図が足裏全体が接地している状態、左右の図は爪先が接地している状態および踵が接地している状態です。

図の見方ですが、爪先が接地している状態の図で説明します。

足裏全体が接地している状態から足首(足IK)を回転すると、赤い点線の三角形になります。

このままだと爪先が地面より沈み込んでいる上、もともとの爪先の位置から後ろにΔZだけ後ろに移動しています。

足が滑らないためには爪先の位置が変わってはいけませんから、足IKを平行移動させて爪先が元の位置に来るようにします。(緑色の三角形の位置です)

この時の移動量が、ΔYおよびΔZです。

まとめますと、

  • 踵を上げる場合には、足IKをΘ1-Θ2だけ回転させた後、ΔZ、ΔYだけ平行移動する
  • 爪先を上げる場合には、足IKをΘ0+Θ3だけ回転させた後、ΔZ、ΔYだけ平行移動する


このようにすれば、理論上は足が滑ることなく、爪先や踵を上げることができることになります。

なお、足IKの回転角や移動量を計測するために、PMXエディタを用いて爪先と踵にダミーのボーンを設置し、このダミーボーンの位置座標をMMDで確認しています。

ところが、実際にこの方法で足IKを回転・移動させても思ったとおりの動作にはなりませんでした。

その原因は、足IKの回転角の算出方法にありました。

上述の方法では、足IKの回転角を逆三角関数(アークタンジェント)を用いて計算するんですが、この計算方法では各ボーンの位置座標の誤差が大きく影響するため、回転角が大きくぶれてしまうんです。

そこで、いろいろと試行錯誤した結果、最終的にはMMD上で実際に足IKを回転・移動させて実測することにしました。(最初からこうすれば良かった・・・)

実際のモーション制作において適用する場合には、足IKを希望する位置に移動させてから、実測した回転角と移動量を数値で入力すればOK。

これで、モデルの足の滑りを防止できるようになりました。ぱちぱちぱち。

ここで紹介したフロアコンタクトを運用する上での注意点

今回の検討で、モデルの足の滑りや接地の問題はかなり抑えられるようになりました。

かなりと言うのは、今回の検討結果を適用しても、微調整は必要になるからです。

微調整が必要になる原因としては、

  • モデルの足IKがY軸周りに回転している(つまり、足首を捻っている)と、移動量ΔY、ΔZの大きさが変わる
  • モーション制作の場面では、爪先立ちおよび踵を上げる時の回転角が一定ではない(例えば、踵を高く上げたい場合もあれば、それほど高く上げなくても良い場合もある)

からです。

それでは、今回の検討は無駄だったのかと言うと、そうではありません。

と言うのも、MMDで足IKを思った方向・角度に回転させるためには、視点を変えながら何度も調整する必要があるからです。

その点、今回の方法を用いた場合、視点を変えなくても大まかに足IKの位置と角度を一度に決めることができます。

その上で、後は微調整するだけで良いのです。

これは、モデルの足の滑りに悩んでいる人にとっては、かなり大きなメリットなんです。

とは言っても、毎回足IKの回転角度と移動量を数値入力するのは面倒ですよね。

なので、私がいつも使っているモーション制作用の自作ツールにこの機能を組み込むことにしました。

このツールを使うことで、MMD上で足IKを選択した後、接地させる部位を選んでボタンを押すだけで、踵や爪先を上げた状態にできるようになりました。

このように、やり方次第でかなりモーション制作の作業量を減らすことができます。

しかも、全てマニュアルで足を接地させるよりも精度は上げられるんです。

なので、モーション制作時の足の滑りに悩んでいる人は、是非、今回の検討結果を自分なりの方法で試してみて下さい。

本プロジェクトの一時中断について

本プロジェクトでは、MMDのモデルを制作して動かす上で、個人的にネックと感じているいろいろな問題点について検討してきました。

そのおかげで、完璧とまではいかなくても、そこそこのレベルのモデルが作れるようになりました。

なので、本プロジェクトを一時中断し、しばらくの間、モデルの制作に注力したいと思います。

モデルの質を向上させるには、結局、数をこなす以外にありませんからね。

その過程において新たな問題点が出てきた場合には、その時点でまた再開したいと思います。

それでは、ここまで付き合って頂いて、ありがとうございました。

本プロジェクトが、皆様方のモデル制作の一助となることを願っています。

実験室 トップへ

コメント

タイトルとURLをコピーしました