【Blender/Unity/VRChat】二重関節とかお尻とか

【Blender/Unity/VRChat】二重関節とかお尻とか

アクセサリーのボーンとウェイト

これのボーンとウェイト、どうする?

スカートと同じデータ転送を試す

スカートと同じ素体とスカートのデータ転送モディファイアを付けるが

埋まってしまう

新たにデータ転送する

アクセサリーを覆うようなオブジェクトを作り

アクセサリーへデータ転送

ボーンは

動かしてみると

ヨシ!

膝の二重関節

膝がこんなんなるので、二重関節なるものを設定してみようと思う。

まず足が正面から見てあまりにもハの字過ぎたので簡易素体のメッシュを修正し、Kneeを追加。

ボーンはUpperLeg→Knee→LowerLegの順に配置。接続した方がウェイトの確認がしやすい。

今度は修正した足部分のメッシュをコピーして本体にくっつけ、足のボーンのX軸を全て同じ数値にし、Rollも0に修正。

調べた沢山の記事の中でボーンは肘と膝以外真っすぐにすると書いてあったからだ。

本当はY軸も真っすぐにした方がいいようなのだけれど。

しかも今回はVRChatに持っていくと足がぐねっていたので、これで解決することを願う。

この後VRChatにアップロードしてみると、ほぼ直っていた!

足以外はボーンの位置をずらすとウェイトがおかしくなったので、今回は足部分だけにした。次回からは真っすぐにしようと思う。

こちらも簡易素体と同じようにボーンを配置。

接続はしなくても大丈夫なので、必要に応じて接続したりしなかったり。

そしてKneeとLowerLeg、両方とも親はUpperLegに

簡易素体にCtrl P > With Automatic Weightsで自動ウェイトをかけなおす

ポーズモードにし、本体のKneeボーンにCopy Rotationコンストレイントを追加

LowerLegボーンにも別のコンストレイント、Copy Locationを追加。

曲げてみる

ボーンを元に戻すとき挙動がおかしくなるが、これはDependency Cyclesというようだ。

一度で戻らなくても、何度かClear Transform(「Alt R」や「Alt G」など)を繰り返すと戻る。

ここからボーンの位置・長さや、メッシュの割、簡易素体のウェイトなどを調整。

最終的にKneeはInfluenceは0.4に。

ヨシ!

ヒップを丸くする

ヒップを丸くする方法は、下記記事で学習。

だーしゅ様、ありがとうございます<(_ _)>

簡易素体の左右にHip.Cという名前を付けたボーンを追加し、自動ウェイト。

UpperLegを曲げ、ウェイトをみながらHip.Cの位置の調整と自動ウェイトを繰り返す。

本体にもUpperLegのヘッドからEキーでY軸方向にボーンを生やし、同じ名前を付ける

作ったボーンにCopy Rotationモディファイアを設定

曲げてみる

本体でウェイトを引きたい頂点を確認し、簡易素体でVertexGroupを作って登録。

3割くらい減らしたかったので、ウェイトは0.3にする。

VertexWeightMixモディファイアでHip.Cから頂点ウェイトを引く

本体の変形具合を確認。ここでウェイトの減り具合を見て、思っていたのと違ったら簡易素体のVertexGroupのウェイト量を変更する

今度は足したいなーって頂点と割合を確認。

簡易素体で今度は足したい頂点用のVertexGroupを作って0.2のウェイト量で登録

VertexWeightMixモディファイアでHip.Cから頂点ウェイトを足す

一度オブジェクトモードにし、本体のコレクションに移動して編集モードにすれば、本体の変化を確認しながらウェイト量を変更できる。

ウェイト量が0.2では足りなかったようなので0.4に増やす

これを繰り返しつつ、時には簡易素体のボーンを減らしたり増やしたり、位置や大きさを変えたりしながら地道にウェイト調整。

ヨシ!

手首の破綻

手首は本体の方に直接LowerTwistボーンを作ってウェイトを塗った方が上手くいった。

今まで通りの簡易素体にボーンを追加してウェイト転送する方法がなぜ上手くいかないのか、仕組みはよくわからない。

LowerArmを同じ位置に複製し、親はLowerArm。名前はLowerTwistに。

Copy Rotationを追加

Handをねじった状態でLowerTwistにグラデーションを使ってウェイトを塗っていく

とりあえず簡易素体のボーンの位置を変えて自動ウェイトしたり、本体のメッシュの形を変えてみたりする。

簡易素体にVertexWeightMixモディファイアを使って微調整してみたり。

そしてインフルエンスを0.5から1へ変更。しかしこれ以上ねじるとアウト。

これくらいの細りならギリ許されるか…

わかりやすいようにLowerTwistを短くしておく。

この後、しばらくしてから手の指のウェイトが全て消えていることが判明。

手の部分は別のところからアペンドしたウェイト付きのを体にくっつけたものである。

本体にLowerTwistのウェイトを直接塗ったことで手や指の部分に影響を及ぼしてしまっているのかとか、簡易素体の手の部分のウェイトをVertexWeightMixモディファイアでSubtractしているのにも関わらずVertexWeightMixモディファイアを使って微調整したことが悪かったのかとか、他の原因なのかとか色々考えてみるがわからない。

しかし、簡易素体の方の指部分のVertexGroups(ThumbIntermediateなど)を全て削除するとウェイトが元に戻った。

