見出し画像

【VRC】blenderも、QUEST非対応のconstraintコンポーネントも使わずに、Unity上のみで人間ボディのアバターにメカ手脚を接続する方法

この記事は?

blenderも、QUEST非対応のconstraintコンポーネントも使わずに、Unityのみで、アバター衣装着せ替えの知識の範疇で人間ボディのアバターにメカ手脚を接続する方法を解説しています。超限定的な用途の記事です。

この操作の目的は?

本来、人間の足を取っ払って義足を付ける等、アバター本体とボーン構造(位置や長さ)が異なる手脚を付けることは難しいです。通常の着せ替えと同じ方法で異なる手足を付けると、主に関節部分で歪みが発生したりします。constraintコンポーネントを利用する方法は比較的簡単ですが、QUESTでは無効になってしまいます。でもこの方法であればblenderの知識がなくてもUnity上の操作のみで完結し、QUESTでも有効です。VRMにも出力できるね!(たぶん)

…ぶっちゃけ規格統一された手脚パーツが複数あるU10ちゃんぐらいにしか活用先が無いテクニックかもしれない。丁寧に位置合わせすれば非対応の義手義足パーツを本来の手足の代わりに繋いで動かすとかは出来ると思います!(ボーンの起点がズレてると動きがずれちゃうと思います。そこのところU10ちゃんは手足ボーンの起点が共通なので問題ない…)

具体的に何をするの?

ベースとするアバターのFBXに存在しているボーンと、付けたい手足のボーンを入れ替える処理をします。そのままだとアバターとして動かすことができませんが、それをFBXとして書き出すことでhumanoidリグのアバターとして認識させることができます。

問題点

UnityのFBX書き出しがイマイチなのか、書き出しの際に同一の座標にある別々の頂点が統合されてしまいます。なので主に布の服などでウエイトがおかしくなったような挙動になる場合があります。その際は諦めて、服は改めて着せるしかありません。

手順

※使用しているUnityのバージョンは2019.4.31f1です。

今回はU10素体版に迦陵頻伽のメカ脚とmk4Rのオプションであるメカ腕パーツを接続してみます。全て最新のデータを使用してください。以降、ベースにするアバターを「本体」、そこに追加する側を「パーツ」と呼びます。

U10素体版(ver.6.0.1より追加された組み替え用ボディを使っていきます)
https://kindergarten21.booth.pm/items/1131055
U10書庫型迦陵頻伽
https://kindergarten21.booth.pm/items/1942894
U10mk4共命R
https://kindergarten21.booth.pm/items/3459911

FBX出力用パッケージの導入

まずUnityに、FBXを書き出しするためのパッケージを導入する必要があります。
Unity上部のメニューのWindows→Packege Managerと進み、出てきたウィンドウの中からFBX Exporterというものを探してimportボタンを押します。簡単!

アバターの配置と位置合わせ

次に使いたいアバターたちをScene上に配置します。
画像ではわかりやすいように横に並べていますが、実際の作業時は原点に揃えて配置してください

一度FBXとして書き出してしまう都合上、揺れもの等の設定は無意味ですし、FBX出力時に不要なものがついてきてしまったりして面倒になるのでアバターは普段の改変で使用するPrefabではなく、FBXをそのまま配置します(画像では見やすくなるように配置後にマテリアルを当てていますが、この後の作業でマテリアルは一旦全て無効になってしまうのでこの段階でわざわざマテリアルを当てる必要はありません)

本体とパーツは位置合わせをしておきます。操作する上で邪魔なパーツなどは非表示にしておきましょう。

高さを調整して各部の位置が合うように

U10ちゃんは胴体〜頭のボーン構造は全員共通なので、ArmatuerのTransformのPositionYの数値を調整するだけでOKです。今回はパーツ側のArmatuerのPositionYを「1.185256」に設定します。なお、U10素体版,WR,Yutoをベースにする際はその他を「1.185256」、mk2,mk3,mk4Rをベースにする際はその他を「1.287915」、mk4L,迦陵頻伽,紙魚をベースにする場合はその他を「1.143726」に設定すればOKです。

