はじめに
今回は、Blenderでキャラモデルにウエイトを塗って動かす方法を解説します。
第20回の続きになります。
![](https://signyamo.blog/wp-content/uploads/2022/06/a11b4bb3ba448d1fa402ac3dc62cc91f-3.jpg)
このようなキャラと衣装モデルがある状態で進めます。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-01-12.jpg)
さらに、Unity上で揺れ物ボーンのPyhs Boneの動きを確認済みの状態でスタートします。
![](https://signyamo.blog/wp-content/uploads/2023/08/gif-5-1.gif)
コライダーを脚に入れるだけはNG
Colliderは衝突判定です。
これはボーンに入れることができます。
試しに、太もものボーンに衝突判定を入れます。(Shape Type = Capsule)
![](https://signyamo.blog/wp-content/uploads/2023/08/image-02-13.jpg)
そして、スカートのPhys Boneに衝突判定を認識させます。
Collsion → Collidersの Sizeを2に変更。
ここに、コライダーを設定した脚のボーンをドラッグ&ドロップ。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-03-12.jpg)
これで、脚の衝突判定がスカートに当たるようになりました。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-04-12.jpg)
…が、 この方法は “当たる” のですが突き抜けます。
![](https://signyamo.blog/wp-content/uploads/2023/08/gif-1-7.gif)
なので、コライダーを脚に入れるだけはNGです。
Inside Boundsを使った突き抜け対策
Phys Bone Colliderには「Insice Bounds」という設定項目があります。
こちらを有効化。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-05-14.jpg)
この状態で、コライダーの大きさを変えます。(Radiusで変更)
すると、このコライダーの中にボーンが入るように動きます。
![](https://signyamo.blog/wp-content/uploads/2023/08/gif-2-4.gif)
![](https://signyamo.blog/wp-content/uploads/2023/02/pd0ogJ64_400x400-150x150.jpg)
コライダーをボーンの動きを制御する “檻” として使うイメージ。
このコライダーをスカート前方に設定。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-06-11.jpg)
形は「Radius」「Hight」「Position」「Rotation」などを使って調整。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-07-11.jpg)
この、コライダーの端を使って衝突させます。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-08-11.jpg)
すると、コライダーが途中で途絶えることが無くなります。
結果スカートの突き抜けが無くなります。
![](https://signyamo.blog/wp-content/uploads/2023/08/gif-4-3.gif)
ただ、今の設定では全てのボーンのコライダーが1つのまとまってしまいます。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-09-11.jpg)
そこで、個別にInside Boundsを設定していきます。
個別にInside Boundsを割り当てる方法
Phys Bone設定を個別にコピー
RootボーンのPhys Bone設定を解除。
スカートの親ボーンに1つずつPhys Boneを入れます。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-10-11.jpg)
Copy ComponentでRootの値をコピー。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-11-11.jpg)
スカート1つの親ボーンを選択。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-12-12.jpg)
Paste Component As Newを実行。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-13-11.jpg)
Root Transformを、スカート1つの親ボーンに設定し直します。
![](https://signyamo.blog/wp-content/uploads/2023/08/re-01-3.jpg)
CollidersのSizeでスカートに設定したいコライダーの数を指定。
・対称軸にあるボーンは2個(右脚+左脚の2つ)
・右か左に偏ってる物は1個(右脚か左脚のどちらか1つ)
![](https://signyamo.blog/wp-content/uploads/2023/08/image-15-11.jpg)
これで、Phys Bone設定を個別にコピーが完了です。
コライダーの設定方法
コライダーを入れた既存のボーンをそのまま設定する事はできません。
せっかく分けたPhys Boneに1つのコライダーを設定すると意味が無くなります。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-16-10.jpg)
【NG例】
◆Phys Boneを12個の親に設定(1個) + コライダー1つ
→ 12同じ衝突判定が入って使えない
◆Phys Boneを分けて12個 + コライダー1つ
→ 12同じ衝突判定が入って使えない
ーーーーー
【今回設定したい事】
◆12個のPhys Bone +12個のコライダー
→ それぞれのPhys Boneに対応した、12このInside Boundsコラライダーの端を当てて突き抜け対策する
そこで、脚のボーンの中に「空の情報」を作ります。
UpperLeg.Lを右クリック → 「Create Empty」を選択。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-17-11.jpg)
すると空情報の「Game Object」が生成されます。
これに、コライダーの判定を入れます。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-18-10.jpg)
スカート前方のPhys Bone用に使うなら、コライダーは前方に端が当たるように設定。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-19-10.jpg)
ボーンが対称軸上にある場合は、GameObjectを複製。
反対側の足のボーンにも入れます。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-20-10.jpg)
この「GameObject」をスカートのPhys Boneにある、コライダーの有効化設定に読み込ませます。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-21-10.jpg)
すると、下図のようになります。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-22-10.jpg)
この状態で足を動かすと、前のボーンだけ突き抜けなくなります。
横の方はまだコライダーが設定されてないので突き抜けます。
![](https://signyamo.blog/wp-content/uploads/2023/08/gif-5-2.gif)
なので、他のボーンにも同じ仕組みのコライダーを入れます。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-24-10.jpg)
そして、ここの突き抜けを治します。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-23-11.jpg)
やる事は同じです。
GameObjectを作り、2つ目のボーンに合わせた形に配置。
2つ目の親ボーンにコライダーを読み込ませて有効化。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-25-10.jpg)
B.001.Lのボーンは対称軸には無いです。
なので、左側の1つだけに衝突判定を入れました。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-26-11.jpg)
これで突き抜けが治ります。
![](https://signyamo.blog/wp-content/uploads/2023/08/gif-6-1.gif)
これをスカート全体に行えば、突き抜け対策が完了です。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-27-11.jpg)
この設定でも突き抜ける場合は、コライダーの形、大きさ、配置のいずれかが悪いです。
挙動を見ながら人力で調整してください。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-28-9.jpg)
あとはこれを用意したスカートのボーン分で行えば、突き抜け対策が完了です。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-31-10.jpg)
![](https://signyamo.blog/wp-content/uploads/2023/02/pd0ogJ64_400x400-150x150.jpg)
文字通り “骨” の折れる作業。
以上がコライダーの設定方法です。
Inside Boundsを綺麗に設定するコツ
Inside Boundsの端を太ももの形に添わせます。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-29-10.jpg)
すると、より太ももに当たってるような挙動になります。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-30-10.jpg)
動かない場合の「ボーンのロール」調整
ボーンには「ロール」と呼ばれる向きの情報があります。
基本、これが問題になる事はありません。
が、このようなシュミレーション系の場合、問題になる事があります。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-38-11.jpg)
ロールはBlenderでボーンを選択。
オブジェクトデータープロパティ → ビューポート表示 → 「座標軸」にチェックで確認できます。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-32-12.jpg)
このような設定は、あまりスカートに良くないようです。
→ こちらの記事を参考にしました。
私はこのエラーを引いたことが無いので、詳しくは分からないです。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-33-10.jpg)
![](https://signyamo.blog/wp-content/uploads/2023/02/pd0ogJ64_400x400-150x150.jpg)
後から気づきました。
3Dカーソルを使わなくてもShift+N →
「グローバル – Z(マイナスZ)」に設定できることがあります。
そこで、ビューポートオーバーレイ → 「3Dカーソル」を有効化。
3Dカーソルを表示させます。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-34-11.jpg)
ボーンを選択 → Tabキーで編集モード。
スカートに関係するボーンだけLキーのリンク選択。
アーマチュア → スナップ → 「カーソル → 選択物」を実行。
3Dカーソルをボーンの平均位置に移動。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-35-10.jpg)
平均位置なので、下図のような場所になります。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-36-10.jpg)
Shift+N → 「カーソル」を実行。
すると、ロールの向きが変わります。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-37-10.jpg)
このような向きが、シュミレーション的には良いようです。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-38-10.jpg)
あとは、スカート以外でも気になるロールがあれば治します。
Shift+Nを使ってグローバルX~Z軸などを使い修正。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-39-11.jpg)
以上が、綺麗に動かない場合のロールの調整です。
スカートのボーンを減らす
スカートはボーンがいっぱいあると大変です。
なので、ボーンを減らします。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-41-10.jpg)
この記事の続きなので、スカートの突き抜け対策だけしたい方はこれ以降読まなくて大丈夫です。
![](https://signyamo.blog/wp-content/uploads/2022/06/a11b4bb3ba448d1fa402ac3dc62cc91f-3.jpg)
ボーンが12個の場合、必要コライダーは12個。
さらに、対称軸に重なったものを入れると… 最大+2個の14個。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-40-10.jpg)
これは少し重たいように感じます。
ボーンを8個まで減らします。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-41-10.jpg)
![](https://signyamo.blog/wp-content/uploads/2023/02/pd0ogJ64_400x400-150x150.jpg)
UV展開やテクスチャ作業前なので、構造を自由に変える事ができます。
ボーンもメッシュも必要であれば変えれます。
これが、先に動きを作るメリットです。
構造を変える計画をする
ビューポートオーバーレイ → 「統計」にチェック。
Alt+クリックでスカートの面を選択。
面の数を確認。(ここでは24個)
![](https://signyamo.blog/wp-content/uploads/2023/08/image-42-11.jpg)
面の数を整数で割れる値を探します。
24をここでは「6」で割ります。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-43-10.jpg)
この4はボーン数、6が間に入れる面の数です。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-44-10.jpg)
左右対称図形なので、下図のようにボーン数は「8個」になります。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-45-12.jpg)
さらに、対称軸にボーンがあると衝突判定が2つ必要な事が分かりました。
なので対象軸の上にボーンが来ないようにします。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-46-10.jpg)
やり方は、面の数/2の値でズラすだけです。
これで対称軸上にボーンが乗らなくなります。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-47-11.jpg)
以上が、構造を変える計画です。
ボーンの数を減らす
不要なボーンをLキーでリンク選択。
Xキー → 「ボーン」削除。
12個あるので、4つ消しました。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-48-10.jpg)
オプジェクトデータプロパティ → 頂点グループを確認。
既存のスカートに関する頂点グループを選択して削除。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-49-10.jpg)
Skirtの「Root」以外の頂点グループを消しました。
これでスカート関係のウエイト情報が消えました。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-50-10.jpg)
Xミラーとスナップを使い、ボーンの位置を調整し直します。
![](https://signyamo.blog/wp-content/uploads/2023/08/re-02-2.jpg)
位置は先ほど計算で出した場所です。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-53-10.jpg)
スナップ機能を使い、下図のように配置しました。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-52-10.jpg)
Xミラー外し、片側のボーンを削除。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-54-10.jpg)
残ったボーンの名前を調整。
名前の最後に.Lか.Rの名前を入れます。(.Lはキャラクターから見て左側)
![](https://signyamo.blog/wp-content/uploads/2023/08/image-55-10.jpg)
下図のように名前を変えました。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-56-10.jpg)
アーマチュア → 「対象化」を選択。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-57-11.jpg)
これで、ボーンの数を減らす処理が完了です。
スカートのウエイトを塗り直す
Tabキーで編集モード。
スカートのメッシュを選択。
Pキー → 「選択」で分離。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-58-10.jpg)
分離したスカートの頂点グループを削除。
オプジェクトデータプロパティ → 頂点グループ → 下矢印 → 「全グループを削除」
![](https://signyamo.blog/wp-content/uploads/2023/08/image-59-11.jpg)
Lキーでスカートに関するボーンをリンク選択。
Pキーで分離。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-60-10.jpg)
Shift+クリックで「スカートのメッシュ」 → 「スカートのボーン」の順に選択。
Ctrl+P → 「自動ウエイトで」を実行。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-61-10.jpg)
Tabキーでオプジェクトモードに切り替え。
Shift+クリックで「スカートのメッシュ」 → 「服のメッシュ」を選択。
Ctrl+Jで統合。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-62-11.jpg)
Tabキーで編集モードに切り替え。
Aキーで全選択。
Mキー → 「距離で」頂点を溶解。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-63-11.jpg)
次にShift+クリックで「スカートのボーン」 → 「体のボーン」の順に選択。
Ctrl+Jで統合。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-64-10.jpg)
ボーンを選択 → Tabキーで編集モード。
Bキーの矩形選択で8個のスカート親ボーンを選択。
Shift+クリックでスカートのルートボーンを選択。
Ctrl+P → 「オフセットを保持」で親子の関連付け。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-65-10.jpg)
スカートのボーンを選択。
Ctrl+Tab → 6キーで編集モード。
スカートと服のつなぎ目で、スカート下側の面を2~3層ループ選択。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-66-10.jpg)
Ctrl+Tab → 7キーでウエイトペイントモード。
面マスクを有効化。
ウエイト → 「スムーズ」を実行。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-67-10.jpg)
反復を10などに設定。
ウエイト転送した体の部分と、自動ウエイトで塗ったスカートのウエイトを馴染ませます。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-68-11.jpg)
これで、スカートのウエイト塗り直しが完了です。
Unityで確認
Unityに戻ります。
ボーン数が8個になりました。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-69-11.jpg)
これならまだ設定しようと思えます。
8個のボーンにPhysボーンを割り当て。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-70-11.jpg)
ボーンの中にGame Objectを作り、コライダーを生成。
(Hierarchyでボーンを右クリック → Create → Empty)
![](https://signyamo.blog/wp-content/uploads/2023/08/image-18-10.jpg)
コライダーを「ボーンの向き」+「太ももの形」に合わせます。
これを8個のボーン全てで行えば突き抜け対策が完了です。
![](https://signyamo.blog/wp-content/uploads/2023/08/image-71-11.jpg)
前側のプレビュー用に2つだけ設定しました。
この状態でPlayモード。
動作を確認。
![](https://signyamo.blog/wp-content/uploads/2023/08/gif-7-1.gif)
問題が無さそうであれば、突き抜け対策が完了です。
![](https://signyamo.blog/wp-content/uploads/2023/02/pd0ogJ64_400x400-150x150.jpg)
ボーンの中にEmptyを作らないといけないので…
8ボーン全ての突き抜け対策は一番最後の仕上げで行う事にしました。
(万が一、モデルのボーン構造を変更した時の対策)
おまけ:「Cloth」という選択肢
VRChatのスカート表現は「Cloth」も使えます。
◆Clorhのメリット / デメリット
【メリット】
・動きが綺麗
・衝突判定の設定が楽
・膝より長いスカート、ロングスカート向け
【デメリット】
・やや重い
・PhysBoneのように、他の人から掴めない
・膝より短いスカート、ショートスカート向け
私は解説しませんが…
使ってみたい方はこちら等を見て設定ください。
![](https://signyamo.blog/wp-content/uploads/cocoon-resources/blog-card-cache/5b5b4e71020ec375d91338640ab51aa8.jpeg)
![](https://signyamo.blog/wp-content/uploads/2023/02/pd0ogJ64_400x400-150x150.jpg)
ロングスカートを作る機会があれば解説します。
今は… 目の前の事で手一杯なのでごめんなさい。
まとめ
今回はPhys Boneを使ってスカートの突き抜け対策をする方法を紹介しました。
・突き抜け対策は、脚に普通のコライダーを入れるだけではできない
・Inside Boundsを使い、スカート1つ1つに移動範囲を設定すると突き抜け対策ができる
・スカートのPyhs BoneはRootで全体の様子を見る → 突き抜け対策で個別に分ける
・Phys Boneを個別に分ける際は、Copy Componentを使う
・ボーン数が多い場合は、Blenderでボーンを減らすことを検討する
・長いスカートの場合は「Cloth」を使うという選択肢がある
↓次回↓
また、ほかにも3DCGについて解説してます。
ぜひ、こちらもご覧ください。
コメント