【blender】シンプルなメッシュからウェイト転送してボーン削減した髪の毛のウェイトを塗りなおす

備忘録

毎回ウェイト転送のやり方をぼんやりしか思い出せなくてうまくいかないので簡潔に自分用にまとめるはずが、気が付いたら初心者さんにやさしい(当社比)記事になっていた。
DataTransferモディファイアの設定だけサクッと見たい人は3まで飛んでください。

0.はじめに

今回作業するメッシュは複数のボーンとそれに対応する頂点グループが存在、つまりすでにウェイトが塗られています。

ただ現状だと、ボーンを結合した影響で蝶番のようにカクカクとしているので、根本から毛先までのウェイトをきれいなグラデーションにしたい。
そうすることで縦方向のボーンが分割されていなくても力のかかり方に差が出て、根本はあまり動かず毛先に行くほどボーンの動きに引っ張られるようになります。

今回のやり方はそもそもウェイトが塗られていないモノでも大丈夫です。
その場合は下準備の頂点グループ云々カンヌンはサラッと読み飛ばしてください。
1からやる場合は対応させたいボーンごとにメッシュを別オブジェクトにしておいた方が楽かも。

1.下準備

1-1.ボーンの結合

MMDだと剛体の連結が増えるほど千切れて飛んでいきやすくなるので、ショートヘアなら縦1本にまとめちゃうのが楽。
今回のモデルも元は2連結や3連結だったのをそれぞれ根元のボーンに結合しています。
VRChatアバターもこの方法を使うとボーン数とか色々節約できます。
結合作業は かなめりぜ さんのアドオンがめっちゃ便利だったのでよかったら。

【無料】Vertex Group Merger – かなめりぜ – BOOTH
複数の頂点グループを選択して1つの頂点グループにマージするためのBlenderアドオンです。ウェイト値は加算方式または減算方式でマージでき、合計ウェイトの調整やソースグループの保持などのオプションも利用できます。 Vertex Weight…

メッシュの頂点グループを毛束ごとに1番根元の頂点グループに結合させ、ボーンも各毛束の根元のボーンだけ残して消してしまいます。

1-2.リネーム

リネームをしたい場合もこのタイミングでやってしまいましょう。
ボーンの名前を変えるとメッシュの頂点グループの名前も一緒に変わってくれますが、発動条件がある可能性があるので確認しながらやってください。
最悪手動でメッシュの頂点グループを対応するボーンと同じ名前にリネームしてあげればいいです。

というか後でデータ転送するときに頂点グループは書き換わってくれるので、どの頂点グループがどのボーンに対応しているかさえわかれば頂点グループ側のリネームはしなくてもいいです。
(その場合はデータ転送が終わるまではPose Modeでボーンを動かしてもメッシュは動きません)
転送後に空になった古い頂点グループを消してあげてください。

ボーンのリネームはEdit Modeでボーンを選択してF2
メッシュの頂点グループはここ

1-3.ボーンを垂直にする(MMD用)

髪の毛のボーンを全て垂直にしておくと、剛体設定したときに重力に引っ張られて変な形にならなくて済みます。
.を押してPivot Point をIndividual Origins に

その状態で髪の毛のアーマチュアをクリックしてTabでEdit Modeに入り、Aで全選択→SShift+Z0

1-4.ボーンの位置調整

メッシュの曲がり始めの位置にボーンの始点が来るように位置調整します。(Edit Modeで動かしたいボーンを選択してGで移動)

MMDの場合は終点をGZで真下に伸ばしてZ方向の長さを合わせます。(終点はメッシュとズレていても問題はない)
VRChatアバターの場合は始点は固定したまま、ボーン全体が毛束の中心を通るようなイメージで終点を毛先のあたりに合わせます。

すべて終わったら、Edit Modeで揺らすボーン全てを選択してEZを押した後、カーソルを下に少しずらしてエンドボーンを生やしておきます。
このボーンは存在しているだけでいいのでこの後は無視。

2.データ転送元メッシュの用意

2-1.シンプルなメッシュを作る

ウェイトを転送したいモノになんとなく形が合うものを用意しましょう。
今回は平面の最小単位の三角形です。
スカートとかみたいに複雑なモノじゃなければ基本的にこれでいいと思う。

Object ModeでShift+A→Mesh→Planeで四角形を新規召喚します。
出来上がった四角形を選択したままRX90で起こしましょう。
そのままTabでEdit Modeに入り、上辺の両端の頂点を選択、M→At Centerで三角形の出来上がり。

TabでObject Modeに戻り、3角形をGで動かしてなんとなく重ねます。

位置が決まったら三角形と転送先のメッシュを選択してCtrl+A→All Transformsを適応しておきます。
どちらかを動かした後は念のため毎回これをやっておきましょう。

2-2.転送元メッシュに頂点グループを追加

三角形に揺らすボーンとその親ボーン(なんちゃらrootとか頭とか)の名前の頂点グループを追加します。

揺らすボーンは複数本あると思いますが、今回は毛束の動きを生かすために1本ずつ転送していくので、最初に取り掛かるボーン1本を選んでその名前を付けます。

2-3.転送元メッシュにウェイトを塗る

