【VRChat】Phys Boneでスカートの突き抜け対策をする方法【3Dキャラモデル制作21】

3DCG
スポンサーリンク

はじめに

今回は、Blenderでキャラモデルにウエイトを塗って動かす方法を解説します。
第20回の続きになります。

https://signyamo.blog/3dcg_costume/

このようなキャラと衣装モデルがある状態で進めます。

さらに、Unity上で揺れ物ボーンのPyhs Boneの動きを確認済みの状態でスタートします。

コライダーを脚に入れるだけはNG

Colliderは衝突判定です。
これはボーンに入れることができます。

試しに、太もものボーンに衝突判定を入れます。(Shape Type = Capsule)

そして、スカートのPhys Boneに衝突判定を認識させます。
Collsion → Collidersの Sizeを2に変更。
ここに、コライダーを設定した脚のボーンをドラッグ&ドロップ。

これで、脚の衝突判定がスカートに当たるようになりました。

…が、 この方法は “当たる” のですが突き抜けます。

なので、コライダーを脚に入れるだけはNGです。

Inside Boundsを使った突き抜け対策

Phys Bone Colliderには「Insice Bounds」という設定項目があります。
こちらを有効化。

この状態で、コライダーの大きさを変えます。(Radiusで変更)
すると、このコライダーの中にボーンが入るように動きます。

コライダーをボーンの動きを制御する “檻” として使うイメージ。

このコライダーをスカート前方に設定。

形は「Radius」「Hight」「Position」「Rotation」などを使って調整。

この、コライダーの端を使って衝突させます。

すると、コライダーが途中で途絶えることが無くなります。
結果スカートの突き抜けが無くなります。

ただ、今の設定では全てのボーンのコライダーが1つのまとまってしまいます。

そこで、個別にInside Boundsを設定していきます。

個別にInside Boundsを割り当てる方法

Phys Bone設定を個別にコピー

RootボーンのPhys Bone設定を解除。
スカートの親ボーンに1つずつPhys Boneを入れます。

Copy ComponentでRootの値をコピー。

スカート1つの親ボーンを選択。

Paste Component As Newを実行。

Root Transformを、スカート1つの親ボーンに設定し直します。

CollidersのSizeでスカートに設定したいコライダーの数を指定。
・対称軸にあるボーンは2個(右脚+左脚の2つ)
・右か左に偏ってる物は1個(右脚か左脚のどちらか1つ)

これで、Phys Bone設定を個別にコピーが完了です。

コライダーの設定方法

コライダーを入れた既存のボーンをそのまま設定する事はできません。
せっかく分けたPhys Boneに1つのコライダーを設定すると意味が無くなります。

【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」を選択。

すると空情報の「Game Object」が生成されます。
これに、コライダーの判定を入れます。

スカート前方のPhys Bone用に使うなら、コライダーは前方に端が当たるように設定。

ボーンが対称軸上にある場合は、GameObjectを複製。
反対側の足のボーンにも入れます。

この「GameObject」をスカートのPhys Boneにある、コライダーの有効化設定に読み込ませます。

すると、下図のようになります。

この状態で足を動かすと、前のボーンだけ突き抜けなくなります。
横の方はまだコライダーが設定されてないので突き抜けます。

なので、他のボーンにも同じ仕組みのコライダーを入れます。

そして、ここの突き抜けを治します。

やる事は同じです。
GameObjectを作り、2つ目のボーンに合わせた形に配置。
2つ目の親ボーンにコライダーを読み込ませて有効化。

B.001.Lのボーンは対称軸には無いです。
なので、左側の1つだけに衝突判定を入れました。

これで突き抜けが治ります。

これをスカート全体に行えば、突き抜け対策が完了です。

この設定でも突き抜ける場合は、コライダーの形、大きさ、配置のいずれかが悪いです。
挙動を見ながら人力で調整してください。

あとはこれを用意したスカートのボーン分で行えば、突き抜け対策が完了です。

文字通り “骨” の折れる作業。

