-
頂点モーフは厄介者・・・
さてさて。
実はちょっと今回は、困っちゃったな、というお話です。
といっても、変にネガティブな話ではないのですけども。
----------
普段、MMD用のモデルをつくってる上で、なにげに普通につくってる、
頂点モーフ、なのですけども。
PMDデータ上では、モーフ項目上に、頂点インデックスとそれに関連する移動量の相対座標が記録されているんです。
しかし、これを、別のフォーマットにもっていく際、行き先によって、うまくいかないことが多いんですよね・・・
ボーンの動作については、なんとかなったりしそうなんですが、
なんでも、頂点モーフに相当する機能は、仕様がまちまちだったりするみたいで。
----------
じゃあ・・・
いっそ頂点モーフなんて使わず、表情の動きを全部ボーンの動作にしちまえば、
互換とれるんじゃね?
というね。
しっかしそれって、
1.モデル作るときどうやる?
2.モーション作成するときどうやる?
という問題があります。
-----------
まず「1.モデル作るときどうやる?」なのですが、
これは僕的にまず苦しいところ。。。
まずもって、各表情の形状って、2次元絵的な感覚で理想的な答えを求めているのです。
だから、メタセコ上で、ラティス的な変形手法を使って、なんとか再現する、というのが、現状ですね。
現実の人物と全く同じ物体が、現実と全く同じ動作をする、というのであれば、実物をお手本にすればよいかもなのですが(これだって簡単なことではありませんけど)。
そも、実物とは乖離したデザインのキャラクターの場合、表情にしたって実物とは乖離してるってのもあるわけでして。これなくして、理想的な表情って可能なの?ってレベルです。
更に、ボーンやウエイトによる単純な移動だけで、矛盾無く理想的な答えを求めることって、、、考えたくない程ヤバい(汗
※もちろん、こういうのをちゃんとやれるひともいると思いますw
僕的に理想的ではないってだけで・・・
----------
次に「2.モーション作成するときどうやる?」についてですが、
これもモーション作る人的にどうなんだろう。
現状のMMDにおける表情モーション作成は、各表情のスライダー操作、というインターフェースの上で成り立っています。
まずもって、これが全く覆されて、全部の表情を、顔面上に存在する沢山のボーンを操作してつける!ってなったら、もっともっとタイヘンになってしまうのでは。。。という心配があります(や、モーション作るのが得意な人たちにとっては、平気なのかもしれないですけど(汗))
例えば顔面に多数存在するボーンを、合理的に操作するためのリグを組んで、、、ってことも考えられますが、これはモデリングかリギングのほうですね。
上記「1.」同様の問題でもあるわけですがw
-----------
で、ここで、ひとつの可能性が!
実は、PMXE用のごった煮プラグインに「頂点モーフからボーンモーフ作成」ってのがあります。
これ、機能は名前そのまんまです。
ちょっとやってみましょう。
とりあえず、簡易プリミティブでつくった平面(縦横10分割)に、
適当な頂点モーフを作成してみます。
この頂点モーフに、件のプラグインを適用してみましょう。
おっ、頂点モーフが設定されていた頂点全部の座標に、移動ボーンが作成されましたね!
1頂点1ボーンで、ウエイト値は100%です。実にシンプル!
そのかわり・・・ボーンが120個増えましたっ!www
作成されたボーンモーフを動作させてみると、頂点モーフと全く同じ動作ができます。
モーフの設定値を見てみますと、、、
↓頂点モーフ
↓ボーンモーフ
これも単純です。
頂点の移動量として設定されている値を、その位置にあるボーンの移動量として置き換えてあるんですね。
----------
ここでね、ポイントは、
頂点モーフの設定を、ボーンの動きとして再現できるよう、
自動設定される!!!
つうとこです。
つまり、これを使ったモデルの、顔面のボーンを動かせば、
「頂点モーフ」ではなく「ボーンの動き」として記録できるんです。
ただね、そのままでは問題は解決できません。
こっから先は、まだできていない領域ですが、必要なことです。
----------
ボーンモーフってのは、PMXのモデルデータ側に記録されてる情報で、
頂点モーフ以上に互換性がわかんないもんです。
(というか僕の知ってる奴では、ボーンモーフの情報を持っていけるデータコンバージョンの方法はありません。。。)
なので、いったん、モデルデータとモーションデータを照らし合わせて、タイムライン上で、モーフの動作値と、それに対応したボーンの移動値を算出して、ボーンのモーションデータとして記録させていく、という、モーションデータの変換が必要です。
この方法はいまありませんので、ツールとかをつくらないといけないですが。
----------
そしてもうひとつ問題が。。。
上で試した際、100個以上のボーンが作成されました。
今度はこのボーンの動作値が、モーションデータに記録されることになるので、
モーションデータの容量が爆増!!!!!
ゲームエンジンなんかでは、ボーンの数が多いのも大問題です。
あとついでに、プラグインには現状、ボーンを表示枠に記録する機能がありませんので、それもやらないといけません。
さらに。。。
実際の使用を想定して、テスト用のモデルの顔面で試したところ、
800個以上のボーンが増えましたっ!!!
うへえ・・・w
モデルデータにもよりますが、このテスト用モデルの場合、顔面だけですが、頂点数が2480あります。
顔面ボーンを作成した場合、最大2480個のボーンと、そのモーションデータが作成されることになるんですね。。。
うーん、これはこれで、大問題出そう・・・
因みに聞いたところによると、MMD上でも表示ボーンが1600個あたりをこえると、表示がバグるそうです。。。(非表示ボーンであれば、もっといけるらしいですけど)
場合によると思いますが、これだけで数千個のボーンの情報を内包しなければならない可能性が。
さすがにそれはヤバいだろう。。。
顔面の頂点が少ないとか、モーフ時に動く頂点の数を最小限に抑えてある、
そんなモデルだったら、いけるのかな。。。それはそれで、本末転倒か(汗
----------
なんかこう、まだ出来ない上に問題のありそうな方法ではありますが。。。
そんなことを考えましたつう、きろくです。
-
闇鍋プラグイン"ウェイト調整用フォーム"について
えっと、今回は、PMXエディタ用プラグインとして、t0r0さんが製作された『ウエイト調整用フォーム』について、です。
***********************************
この記事を書くにあたり、t0r0さんから、アップデートの報告が来ています。
まずは、ar730258から、最新版を取得お願いします。
(本記事では、最新版に準拠した使い方を明記しています)
***********************************
このプラグイン、もとはといえば、ウエイト調整のときに
「ブレンダーみたいにできたら便利なのにね」
という発想でスタートしたものです。
ブレンダーでのウエイト設定は、手塗りもちろんできますが、
PMXEで塗るのとの大きな違いは、
・ポーズモードで変形させた状態で塗れるので、直したい部分を特定しやすい
・どのくらい塗ったらどのくらい移動するのか、変形した状態にすぐ反映される
・ウエイト値を現状より小さく設定して塗っても、別のウエイト値で補完される
という機能がある点でした。
もちろん、従来のPMXEでも、全く出来ない訳ではなかったです。
TransFormView上で頂点を選んで"Ctrl+X"の操作で、PmxViewにその選択頂点が反映されるので、それを使うテもあるのですが、操作手順が煩雑になるので、どうせならもっと手順を合理化してしまおう、ということになりました。
また、ウエイト値の増減方法についても、インジケータを、スライダとバーグラフにすることで、視覚的にもわかりやすく操作できるように、ということになりました。
ウエイト値は、ボーンの影響度がそれぞれ何%で、その合計が1.0(100%)になる必要があるため、バーグラフによる設定がわかりやすいと考えられました。
※PMXEでは、実際にはこの合計値を超えたり満たない設定も書き込めてしまいます。その場合「正規化されていない」ウエイト値として認識されます。
------
さて、このプラグインですが、実際に想定されているシチュエーションは、こんなです。
ちとわかりにくいかと思うんですけど・・・
例えば、この顔面、表情操作に自由度をもたせるためのボーンが組み込んであります。
こういう場合、
『各頂点に対して、どのボーンのウエイト値を、どれだけ設定するのがよいのか?』
というのは、設定作業の難しいところです。
MMDには、テッセレーションやスムージングの機能がありませんので、ポリゴンは表示されている状態がそのまま使われます。その全部の頂点に、動かすためのウエイト情報を入れる必要があります。
※だから、綺麗に見せるために、頂点を増やしていったら、それにも全部ウエイトを設定しなければならないのです。
-----------
前置きはこのくらいにして、実際の使い方を見ていきましょう。TransFormViewでモーフとボーンを操作してみました。
非常に見えにくいですが、頂点が1個、選択されています。
いまこの部分、隣の頂点と、すごく接近しています。
こういう部分って、ポリゴンが折れ曲がって、エッジが表示されてしまい「シワ」がよってしまいます。
これを解消する必要があります!
こんなときに今回のプラグインを使います。
****************************************************
○操作手順
①TransFormViewで、頂点を選ぶ
②プラグインのフォーム上の、ボタン[1.頂点選択(転送)]を押す
③ボタン[2.頂点取得(取得)]を押す
ここまで操作したのが、上の画像の状態です。
選択された頂点の、インデックス、座標、ウエイト設定値が表示されています。
④ウエイトの設定値を、フォームのスライドバーで増減します。
※この時、他のウエイト値が自動計算され、相対的に下がるのが、バーグラフとスライドバーに表示されるので、わかると思います。
⑤ボタン[更新]を押す
ここまで操作すると、TransFormView上に、弄ったウエイト値が反映されます。
このとき、ポーズやモーフの動作状態は、全くかわりません。
まさに『ウエイトを弄ったことで、どう変化したのか』ということを純粋に表示しています。基本的な使い方はこのくらいですが、応用方法はもっとあることと思います。
製作にあたり、直接のキッカケは、顔のボーン制御ですが、各関節やギミックなど、こういった調整が必要な場面は、結構多かったりします。
使う人の発想次第で、もっともっと可能性の広がるツールだと思います。
----------
実際に使ってみて、注意しておく必要がある部分があったので、Tipsとして書き加えておきます。
************************************
○同じ座標に複数の頂点が存在する!
例えば、このような状態です。
何の変哲も無い立方体のカド1箇所を選択しました。
すると、3つの頂点が取得されました。
何故か?
実はこのとき、PMXモデル上には、全く同じ座標に、頂点が3個、実際に存在しているのです。モデルフォーマットの仕様上、1つの頂点に対して、1つの法線、1つのUV座標 というのが基本になっているので、
例えばこの立方体では、カドでエッジが立っているので、そこに3つの法線情報が存在しています。これを再現するため、実は頂点が3つ存在しているのです。
また、カド以外の場合でも、テクスチャの継ぎ目にも、2つ以上のUV情報が存在するので、同様の現象がおこります。
さてこんなとき、どうするかです。
*******************************************
①取得されている頂点が、同じ座標であるか確認する
頂点座標は、上図の右側に示したところに書いてあります。
複数の頂点が取得された場合、どれとどれが、同じ座標のものなのか、ここで確かめましょう
②同じ座標にある頂点を全部選択する
取得頂点リストから、同じ座標の頂点を全部選びましょう。
このとき、個々の座標を示していた部分には『複数選択』と出ます。
③あとは通常の手順と全く同じ
です。
逆説的に、同じ座標のものでなくても、頂点の選択さえできれば、いくらでも同時に設定できます。
但し、いっぺんに操作された頂点は、全部同じ値に設定されますので、覚えて置いてください。
*************************************************
○いらん頂点まで選択してもうた!
例えばこんなケース。弄りたいのは、口の中の頂点だけなのですが、ほっぺの外側まで選択されちゃいました。
ここは弄りたくないんだよナア・・・
こういう場合は、PmxViewで、頂点の選択取捨をできます。
実はこのプラグイン、頂点を取得する段階で、2つの工程を処理しています。
・TransFormViewで選択した頂点を、PmxViewに転送する
↓
・PmxViewで選択されている頂点を、プラグインのフォームが取得する
ということです。
※このため、取得時にボタンを2つ押さなければならないのです。
で、具体的には
***********************************
①TransFormViewで頂点を選んでから[1.頂点選択(転送)]ボタンを操作
②PmxView上で、いらん頂点を選択から外す
③[2.頂点取得(取得)]ボタンを操作
④あとは通常の手順と全く同じ
です。
*******************************
これに限らず、実際には、PmxViewでのウエイト塗りも、すぐにTransformViewに転送する機能もフォームにあります。
いままで通り、ウエイトを塗ったら、フォーム右側のボタン[TransFormView更新]を操作することで、動かしてるTransformViewもそのままの動きでウエイトが反映されます。
---------
そんなこんなで、とりあえずだだっと書きましたが、
このプラグインによって、ウエイト微調整の手順を合理化して、やりやすくなったと思います。
基本的にはセットアップや改造をする人(特にキャラクターもの)にのみ、
それも「ブレンダーでもキーノートでもなく、PMXEでやっちゃう人」向けの
専用のツールですw
どのくらいの需要があるものかはわからないですが、
どうぞよろしくお願いいたします。
あと、
t0r0さん流石やで!!!!!
-
材質トリックを応用した顔パーツ作成について
僕は2010年から、キャラクターモデルをMMD向けに作成してきておりますが、
その中で、顔面の造形技術に関して、重要な部分に、材質トリックを使っているのです。
MMDだけを考慮するなら、問題は無いのですが、、、
このところ、MMDモデルを応用する描画エンジンに対応する機会が増えたことで、これがちょいと問題になるケースが出てきました。
これに対して、材質トリック応用の構造、メリットを説明することで、互換ツールの対応を促すのが、今回の目的です。
-話は少し飛びますが-
事の発端は、Lat式の特殊な構造の存在です。
これは割と有名なお話ですが、例えばこのリンク先の記事をご覧ください。
(ソースはこちらのブログです)
非常に特殊な構造の顔面で、コンバージョンツールや互換ツールにとっては難物といえそうですが。
後に、似たような構造を自分でも試してみたのですが、これはこれで、実は製造に独特の面倒さがあるんですね。特に、見えちゃいけないものが見えてしまうことを隠すマスキングに関して。
-独自製法の考案に至る-
しかしこれがアリなんだったら、と、自分なりの、モデルの顔面の製造法を考案しました。
発想としては、顔面におけるパーツの配置を、造形ではなく、絵をはることにすれば、製造方法の簡素化と、バリエーション展開の容易化を図ることができるのでは、ということでした。例えばこのモデルですが、MMD上での表示自体は、他のモデルと基本的に変わることはありません。
しかし、パーツ単位での非表示で、構造を示してみますと。。。
通常のモデルでは、顔のポリゴンには、目の部分は穴があいていますが、このモデルにはそれがありません。
基礎原理としては、MMDのモデルの扱いとしてはよく知られている性質「材質トリック」を使っています。
この、Z軸上の奥側にある材質を、表示させないようにする原理を応用し、
顔のポリゴンと、目の形状のポリゴンの間で、この材質トリック現象が起こるように組んであるのです。
-この構造がもたらすメリット-
この構造では、目元の表情は目元だけで制作することができるため、表情作成時に、顔全体のポリゴンを管理する必要が無く、作業の簡易化を図ることが出来ます。
また、より大きなメリットとして、別のキャラクターを作る際にも、目元と髪が変われば、結構印象がかわります。
というか、アニメ風のキャラクターのかきわけでも、目元が違っても口元は実はそんなに違わないというケースは多いのです。
全く別の作者の別の作品、ということであれば、もちろん話は別なのですが、同じ作者の別のキャラクターに限れば、というところです。
共通パーツ化することで、セットアップ一切まで行った状態の口元をそのまま利用できるので、モデル作成の工程を短くできる可能性が高いのです。
例えば下記の3キャラクターは、顔の素体に同じものを使用しており、
目元、眉、髪型の違いで、顔の印象の際を持たせています。
上記のモデルは、当ブロマガで配布している物です。
現在のところ、このメリットを全部のモデルに享受できているわけではないのですが、
基本的に僕の配布しているモデルの大部分が、材質トリックを利用しており、
将来的に、こういったバリエーション展開を考慮しています。
広告
2 / 5