理想のモデル創造プロジェクト第五弾 肘や肩などの関節をきれいに曲げよう!
新しいサイトに移転しました。
約5秒後に自動的にリダイレクトします。
WEB上には、いろいろな方々がMMD(MikuMikuDance)上で動くモデルを公開されていますので、それらをお借りして動画を作成している人も多いと思います。。
何を隠そうこの私も、1年ほど前まではその内の一人で、当ブログの画廊で紹介している動画も8割方は、お借りしたモデルに踊ってもらっています。
一方、今では自分でもMMDのモデルを作っている訳ですが、最近ちょっと気になっていることがあります。
それは、モデルの肩や肘を曲げた時の形です。
他の人のモデルを使っている時には「まあ、こんなものじゃないの?」って、あまり気にならなかったんですが、自分のモデルだとやけに気になってしまって・・・
と言う訳で、今回のプロジェクトでは、MMDモデルの関節をきれいに曲げるにはどうしたら良いのかについて検討してみました。
題して、「理想のモデル創造プロジェクト第五弾 肘や肩などの関節をきれいに曲げよう!」です。
今回は、「Hello Worker」で踊ってくれたPAちゃんに協力してもらって、この問題に取り組むことにしました。
MMDモデルの関節部が歪む理由とは
MMDモデルの制作関連の図書を片っ端から調べてみたんですが、関節の変形に関してはどの本も「ボーンのウェイト調整をきちんと行う」としか書かれていませんでした。
これだけを見ると、要するに私のボーンのウェイト調整が下手くそだから関節が歪んでいるんだと言うことになります。
そこで、関節部のウェイト調整をあれこれやってみたんですが、ある方向に曲げた時に綺麗になるように調整しても、違う方向に曲げると歪んでしまうんです。
結局、私自身の結論としては、「完璧なウェイト調整は無理」と言うことになりました。(「そうじゃない」と言う人がいたら、ごめんなさい)
一方、今回のプロジェクトを進める中で、WEB上をいろいろ調べていると、3Dモデルの関節の歪みについて理論的に説明されているものがありました。
引用元: POLYGONOMICON(JNYさま) スキニング考察より抜粋(私が少し要約しています)
関節部の変形において、関節部が「痩せて」あるいは「えぐれて」体積が減ってしまうことによる不自然さに多くの人が悩んでいるのではないだろうか。
その理屈は意外にシンプルなので、簡単に解説する。
まず、2つのボーンの変形において「仮に」骨a、骨bそれぞれに100%ウェイトを設定した場合の変形結果を想定すると、以下のようになるはず。
それぞれの結果を重ねると以下のようになる。
上図のとおり、骨a、bに50%ずつ均等にウェイト設定した結果の頂点位置は、abそれぞれに100%設定した「結果位置の中間点」に来る。これ大事!
図を見れば一目瞭然だが、この計算方法だと、abに50%ずつウェイト設定した場合の「えぐれ」や「痩せ」は「必然」であることが分かると思う。
ちなみにウェイトを50%ずつではなく、25%:75%などのように比率を変えて設定しても問題は解決しない。
なぜなら、ウェイト比率の変更は頂点の結果位置を上図の赤い線分のうち、a寄りにするか、b寄りにするかを変更する事しか出来ないからだ。
そして赤い線の上に頂点がある以上、メッシュの体積の減少はどちらにしろ避けられない。
というわけでこのような頂点配置の場合、ウェイト値をいくらいじっても問題が解決しない。
これはもうスキニング計算の仕様なのであって、その仕様を理解した上で問題を「解決」ではなく「回避」する代替策を模索するのが正解に思える。
この記事を読んで、「やっぱり、完璧なウェイト調整は無理なんだ」と納得。
でも一方で、ここで諦める訳にはいかない。
何とかする方法はないのかと3D CG関連の本を読み漁ったところ、ハイエンドのCGソフトウェアの中に「ボーンによる変形とモーフによる変形」を組み合わせた関節の変形機能があるものを見つけました。
MMDにもモーフ変形の機能が備わっていますから、これに類する機能を実現するのは不可能ではないはず。
と言うことで、ボーンとモーフの組み合わせによる関節の変形について検討することにしました。
ボーンとモーフを組み合わせる時の問題点とは
この検討を始めた当初は、単純に「ボーンの変形にモーフの変形を追加すればOKじゃね」と軽く考えていたんですが、やってみると思わぬ問題があることに気づきました。
それは、モーフによる変形(頂点の移動)は、初期ポーズの位置からの変形だと言うこと。
具体的に説明しましょう。
ボーンを動かした時に生ずる関節部の歪みを、PMXエディタで頂点を動かして修正する場合には、まずボーンで関節を動かします。
そして、この状態で歪んでいる部分の頂点を動かして歪みを修正します。
この修正した形状をモーフとして登録する訳ですが、モーフ側から見るとこの修正による頂点の移動は、初期ポーズにおける当該頂点位置からの移動になります。
一方、MMD上でポーズやモーションをつける場合には、ボーンを移動・回転させて目的のポーズを作りますよね。
つまり、MMD上でボーンを動かした後でモーフ変形を行うと、モーフにより修正した頂点はボーンによる移動量にモーフによる移動量が加算されてしまうんです。
これを防ぐためには、初期ポーズのままで頂点を動かしてモーフを作らないといけません。
でも、ボーンの移動・回転による歪みを初期ポーズのままで修正するなんてことは直観的にはできませんよね。(少なくとも私には無理です)
これは困った。何とかする方法はないんでしょうか?
グループモーフによるモーフの減算が決め手!
今回はこの問題で、かなり長い間悩みました。
でも、水城さまのブログ「解凍って何?からのMMD挑戦日記(URL: http://mmd-tb.jugem.jp/?eid=39)」の記事「モーフを作り始めてからデフォ顔を変更する」を読んでいて、はっと気付いたんです。
上述の問題は、ボーンによる頂点の移動量が加算されるために生じているんだから、その分を減算してやれば良いんだと。
具体的には、次のようにします。
(2)そのポーズを使って、まず頂点修正前のモーフを作成
(3)次に、その状態で頂点を動かして関節の歪みを修正する
(4)歪みを修正した状態で、頂点修正後のモーフを作成
(5)頂点修正前後の2つのモーフをグループモーフにする
(6)グループモーフの中にある頂点修正前のモーフを減算処理する
このように処理すれば、ボーンによる変形後にこのグループモーフを使って関節の歪みを修正することができます。
この方法による修正は、関節の歪み毎にモーフを作成して修正する必要がありますから、モーション作成の面から言えば手間が大幅に増えるために多用はできません。
それでも、「腕を真上に挙げる」等のMMDモデルにとって過酷なポーズにおける破綻を回避する有効な手段だと思います。
と言う訳で、今回のプロジェクトはこれでコンプリート。
今後は、要所(例えば、滑らかなゆっくりとした動きで、関節の歪みが目立つような場面等)でこの方法を適用していくつもりです。
さて次回のプロジェクトですが、ご存じのとおり、本館では現在「唯一、愛の詠」のモーショントレースを行っています。
トレース元の動画では、ぴのぴさまを含む4人のお姉さま方が着物を着て、優雅に踊っておられます。
このため、モーショントレース完了時には着物姿のモデルを制作して踊ってもらう予定なのですが、着物を着たモデルはこれまでに制作したことがありません。
正確には、「千本桜」のムービーを作成した時にモデルのRinちゃんに袖の部分だけをつけてもらったことがありますが、その時には袖の部分だけでも満足な形状にはできませんでした。
と言うことで、次回のプロジェクトでは私流の着物のモデル制作について検討してみたいと思います。