以上がコライダーの設定方法です。

Inside Boundsを綺麗に設定するコツ

Inside Boundsの端を太ももの形に添わせます。

すると、より太ももに当たってるような挙動になります。

動かない場合の「ボーンのロール」調整

ボーンには「ロール」と呼ばれる向きの情報があります。
基本、これが問題になる事はありません。
が、このようなシュミレーション系の場合、問題になる事があります。

ロールはBlenderでボーンを選択。
オブジェクトデータープロパティ → ビューポート表示 → 「座標軸」にチェックで確認できます。

このような設定は、あまりスカートに良くないようです。
こちらの記事を参考にしました。
私はこのエラーを引いたことが無いので、詳しくは分からないです。

後から気づきました。
3Dカーソルを使わなくてもShift+N →
「グローバル – Z(マイナスZ)に設定できることがあります。

そこで、ビューポートオーバーレイ → 「3Dカーソル」を有効化。
3Dカーソルを表示させます。

ボーンを選択 → Tabキーで編集モード。
スカートに関係するボーンだけLキーのリンク選択。
アーマチュア → スナップ → 「カーソル → 選択物」を実行。
3Dカーソルをボーンの平均位置に移動。

平均位置なので、下図のような場所になります。

Shift+N → 「カーソル」を実行。
すると、ロールの向きが変わります。

このような向きが、シュミレーション的には良いようです。

あとは、スカート以外でも気になるロールがあれば治します。
Shift+Nを使ってグローバルX~Z軸などを使い修正。

以上が、綺麗に動かない場合のロールの調整です。

スカートのボーンを減らす

スカートはボーンがいっぱいあると大変です。
なので、ボーンを減らします。

この記事の続きなので、スカートの突き抜け対策だけしたい方はこれ以降読まなくて大丈夫です。

https://signyamo.blog/3dcg_costume/

ボーンが12個の場合、必要コライダーは12個。
さらに、対称軸に重なったものを入れると… 最大+2個の14個。

これは少し重たいように感じます。
ボーンを8個まで減らします。

UV展開やテクスチャ作業前なので、構造を自由に変える事ができます。
ボーンもメッシュも必要であれば変えれます。
これが、先に動きを作るメリットです。

構造を変える計画をする

ビューポートオーバーレイ → 「統計」にチェック。
Alt+クリックでスカートの面を選択。
面の数を確認。(ここでは24個)

面の数を整数で割れる値を探します。
24をここでは「6」で割ります。

この4はボーン数、6が間に入れる面の数です。

左右対称図形なので、下図のようにボーン数は「8個」になります。

さらに、対称軸にボーンがあると衝突判定が2つ必要な事が分かりました。
なので対象軸の上にボーンが来ないようにします。

やり方は、面の数/2の値でズラすだけです。
これで対称軸上にボーンが乗らなくなります。

以上が、構造を変える計画です。

ボーンの数を減らす

不要なボーンをLキーでリンク選択。
Xキー → 「ボーン」削除。
12個あるので、4つ消しました。

オプジェクトデータプロパティ → 頂点グループを確認。
既存のスカートに関する頂点グループを選択して削除。

Skirtの「Root」以外の頂点グループを消しました。
これでスカート関係のウエイト情報が消えました。

Xミラーとスナップを使い、ボーンの位置を調整し直します。

位置は先ほど計算で出した場所です。

スナップ機能を使い、下図のように配置しました。

Xミラー外し、片側のボーンを削除。

残ったボーンの名前を調整。
名前の最後に.Lか.Rの名前を入れます。(.Lはキャラクターから見て左側)

下図のように名前を変えました。

アーマチュア → 「対象化」を選択。

これで、ボーンの数を減らす処理が完了です。

スカートのウエイトを塗り直す

Tabキーで編集モード。
スカートのメッシュを選択。
Pキー → 「選択」で分離。

分離したスカートの頂点グループを削除。
オプジェクトデータプロパティ → 頂点グループ → 下矢印 → 「全グループを削除」

