トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

非人型にBoneをいれてUnityでHumanoidで動かしたかった【Unity】

人型ではないモデルにBoneを入れてUnityでHumanoidにしたい

shop-0761.hatenablog.com

Mixamoはダメだった

BlenderでBone入れ

BlenderでBoneを追加している

nn-hokuson.hatenablog.com

ボーン

アドオンのRigifyを入れて

f:id:bibinbaleo:20210302113625p:plain

Shift+AでアーマチュアからBone追加。Human(Meta-Rig)だと複雑すぎるので基本>BasicHumanにした

f:id:bibinbaleo:20210302113525p:plain

こんなBone

f:id:bibinbaleo:20210302113530p:plain

Sprineが多すぎるので1つ消した。本当はもっとシンプルでいいんだけど、どれくらいまで消していいかよく分からなかった

メッシュと関連付け

あとはメッシュ>Bone選んでペアレント>自動ウェイトでできる・・・

blog.yumineko.com

けどボーンを動かすとメッシュが変形してしまう。まあウエイトとはそういうものだけど・・・変形させずに角度だけ動かしたい

f:id:bibinbaleo:20210304222128p:plain

あとメッシュが体と頭が親子関係になっているものにBoneを入れたいんだけど、親子関係を保ったままいい感じに動かすにはどうしたらいいのか。親が動いたら子も追従して欲しい

f:id:bibinbaleo:20210304222131p:plain



以前受けたBlenderのUdemyで服を体に追従させるときの方法があったから、それをやったけどうまくいかない

ウェイトを使わずにカクカク動かしたい。

チャイルドコンストレイント(だめ)

bookyakuno.com

チャイルドコンストレイントやったら、Blenderではいい感じに動いた。

Sprine5を頭に紐づけて、Sprineを体に紐づけた

でもUnityに読み込まれないのでダメ

(追記)ボーンごとにウエイト計算

今は全てのボーンにメッシュが影響を受けているからややこしい

首のボーンからのみ頭を動かすようにしたい

こちらの方法でやったら、ボーンごとにメッシュの設定できた。

reflectorange.blog.jp

ボーン>メッシュで選んでウエイトモードに行って、Ctrlを押しながらボーンを選べばいい

あとウエイト>全てを正規化にしたらなんかいい感じになった

f:id:bibinbaleo:20210304223232p:plain

honopun.hatenablog.com

いい感じに追従するようになった

f:id:bibinbaleo:20210304223237p:plain

あと編集モードで頂点を選んで、ボーンのウエイトを個別に変えられる。いらないのは×で消す。

他の頂点まとめてこの値を変えるときは、頂点を選んだ後、一つの頂点だけ2回押す。するとその頂点がアクティブになって、その値が他のに反映される

f:id:bibinbaleo:20210304224918p:plain

できた!立方体は動かなくなった!

f:id:bibinbaleo:20210304224903p:plain

でもこれだとSpine(ボーンの一番親)を動かしてもついてこなくなるので、Spineだけウエイト1にした。

と思ったら何故かarmも1になってた・・・修正した

f:id:bibinbaleo:20210304230222p:plain


Unityへの書き出し

普通にfbxに書き出したけど、Boneの位置や角度がおかしかった

こちらの設定やった

3dcg-school.pro

変わったのかは分からない・・・

Unityで設定(Configure)

Humanoidにする

f:id:bibinbaleo:20210302114444p:plain

Configureを見る

f:id:bibinbaleo:20210302114331p:plain

Configureはうまくいってても、SceneビューでBoneの位置がBlenderで設定したものと違う。

PoseでResetすると正しくなるけど、

f:id:bibinbaleo:20210302114535p:plain

腕のないモデルなので腕周りが赤くなる

f:id:bibinbaleo:20210302114736p:plain

このままでも進める。

問題1:メッシュとBoneが紐づいていない

チャイルドコンストレイントで紐づけたメッシュとBoneがUnityだと紐づかない

そういうものなのだろうか

そういうものらしい

 一応ImportConstrainという設定はあった。でもだめだったっぽい

f:id:bibinbaleo:20210302121204p:plain

しょうがないので、Unity上で直接Sprine4の下にHeadメッシュを置いた

もしくはAnimationRiggingのコンストレインを使って手動で設定してもよさそう

docs.unity3d.com

(追記)解決

追記したボーンごとの計算でちゃんとウエイトつけて解決した

f:id:bibinbaleo:20210304230210p:plain

問題2:Animation入れると沈む

Animatorを設置していない状態だと、Sprine4などBoneは正しく頭の位置にある。

Boneの親のmetarigのTransform

f:id:bibinbaleo:20210302121639p:plain
なのにUnity-chanAnimationのWaitを再生したら、全体的に沈む

f:id:bibinbaleo:20210302121636p:plain

 

 

最後に

今回はAnimationさせたかったというよりは、Animator.GetBoneTransform.Headしたかっただけなので、あまり問題なさそう

bibinbaleo.hatenablog.com

でもせっかくだからちゃんとAnimationさせたいな

teratail.com

あとBlenderでBone入れるとき手動で入れたほうがいいのかな〜