【VRC】Blender2.93からUnityに持っていく+Unity側独自の設定(ダイナミックボーンとかPhysBoneとか)の設定を引っ越しする
-----この記事について-----
この記事はBlender2.93(またはBlender2.8等で)アレコレ(改変・改造)を行ったモデルをFBXに出力し、Unityにインポートし、改変前等のアバターからダイナミックボーンとかの設定を引っ越しする手順です。
Blenderとなんとか和解して一時金(FBX)を受け取ったはいいものの、そのファイルをUnityにインポートしてアバターとしての設定を再設定しなおすまでの工程には意外とトラップがあったりコツを知らないととんでもなく面倒なことが多かったりします。
主にダイナミックボーン等です。
今回はBlenderに取り込んだアバターをFBXに出力してUnityにインポートし、Unity側でセットアップする情報(主にダイナミックボーンなど)の設定をほどほどラクに設定しなおす方法を説明します。
今回のサンプルはティコちゃん(https://booth.pm/ja/items/3123433)とします。
Step0:アドオンの用意
「CopyComponentsByRegex」
・正規表現でマッチするコンポーネントを同じ場所にコピーしてくれるUnityエディタ拡張です。
今はとにかく「キーワードに該当する奴をいい感じにコピーしてくれる便利な奴」ぐらいに考えておいてください。
まずは上記ページでファイルをダウンロードしてください。
次にUnityを開いて、「Project」タブを右クリックして「Show in Explorer」をクリックしてください
そうすると多分エクスプローラーが立ち上がって「Assets」フォルダを選択した状態、あるいは「Assets」フォルダを開いた状態になっているはずです。
この「Assets」フォルダに先程DLしたファイル内にある「Editor」をコピーします。
Unity画面に戻ってみましょう。
何か一瞬メッセージ欄がチラっと見えたりしますが問題は無いです。
「Hierarchy」を右クリックしてみてください。
すると右クリックメニューの中に「Copy Components...」というメニューが追加されているはずです。
これで拡張の導入は完了です。
Step1:アバターのスケールを整える-----
ひとまずBlenderに読み込んだティコちゃんを出力してみましょう。
…の前に
「オブジェクトモード」の状態で「Armature」を選択してみてください。
よくみるとスケールが「0.01」になっていますね。
しかも、他のメッシュを見てみると
「回転」が90°になったりしてます。
このまま出力をすると、あとで教える方法(拡張を使ってダイナミックボーンを一括コピー)を使った際に「ダイナミックボーンの当たり判定(白い丸とか黄色い丸)が異常に小さくなったり」「設定は同じはずなのに揺れ方がおかしくなったり」します。
↑スケールを直さないままティコちゃんを出力してダイナミックボーン並びにコライダーをコピーするとこうなります(写真右側)。
まったく同じ設定で同じ個所にダイナミックボーンとコライダーが設定されているのにコライダーが見えなくなっていますね。
よ~~~く見てみるとコライダーはあるんですが物凄く小さくなっています。
これだとまたコライダーの半径を調整したりする必要が出てきたりして面倒です。
ので、Armatureを含めた各メッシュが初期値(位置が全部0、回転が0、スケールがx1)になるようにしておきます。
↑これが初期値です
各メッシュと「Armature」を選択します。
「オブジェクト」の「適用」->「全トランスフォーム」を選択します。
これでOKです。
Step2:BlenderからFBXとして出力-----
ではBlenderから出力しましょう。
「Armature」を含む全部を選んで
「エクスポート」->「FBX」を選択
エクスポート設定は画像のようにすればOK………のハズです。
※私は今のところこの出力設定で問題は起きてませんが、もしかしたら正しくない設定があるかもしれないのでそこはご了承ください…
パスモード:自動
パッチモード:オフ
内容:
Limit to:「選択したオブジェクト」を選択
オブジェクトタイプ:エンプティ、アーマチュア、メッシュ、その他
カスタムプロパティ:選択無し
トランスフォーム:
スケール:1
スケールを適用:すべてFBX
前方:-Zが前方
上:Yが上
単位を適用:選択無し
空間トランスフォームを使用:選択
トランスフォームを適用:選択無し
ジオメトリ:
スムージング:法線のみ
他:全部選択無し
アーマチュア:
プライマリボーン軸:Y軸
セカンダリボーン軸:X軸
アーマチュアFBXノード…:Null
デフォームボーンのみ:選択無し
リーフボーン追加:選択無し
アニメーションをベイク:選択無し
これでFBXが出力できました。
Step2:FBXをUnityにインポート-----
Unityの「Project」を開いてどこかいい感じの場所にFBXをドラッグアンドドロップしましょう。
解りやすくするために今回はデフォルトのティコちゃんのFBXが置かれているフォルダとします。
Step3:FBXのインポート設定を整える-----
デフォルトのインポート設定だとシェイプキーを使用したときに法線(顔の影の付き方)がおかしくなったり、アバターのポリゴン数が3桁万(⁉)と表示されたりするので修正しましょう。
「Project」でインポートしたFBXを選択すると、「Inspector」にそのFBXをインポートする際の設定が出てきます。
「Model」タブの
・「Read/Write Enabled」にチェックを入れる
・「Blend Shape Normals」を「None」にする
を必ず行ってください。
他にもデフォルトのFBXと設定が異なる箇所があった場合はここも合わせたほうがイイ…かもしれません。たぶん。
設定が完了したら「Apply」を押します。
次は「Rig」を選択します。
デフォルトの設定だとFBXはHumanoid(人型)と認知されないので修正します。
「Animation Type」を「Humanoid」にして「Apply」を押してください。
「Configure」が押せるようになるので押してください。
もしかしたらアバターによっては正しくボーンが配置されてなかったりしますが、そこは改変前のFBXをConfigureしてみてにらめっこしてみてください。
ティコちゃんの場合は特にエラーは起きませんが「Jaw」に前髪のボーンが登録されてます。
Avatar3.0だとどうなるかはわかりませんが、2.0だと髪の毛が喋り出すのでとりあえずここはNoneにしておきましょう。
設定が完了したら「Done」を押します。
これでインポート時の設定は大体修正完了です。
Step4:マテリアルを設定しなおす-----
まずはすでにダイナミックボーンなどの設定が完了しているアバターが存在しているシーンを開きます。
そのシーンの「Hierarchy」にインポートしたFBXをドラッグアンドドロップします。
ちょっと見づらいので設定済みのアバターをずらします。
まずはマテリアルをコピーしていきます。
設定済みアバターの方のメッシュを選択し、「Inspector」に表示される「Materials」のそれぞれの奴をクリックしてみましょう。
するとそのマテリアルがどこにあるのかが「Project」欄で黄色くハイライトされます。
これを利用してインポートしたFBXの「Materials」を設定済みと同じようにドラッグアンドドロップしていって合わせていきます。
設定済みアバターと同じ発色になればOKです。
引き続き、他のメッシュも同じように設定しましょう。
Step5:CopyComponentsByRegexを利用して改変前のPrefab(または設定済みのアバター)からダイナミックボーンを引き継ぐ-----
今の状態だとマテリアル設定はコピーできたものの肝心のダイナミックボーンはコピーできていません。
マテリアルのようにダイナミックボーンを手作業で再設定するのは中々大変です。
そこでいよいよStep0で導入した拡張を利用します。
設定済みのアバターを選択して右クリックしてください。
「Copy Components By Regex」をクリックします。
するとこんな感じでウィンドウが出てきます。
ひとまず下記の設定に合わせて「Copy」を押してください。
正規表現:「Dyn」
「コピー先に同じコンポーネントがあったら削除」
「コピー先にオブジェクトがなかったらオブジェクトをコピー」を選択
すると「コピー中のオブジェクト」が設定済みアバターの名前になっているはずなので、今度はインポートしたアバターを選択します。
その状態で「Paste」を押してください。
これでインポートしたFBXにダイナミックボーンが設定できました。
あとはVRC用のセッティングをアレコレしたりするだけです。
Step5-1:Step5は何をやったのか-----
正規表現を「Dyn」として「Copy」を押すと、
Unity「指定したアバター(tycho)のさ、「Dyn」って文字を含むコンポーネント一覧をコピーしておくれ」
エディタ「ワカリマシタ」
エディタ「『Dynamic Bone』と『Dynamic Bone Collider』が一致してたのでコピーしておきました」
Unity「じゃあ今度は指定したアバター(tycho_blog)にそれ張り付けておいて、オブジェクトがなかったらコピーでいいよ」
エディタ「ワカリマシタ」
エディタ「よく見たら「DB」と「Anchor target」っていうオブジェクトがないな、コピーしておくか」
エディタ「えっと、あとは各部のボーンに該当のコンポーネント(DynamicBone,DynamicBoneCollider)を張り付けていって…っと」
エディタ「よしできた」
だいたいこんな感じです (たぶん)。
とにかくこのエディタが優秀なのは一括ですべてのダイナミックボーンをコピーできるだけでなく、普通にコピーしたら元の設定をそのまま引き継ぐだけの所をいい感じにコピー先に合わせてくれるところです。
例えば上記のDynamicBoneコンポーネントを普通にコピーして貼り付けると、「Root」と「Colliders」に指定されている値は元のアバターの「Hair BackB」「Chest」のままなんですが、
この拡張でコピーして貼り付けると張り付けた先の「HairBackB」「Chest」に置換されます。
要は全てのコンポーネントを一個ずつコピーしてRootやCollidersをコピー先のアバターの対称のボーンにして……という気の遠くなる手作業が一発で終わります。
超便利。
「コピー先に同じコンポーネントがあったら削除」は、チェックを入れておくと貼り付け先にある同じコンポーネントを消したうえで貼りなおしてくれます。
Pasteを連打しちゃって全てのダイナミックコンポーネントが二つ登録されちゃって……という大惨事が回避できます。
ちなみに、「コピー先にオブジェクトがなかったらオブジェクトをコピー」をチェックしておくと、コピー対象のコンポーネントだけじゃなくて貼り付け先に無いオブジェクトも丸ごとコピーしてくれるので例えばコピー対象のアバターに首輪や指輪を付けていた場合、貼り付け先にもそれを張り付けてくれます。
そこら辺の再設定の手間も省けるので超便利。
Step6:オマケ:Bound(可視範囲)・Anchor Overrideを統一-----
AnchorOverrideとBoundは統一しておいた方がライティング方面で何かと無難です。
正しい方法かはわかりませんが現状私が改変をするときにやっている設定を書きます。
アバターの首(Neck)を選択し、右クリックで「CreateEmpty」を選択
対象のメッシュを全選択
先程作成した「GameObject」を「Anchor Override」にドラッグ
「Bounds」の「Center」「Extent」を下記の通りにしてください。
白い四角(Bounds)がアバター全体を覆う程度の大きさになっていればOKです
5/14追記(PhysBoneの件):
いつの間にか一年遅れの「夏」が来ましたね。
ダイナミックボーンの代わりとなるPhysBoneに関しても上記のプラグインでコピーできます。
正規表現を「Phys」としておけばPhysBoneコンポーネント関連を丸ごとコピー出来ます。
この記事が気に入ったらサポートをしてみませんか?