mk4Rの腕パーツはアバターではないので正しい位置を割り出す手順を説明するのが面倒なのですが、とりあえず今回は「-0.1026591」に設定すれば問題ありません。

アバターは全てunpuckしておきます。アバターを右クリックで出てくるメニューからUnpuck Prefabを選択してください。

使いたいパーツの準備

メカ脚を例に説明します。

パーツ側のアバターから、使いたいパーツ(今回はメカ脚)と、それに関連しているボーンのみを取り出します。例えばU10ちゃんの脚の場合はUpperLeg以降のボーンを、手の場合はUpperArmを取り出せばOKです。今は脚を取り出したいので、UpperLeg_L、UpperLeg_Rを取り出します。

メカ脚パーツと脚ボーンを選択して…
アバターの外に出します

取り出した後の残りの部分は削除してしまって構いません。
処理が済んだら、わかりやすいように空オブジェクト(Ka0)を作ってそこにまとめておきます(やらなくてもいいです)

とりあえずKa0と名前をつけた空オブジェクトにまとめておきます

次に、取り出したパーツとそのボーンを本体の中に入れます。
なお本体となる素体版の方にメカ脚やメカ腕を繋ぐための腕や足の無い組み替え用ボディがあるので、今回はそれを利用します。Blend Shapeで手足の接続部分を調整できるので活用してください。

足のみ無いボディ、手足両方無いボディ、この2種と組み合わせて使える手だけのパーツ足だけのパーツがあります。

パーツは本体の身体等と同じ階層に、ボーンは本来そのボーンがあるべき場所に入れます。脚の場合は、Hipsの子になります。元からある本体の同名ボーンは、わかりやすいよう名前を変えておきます(今回はそれぞれUpperLeg_L_H、UpperLeg_R_Hとしました)

まずは脚パーツを本体の中に入れ…
本体の足ボーンの名称を変更し…
その後脚パーツのボーンをHipsの子にします

最後に本体のボーン(UpperLeg_L_H、UpperLeg_R_H)をパーツの方のボーン(UpperLeg_L、UpperLeg_R)の子にします。この処理をしないと本体側の太ももが脚に追従しなくなってしまいます。考え方としては着せ替えの時と同じです。

本体側のボーンを追加した脚パーツのボーンの子にする

基本の流れはこれでOKです。
メカ腕パーツも同じように処理していきます。

今回使うメカ腕は元々単体のFBXで、ボーン名が専用になっているので、わかりやすいように名前を変更しておきます。今回はUpperArm_L、UpperArm_R…というように本体と同様の命名規則にしました。Handより先の指のボーンは流石に面倒だったのでやっていません。(この処理はのちのFBXのリグ設定時にわかりやすくするためだけのものなのでやらなくても大丈夫ではあります)

のちの利便性のために名前を修正しておく

あとは同じように、本体のボーンの名前を別のものに変えて(今回はUpperArm_L_H、UpperArm_R_H)、代わりにメカ腕のボーンをそれぞれのShoulderボーンの子にし、最後に本体のボーン(UpperArm_L_H、UpperArm_R_H)をメカ腕の方のボーン(UpperArm_L、UpperArm_R)の子にします。これをしないと本体側の二の腕が追従しません。

本体側の腕ボーンの名前を変えて…
脚の時と同じように入れ子にしていく

※今回は既にパーツ状態になっている腕を使用しましたが、アバターからもぎ取る場合は、先述の脚の場合と同じように、必要な腕パーツと必要な腕ボーン(UpperArm_L、UpperArm_R)を取り出して、本体側の腕ボーンと入れ替え、本体のUpperArmはパーツのUpperArmの子にすればOKです。

継ぎ接ぎが完了したら、一度Sceneの再生ボタンを押し、各部のボーンを動かしてみてください。腕や足がきちんと付いてくるようであればOKです。

UpperArmやUpperLegを操作して手足が動けば大丈夫!

FBXとして書き出し

ここまでできたら一度Sceneを保存し、次に出来上がったアバターをFBXとして書き出します。