Lキーでスカートに関するボーンをリンク選択。
Pキーで分離。

Shift+クリックで「スカートのメッシュ」 → 「スカートのボーン」の順に選択。
Ctrl+P → 「自動ウエイトで」を実行。

Tabキーでオプジェクトモードに切り替え。
Shift+クリックで「スカートのメッシュ」 → 「服のメッシュ」を選択。
Ctrl+Jで統合。

Tabキーで編集モードに切り替え。
Aキーで全選択。
Mキー → 「距離で」頂点を溶解。

次にShift+クリックで「スカートのボーン」 → 「体のボーン」の順に選択。
Ctrl+Jで統合。

ボーンを選択 → Tabキーで編集モード。
Bキーの矩形選択で8個のスカート親ボーンを選択。
Shift+クリックでスカートのルートボーンを選択。
Ctrl+P → 「オフセットを保持」で親子の関連付け。

スカートのボーンを選択。
Ctrl+Tab → 6キーで編集モード。
スカートと服のつなぎ目で、スカート下側の面を2~3層ループ選択。

Ctrl+Tab → 7キーでウエイトペイントモード。
面マスクを有効化。
ウエイト → 「スムーズ」を実行。

反復を10などに設定。
ウエイト転送した体の部分と、自動ウエイトで塗ったスカートのウエイトを馴染ませます。

これで、スカートのウエイト塗り直しが完了です。

Unityで確認

Unityに戻ります。
ボーン数が8個になりました。

これならまだ設定しようと思えます。
8個のボーンにPhysボーンを割り当て。

ボーンの中にGame Objectを作り、コライダーを生成。
(Hierarchyでボーンを右クリック → Create → Empty)

コライダーを「ボーンの向き」+「太ももの形」に合わせます。
これを8個のボーン全てで行えば突き抜け対策が完了です。

前側のプレビュー用に2つだけ設定しました。
この状態でPlayモード。
動作を確認。

問題が無さそうであれば、突き抜け対策が完了です。

ボーンの中にEmptyを作らないといけないので…
8ボーン全ての突き抜け対策は一番最後の仕上げで行う事にしました。

(万が一、モデルのボーン構造を変更した時の対策)

おまけ:「Cloth」という選択肢

VRChatのスカート表現は「Cloth」も使えます。

◆Clorhのメリット / デメリット

【メリット】
・動きが綺麗
・衝突判定の設定が楽
・膝より長いスカート、ロングスカート向け

【デメリット】
・やや重い
・PhysBoneのように、他の人から掴めない
・膝より短いスカート、ショートスカート向け

私は解説しませんが…
使ってみたい方はこちら等を見て設定ください。

理想のスカート表現を求めて|ろじっく
Clothコンポーネントで実装したVRChatアバター向けのスカートをときどきほめてもらえて嬉しいのでちょっとした解説を書きました。全体的にアバター改変そこそこわかる人向けです。ある程度慣れてないと再現できないかも。 ※ 本記事で言及している変更は筆者が勝手に加えたものです。Clothコンポーネントへの置き換えなど本...

ロングスカートを作る機会があれば解説します。
今は… 目の前の事で手一杯なのでごめんなさい。

まとめ

今回はPhys Boneを使ってスカートの突き抜け対策をする方法を紹介しました。

・突き抜け対策は、脚に普通のコライダーを入れるだけではできない
・Inside Boundsを使い、スカート1つ1つに移動範囲を設定すると突き抜け対策ができる
・スカートのPyhs BoneはRootで全体の様子を見る → 突き抜け対策で個別に分ける
・Phys Boneを個別に分ける際は、Copy Componentを使う
・ボーン数が多い場合は、Blenderでボーンを減らすことを検討する
・長いスカートの場合は「Cloth」を使うという選択肢がある

↓次回↓

また、ほかにも3DCGについて解説してます。

ぜひ、こちらもご覧ください。

コメント

タイトルとURLをコピーしました