非専用服をBlenderで着せる[VRChat]
数か月ぶりの更新です。
ワールド作るなどいろいろしていたら期間が空いてしまいました。
世間は夏が来たという話をしていますが気にしません。
今回はBlenderを使って非専用の服を着ていきます。
初心者向け(というか私が素人)なので、モデリングはしません。
できる限りボタン操作で何とかします。
とはいえ、Blenderの基本操作(視点操作など)は把握済み(もしくは別途調べてもらう)方針で書いています。
想定読者
- Blenderは基本操作がわかるくらい
- 素体のあるアバターに服を着せたい
- 揺れ物判定が多少消えるくらいは気にしない
- アバターアップロード側の知識は多少ある
Contents
やることの流れ
- モデルをインポートする
- 何となく大きさを合わせる
- 必要なボーン(Armature)を移植する
- ウェイトを転送する
- 微調整
今回の作業はこのような流れになります。
簡易的な作業になるので、揺れ物のリボン大量などだと厳しいかもしれません。
(揺れなくなってもいいならまあ大丈夫です)
そもそも何でBlenderを使うのか?
Boothなどで販売されている「専用服」は、元のアバターとボーンの長さや曲がり方が合うように作られています。
そのため、Unity上で場所やボーン構造さえ合わせれば着ることができます。
しかし、専用でない服を着る場合、服のモデルの曲がり方は体と異なっています。
そのため、単純に大きさだけ合わせてもうまく追従してくれません。
そこで、どこの部分がどれくらいどのボーンに追従するのかのデータ(ウェイト)を揃える必要があります。
なお、「専用」という言葉は実際、「構造が合っている」くらいの意味で使われていることが多いと思います。
ただ、規約上本当に専用(他モデルへの着せ替えを許可しない)可能性も否定できないので、
アバター本体と服のモデルの規約は確認するようにしましょう。
あと、あんまりにも体と服の体形が違うと調整が辛いので非推奨です。
複数の対応モデルがある服の場合は体のバランスが近いものを持ってくると吉です。
モデルをインポートする
Blenderにモデルをインポートします。
必要なのは体のモデルと服のモデルの両方です。
今回使わせていただくのはこちらのモデルです。
場合によっては、UnityPackageしかフォルダになくfbxファイルに直接アクセスできないかもしれません。
その場合は、Unityに一度取り込んでから「ファイルの場所を開く」で取り出すと便利です。
公共に送信する都合で謎のPlaneを画面に含んでいますが、ここに素体があると思ってください。
素体(服の下の体)がない場合も着せる服によってはなんとかなることもありますが、
今回は素体があるという前提で進めていきます。
私の環境の都合で画像では素体しかインポートしていませんが、服のモデルもあれば便利です。
特に同じような形状であればあるほど有効です。
使わない服もこの時点では一旦非表示にだけして削除はしない方がいいかと思います。
なんとなく大きさを合わせる
服の側をArmatureごと全部選択して、とりあえず位置を合わせてみます。
Gキーを押した後でX, Y, Zを押すとその軸にだけ移動できるので活用しましょう
横幅はそんなに悪くないですが、明らかに足の位置がおかしいですね。
縦の大きさを調整したいと思います。
あと、放送できませんが胸の大きさもあっていません。
この時点では、Armature全体の大きさだけを調整します。
編集モードなどを利用すると一部の大きさを微調整できますが、いったん控えておきましょう。
まだ合っていない部分がありますが、気にしません。
方針を立てる
ある程度大きさが合ったら、どこのボーンを移植しないといけないのかを考えます。
多くの場合、スカートだと思います。
服の構造を見て、パーツを2つに大別します。
- 体のウェイトを転送する部分
- 元の服のウェイトを生かす部分(揺れ物部分)
元のウェイトを生かす部分に骨格のボーンのウェイトが乗っていると曲がり方が変になるので、
なるべくそのような部分は少ない方が安全です。
今回はスカートの部分は元のウェイトを使うことにします。
(あと手首のリボンも私は生かしますが、説明上は割愛します)
スカートの根本にHipのウェイトが乗っていると思いますが、これは特殊なボーンなので大丈夫です。
この時点でArmatureに対して服の形を変えてしまうと面倒なので、全体の調整しかしなかったわけです。
ウェイトを生かす部分を切り出す
パンツスタイルなどで元のウェイトがいらない、
元の服と極端に形が似ているなどの場合はここは省略してください。
編集モードで、元のウェイトを残す部分だけ選択します。
Lキーを押すとつながった部分で選択できるので便利です。
Pキー > Selection で別のオブジェクトに分割しておきます。
ボーンを分離、移植する
次に、切り出した部分に対応するボーンを分割していきます。
ボーンはHierarchy側から選択した方が楽です。
Select > Similar > Childrenなどを使って該当部分をすべて選択していきます。
どこの階層にあったか必ず覚えておきましょう。
(この画像だとHipsの子)
選択したら、右クリック > Separate Bones > Separate Bonesで別のArmatureに分離します。
次に、分離されたArmature > 体のArmatureの順に選択し、Ctrl + Jで統合します。
編集モードで統合されたボーン > 親にしたいボーンの順に選択し、Ctrl + P > Parent > Keep Offset します。
親にしたいボーンは先ほど覚えておいたボーンに対応するものです(今回はHips)
体のArmatureに揺れ物のボーンが統合されました。
揺れ物部分を体に移す
次に、先ほど切り出した揺れ物部分を体の側のArmatureに入れていきます。
まずは、Armatureを選択してObject > Apply > All Transformsしておきます。
(そうしないと外に出したときにスケールが元に戻ってしまいます)
HierarchyでShiftを押しながらオブジェクトを体のArmatureの中に持っていきます。
Modifierの部分からArmatureの関連付けを体側のものに変更します。
残りの部分を体に合わせる
これで、ウェイトを残すべき部分は避難させました。
残りの部分のウェイトは上書きしてしまうので、ここからは自由に形を変えて大丈夫です。
ちなみに、服の形によってはここで比較的楽な選択肢を取ることもできます。
具体的には、隠れている部分の体自体を消してしまうという方法です。
ただし、その場合もウェイト転送に必要になるので体はこの段階では非表示に留めておきます。
今回はまず、ShrinkWrapをかけます。
これは、オブジェクトを別のオブジェクトの表面に張り付けるModifierです。
体のラインにぴったり合うような服に対して特に有効です。
ShrinkWrapをかけたい部分だけ先ほどのように別オブジェクトに分割しておきます。
(フリルの部分は独立させておきました)
また、Shrink(縮める)の名前の通り、体が服を貫通しているとうまくいきません。
なので、このオブジェクトのScaleを適当に調整して貫通部分をなくしておきます。
そのままだと肌と服がちょうど同じ位置になってめり込んでしまうので、
Offsetの値を調整して服が外側に来るようにします。
肩紐や脇のあたりがおかしいですが、このあとすぐ調整します。
ShrinkWrap右上の下向き>(カメラのすぐ右)から、Applyして形状を確定します。
肩紐はちょっと面倒な問題があり、裏側に貼ってあるポリゴンが貫通してしまっています。
そもそもShrinkWrapをかけない方がいいのかもしれません。
この問題は解説外で対応させてもらいます(本筋ではない部分が長くなるため)
さて、それではSculpt ModeのElastic Deformを使って貫通部分を直していきます。
これは、頂点を移動させるといい感じに周辺も調整してくれるという機能です。
また、左右対称に編集したいので、画像右上のX対称を有効にしておきます。
左右非対称の服の場合は別の編集がいるかもしれません。
貫通している部分の頂点を引っ張っていい感じにします。
また、首の部分もおかしかったので同様に調節してみます。
ちなみに、これをやる前にApply Transformしておいた方がいいみたいです
調整できたら、それぞれのオブジェクトにApply Transformして体のArmatureにもっていきます。
こんな感じ。
ウェイトを転送する
第一段階の仕上げとして、ウェイトを転送していきます。
体 > 服の順番に選択して、Weight PaintモードのWeights > Transfer Weightを行います。
元の服を残している場合はそちらからでもいいです。形状が似ている方にしましょう。
直後に表示されるボックスでSource LayersをBy Nameにします。
(これをしないと一部だけが適用されます)
これでだいたい仕上がってきたと思います。
Poseモードにして確認してみましょう。
とりあえず追従していればよしとします。
ついてこない場合はTransfer Weightsを失敗しているか、Armature Modifierの参照を失敗している気がします
微調整する
ここからは、望まないウェイトを消したり、貫通を減らしたりしていきます。
まずは、望まないウェイトを消します。
例えば、袖が指に追従してしまったり、襟が頭に追従してしまうことですね。
Vertex Groupのタブを開いて、消えてほしいウェイトに対応するグループを右上の – マークで消します。
私はHeadより先(HairやEyes含め)と指のウェイトは消していっています
その後は貫通を消していくのですが、ここの作業は底なしです。
どんなポーズでも破綻しないというのはかなり厳しいので、妥協点は探った方がいいかもしれません。
私は最低限、腕を上げたときの脇の貫通などは消しておきたいと思いました。
Elastic Deformで頂点の位置を変えてTransferをやり直すなど、なんやかんやします。
そこが大切なのにというのは承知の上です。ただ、私も共有できるほどの明文化されたノウハウがないです。
本当にモデリングの範疇になってしまうので、ここは割愛します。
あと、Unity持っていったらだめじゃんはよくあるので行き来しながら作業しましょう。沼です
VRChat持っていったらだめじゃんもよくあります。沼です
形になったらUnityに持っていって設定をしていきます。
Humanoidとしてインポートしないとうまく動かないので気を付けましょう。
揺れ物の設定は(コライダーはともかく)元の服からコピーすると吉です。
とりあえずモデルを作る作業はここでひと段落です。
お疲れ様でした。