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