三角形にウェイトを塗ります。

ウェイトを塗るとは、各頂点に頂点グループを適用させていくことを言います。
頂点ごとの合計が1になりさえすれば、1つの頂点にいくつでも頂点グループを適用することができます。(頂点グループAを0.3+頂点グループBを0.7とか)
基本的にゼロイチになることはなく、複雑なモノになるほどウェイト塗りは地獄になっていきます。
それを極限までシンプルにしてくれるのがさっき作った三角形です。

Edit Modeで頂点Aを選択し、親ボーンの名前の頂点グループを選択してAssign。

これで頂点Aのウェイトが親ボーンに対し1(力のかかり方が100%)になりました。

同じ要領で頂点B,Cを選択し、揺らすボーンの名前の頂点グループを選択してAssign。

これで頂点B,Cのウェイトが(以下略)。

これで上から下に向かって均一なグラデーションのウェイト情報を持った三角形が出来上がりました。

3.ウェイト転送

3-1.モディファイアを追加

転送先のメッシュにData Transferモディファイアを追加します。

Object Modeでウェイト転送先の髪の毛のメッシュを選択し、スパナのマークのタブ→Add Modifier→Edit→Data Transfer

ドラッグしてArmature Modifierより上に持っていきましょう。

3-2.モディファイアの設定

自分用にメモりたかったのはココだけ

Data Transferモディファイアの中の項目を画像の通りに設定します。

Source → さっき作った三角形

Vertex Group → 今回転送したいボーンと同じ名前の頂点グループ(もしくはウェイトを転送したい部分の頂点グループ)
ここで選択した頂点グループに含まれている頂点にウェイトが転送されます。
1つのメッシュオブジェクトに丸々ウェイト転送したい場合は空欄にしてください。

Generate Data Layers → 押す。
転送元に含まれる頂点グループが転送先にない場合新しく追加してくれます。
ダブったりしないのでとりあえず押しといていい。

Vertex Data → チェックを入れる。
これを転送してねの意

Vertex Group → 押す。
忘れずに押す。
押さなくても次の項目設定できるけど押さないと転送してくれない。
青になってるか確認。

Mapping → Nearest Face Interpolated
転送元の頂点と頂点の間のウェイトを補完して、転送先から一番近いところのデータを転送してね的な意味
多分一番仕事してるのココ

3-3.揺れ方の調節

毛束によっては先の方だけ揺れて欲しいものも出てくるので、その時は三角形のサイズを調整してください。
根元から大きく揺らしたい場合は点Aを上めに、毛先しか揺らしたくない場合は点Aを下めに。

根元の方など絶対に揺らしたくない部分はEdit Modeで頂点を選択し、直接親ボーンのウェイトを1でAssignして揺れ用のボーンの頂点グループをRemoveするといいです。
Pose Modeで動きを見ながら作業しましょう。

揺れの調整の参考記事

【Tips】MMDモデルの髪の毛をふわふわにするコツ:くぅ&みぃのブロマガ
【Tips】MMDモデルの髪の毛をふわふわにするコツ

3-4.モディファイアを複製して適用

Pose Modeで動きを確認して問題がなければ、Data Transferモディファイアを適用します。

この後次のボーンで使うために、適用する前に今作ったData Transferモディファイアをクリック → Shift+Dでモディファイアを複製しておきましょう。

同じ設定のData Transferモディファイアがもう一つ出来たら、どちらか好きな方をクリックしてCtrl+Aで適用します。

揺らすボーンごとにメッシュを別オブジェクトにしてる場合は複製せずに3-1から繰り返してください。

3-5.頂点グループを次のボーンに変える

三角メッシュの頂点グループのうち、揺らしたい方のボーンの名前を次に転送したいボーンの名前に変えます。

先ほど複製して残しておいた転送先のData TransferモディファイアのVertex Groupも今回転送するボーンに対応したものに変更します。

3-3に戻る(以後繰り返し)

3-6. 一度適用した部分に転送しなおしたい場合

Deta Transferモディファイヤを適用すると、なぜかオブジェクト全体の頂点にモディファイヤで適用した頂点グループがウェイト0で乗ります。

この状態でもう一度頂点グループを指定してDeta Transferモディファイヤを使ってしまうと恐らくオブジェクト全体に均一にウェイトが乗ってしまいます。

なので一度転送して適用した部分にもう一度転送しなおしたい場合は、ウェイト0の頂点グループを削除してから行ってください。

4.おわり

やってみて思ったけど、ボーンに対応した毛束ごとにオブジェクト分けちゃった方が作業は楽かもしれない。
あと三角形は毛束ごとに結構調整要るかも。

ということでウェイト転送の備忘録でした。
これ書くのと忘れる度に調べるのどっちが時短になったのか謎。

↓今回作業に使っていた髪型(超愛用)

【24アバター対応】Line Wolf Hair【VRChat】 – Pirouette – BOOTH
✦発売記念セール✦ ~2025/12/04まで 1100円→900円 ロングとショートの2wayのウルフカットです! -Support-の内容は変わりません。 ご購入する前に、商品内容と利用規約を必ずお読みください。 対象商品を購入した時点…

↓ウェイト転送知りたい人はこれ見よう