肘の破綻

ね~(´・ω・`) 

肘もひざのように簡易素体にElbowを追加して自動ウィエトしても上手くいかなかったので、こちらも本体の方にElbowボーンを作ってウェイトを塗る手段をとった。

本体のLowerArmを選択し、同じ位置に複製。左右ともElbowとリネーム。

ElbowにCopyRotationをつける

LowerArmを曲げて、Elbowにウェイトを塗っていく

Elbow2の失敗

もう1つボーンを追加。

これ(Elbow2)は失敗だったので加えない方がいい

UpperArmのElbowに近い部分のお肉を盛り上がらせるためにElbow2を作り、Copy Rotationを付ける

LowerArmを曲げたときにX軸の逆回転で少しだけ回転してお肉をむにっと盛り上がらせる。

この設定後わかったこと

Unityでは逆回転設定が無いので、この時点でElbow2のRollを180度回転させておく必要があった。
だが結局失敗だったのでやらなくていい。

わかりやすいようにElbowも小さくしておく

ヨシ!

BustにもCopyRotation

これも失敗。やらない方がいい。

肩を上げたときに胸も少しだけ追従するようにしてみる

腕を捩った時は動かないようにY軸のチェックをオフに。

腕を上げたときにバストも動かしたければ、oyatsu009さんのX投稿を見る!

ボーンの間違いとローカル軸の確認

ここまできて、ボーンの間違いに気づく

Hipsボーンの向き逆!!!

簡易素体のHipsボーンを逆にして自動ウェイトし、本体の方も向きを逆にする

スカートも含め、ウェイトは特に問題は無かった。ふぅ。

そしてボーンのローカル軸も確認しておく

Miyoko様、ありがとうございます<(_ _)>

まずHipsの向きを逆にしたのでSpineやChestとRollを同じにし、Hip.CやUpperLegなどの親も空白になっているので設定しなおす。

上記記事のようにボーンを真っすぐにすると、さすがに曲がりかたがおかしくなってしまったので、HipsのヘッドだけUpperLegのヘッドよりちょっと高くした。

他のボーンもウェイトが崩れない程度に出来るだけ真っすぐぎみにした。

そしてTransformation Orientationをローカル、Transform Pivot Pointをそれぞれの原点に設定し「R X 90」

ヨシ!

エクスポート設定

FBXをエクスポートするときに、リーフボーンというものを追加する部分がある。

この部分のチェックを上記画像のようにオンにしエクスポートすると、全てのボーンの先端に「.end」(エンドボーンと言われているものか?)ボーンが自動で追加される。

全てのボーンに、だ。

それってデータ的に重たくなるのでは?

と思ったが、ボーンはテクスチャやブレンドシェイプほど容量が増える原因にはなっていないらしい。

MKB様、ありがとうございます<(_ _)>

またリーフボーンは「引っ張って伸ばす」などのギミックとかには必要なようだ。

疑問が晴れたところで「リーフボーン追加」にチェックを入れてエクスポート。

Unityでの設定など

Unityで確認してみると…

特に足が明らかにおかしい。

リグを確認すると

う~わー、色々ねじれている。

もしかしたら壊れちゃったのかもしれない…

FBX削除し、入れなおしてみると

どうやら直ったようだ。

霧島みけ様、ありがとうございます<(_ _)>

今までスケールとかボーンの位置とかいっぱい修正しちゃったからね、Unityくんもパニックになっちゃうよね。

しかし、リグやマテリアルなどの設定はやり直し。

手動でのボーンを動かし方と戻し方

コンストレイントを設定していく前に、Hierarchyのモデルにモーション(AnimatorのController)が設定されている場合はNoneにしておく。

モーションではなく、手動でボーンを動かしたいから。

【ここに後からURL付ける】モーションでの動かし方はコッチ↓

そしてコンストレイントを追加したら、まず再生ボタンを押し、(Sceneに戻って)ボーンを選択し動かしていく

===注意点=======

ここで再生ボタンを押さないでボーンを動かした場合、元のポーズに戻せなくなる場合がある。

そんなときは Hierarchyのモデルを選択 > Inspectorの Overrides > 元に戻したいボーンのTransform > Revert をクリックすれば元に戻る

=============

コンストレイント設定

★BustにRotation Constraintを追加すると、陥没

ResetしてもRemove Componentしても元に戻らなかったが、「Ctrl Z」を何度も何度も使うと戻る。

Freeze Rotation AxisのチェックをXだけにすると、何もしていないのに上下にブルブル震える始末。

何をしてもダメだったのでBustにRotation Constraintを使って動かすことは断念する

★ElbowにRotation Constraintを追加

★Elbow2にRotation Constraintを追加

Blenderと同じ値ではほとんど変化が見られなかったので、Weightは最大の1に設定。

それでもElbow2のRotation Constraintの効果はあった方が多少マシかな位。

そしてVRChatにアップロードしてみると、腕を曲げたときにおかしなねじりが発生してしまったためボツ。

Elbow2は削除すると画像のようなねじれは無くなった。

★LowerTwistにRotation Constraintを追加

★Hips.CにRotation Constraintを追加

★KneeにRotation Constraintを追加

★LowerLegにPosition Constraintを追加

ヨシ!

これでほぼウェイトを直すことはないだろう!

と思いたい。もうこんな苦行はイヤだ。

ー コメント ー

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