Hierarchie上でアバター本体を右クリックするとExport to FBXというメニューが出てくるのでそれを選択します。出てきたウィンドウで、ファイル名や出力場所を希望のものに設定し、出力形式をBinaryにしたら、あとはExportボタンを押してください(Unityが落ちる場合があるので必ずSceneを保存してから実行した方が良いです)

Unityが落ちる時があるので気をつけよう
BinaryにしないとBlenderで読み込んだりできなくなる(確か)

書き出しが終わったら、Projectタブ上で出来上がったFBXを選んで、Inspectorタブでhumanoidリグとしてセットアップします。

Humanoidを選んでApply

作業内容次第では一見エラーがないように見えますが、おそらくボーンの指定がめちゃくちゃになっていると思うので、慎重に修正していきます。指ボーンの再設定などは数が多いのでかなり面倒くさいですがミスらないようにがんばりましょう。

画面右側に表示されているリストに相当するボーンを探し出してセットしていきます。使用するアバターやパーツごとにボーンの名前は異なっていると思いますが、U10ちゃんの場合は以下のようになっています。
Hips>Spine>Chest>Neck>Head>Left/Right Eye
…Chest>Shoulder_L/R>UpperArm_L/R>LowArm_L/R>Hand_L/R
…Hips>UpperLeg_L/R>LowerLeg_L/R>Foot_L/R>Toes_L/R
(手指のボーンはそれぞれHand_L/R以下に含まれているものをよく見て配置してね)

大体のアバターはリストの名称とほぼ同じになっているのでそれで判断してください。

正直ここが一番ミスりそう

元からあるボーンの方が優先して指定されてしまっている箇所があると思うので、見つけ出して変更していきます。元からあるボーンが指定されてしまっていると、追加したパーツが動きません。元からあった本体のボーンではなく、新しく追加したパーツのボーンの方を設定してください(ボーンの名前を修正していたのはこれが理由です。名前を変更しておけばこの段階で確認がしやすくなります)

VRC用アバターとして設定

あとはそのままアバターとして設定していきます。

今回の解説では面倒なので非表示にしているだけですが、元のアバターの手足はもう動きませんし、元の手足ボーンと連動している服なども上手く動かなくなるので、そういった使わない・使えないパーツやボーンは削除しまえばアバターが軽くなって良いです(ボーン削除ツールは「ModelBoneDeleter」がおすすめです)もちろんFBX出力前の段階で削除しても良いです。

いつも通りに設定しよう

FBXを弄っている関係か、Avatar DiscripterのView Pointの設定が妙になるのですが、実際にVRCで試して都合のいい値に調整してみてください。多分大元にしたアバター(今回はU10素体版)のView Pointの設定をコピペすれば良いと思います。今回の場合Scene上ではView Pointの球が見えなくなっていますが、これでVRCでは問題ないです。根本的に解決するには、出力したFBXのリグ設定の画面で、Hipsを掴んで上げ下げしてください。

揺れものなどは元のアバターのPrefabからコピペするなどして頑張ってください。
ここまでの手順でボーン名をきちんと元のアバターに合わせて変更していれば「CopyComponentsByRegex」というコンポーネントコピーツールが仕事をしてくれるかもしれません。

動くぞ!!

お疲れ様でした!
これをさらにQUEST対応することでQUESTでもパーツ換装を楽しめます!!
やったね。

「MeshDeleterWithTexture」等を活用して腕を片側だけにしたりすれば、同様の手順で片腕だけをメカ腕に、左右で異なるメカ腕を使用、と言ったことも可能なはずです。ぜひ試してみてください。おわり。

※ちなみに「使わない・使えないパーツ」というのはこういうことです。着せ替えを失敗した時みたいな挙動になります。

服がちゃんと体に付いてこない、よく見かける現象

もちろんボーンの入れ子処理をすることで連動させること自体はできますが、例えばメカ腕に長袖を着せることは難しいのでやる意味はあまりないと思います…。腕であればUpperArmまでの範囲で動く服(半袖など)、脚であればUpperLegまでの範囲で動く服(スカートや短パン)を利用するのが一番です。

この記事が気に入ったらサポートをしてみませんか?