ANTNEST BLOG

主にモデリングとかVRC関連

【アバター首接合】6. Blenderエクスポート~Unityでの設定


 Algo_Ayugonです。

 この記事は、「Blenderアバターの首を綺麗に接合する」ための6つの記事のうちの6つ目(最後)です。

 目次記事↓

antnestin.hatenablog.com

 

Blenderエクスポート~Unityでの設定」目次

 

6-1. Blenderからモデルをエクスポートする

 ここまでおつかれさまでした。そしてこれからいよいよ、頭部と素体を綺麗に接合したモデルを、1つのFBXとしてエクスポートします。

 

 が、その前にやることがあります。そしてこれからやる操作は不可逆的なので、エクスポート専用のファイルとして別名保存しておくことを推奨します。

 

①「シェイプキー」があるモデルの「モディファイアー」を適用する

 記事内で何度も触れていますが、「シェイプキー」があるオブジェクトは「モディファイアー」を「適用」させることができません。

 しかし、「モディファイアー」はBlenderからエクスポートされるときにデフォルトでは「アーマチュアモディファイアー」以外は「適用」されることになっています。このとき「シェイプキー」があった場合、「モディファイアー」の適用の方が優先されて「シェイプキー」が消えます。よくある(?)シェイプキー消失事件*1ですね。

 なので、エクスポート前に「アドオン」を使って手動で「モディファイアー」を「適用」しておきます。私はApplyModifierを使っています。ApplyModifierを使う場合、「オブジェクト」→「適用」→「Apply selected Modifier」から行います。その時、「アーマチュア」は「適用」せず残しておきましょう!

f:id:antnestin:20210925175650p:plain

ApplyModifierを実行。「シェイプキー」が多いと時間がかかり、フリーズすることもありますが、気長に待ちましょう。

 

②トランスフォームを適用する

 一般的に、「トランスフォーム」の値は初期値になっている方が綺麗で、扱いやすいモデルです*2。エクスポート予定のオブジェクトを全部選択して、「オブジェクト」→「適用」→「全トランスフォーム」を実行しておきましょう。

f:id:antnestin:20210925174413p:plain

全トランスフォームを「適用」

エクスポート

 これらができたら、「アーマチュア」も含めてエクスポートしたいオブジェクトを同時選択し(LightとかCameraとかが含まれないように…)、「ファイル」→「エクスポート」→「FBX(.fbx)」でFBXエクスポートします。

f:id:antnestin:20210925175938p:plain

選択してエクスポート

 

 エクスポート設定欄では、「選択したオブジェクト」にチェックを入れ、(一応手動でトランスフォーム適用してありますが念のため)「スケールを適用」を「すべてFBX」にし、「!実験的機能! トランスフォーム適用」にチェックを入れます。

f:id:antnestin:20210925180157p:plain

エクスポート設定

 

 今後何も無ければBlenderの出番はこれで終わりです。Blenderに感謝しましょう。

 

6-2. Unityへモデルをインポートする

(※Unityでのアバター改変のための操作は一通りできる前提で、Blenderパートよりはかなり薄味に書いています。ご了承ください)

 Unityを起動します。

任意のフォルダに先ほどBlenderからエクスポートしたFBXをドラッグアンドドロップしてインポートします。FBXのインポート設定は次のようにします(特にVRC向け設定)

f:id:antnestin:20210925205228p:plain

Modelの設定

f:id:antnestin:20210925205254p:plain

Rigの設定

 RigはAnimation TypeをHumanoidにして一度Applyを押してから、Configure…ボタンを押してHumanoid設定を確認します。異常(必要なボーンが割り当てられてないとか、Jawに髪ボーンとかが割り当てられてしまっているとか…)が無いかを確認して、必要があれば修正してDoneします。

 

 ついでに、調整したテクスチャもインポートしておきます。テクスチャのインポート設定は次のようにします。

f:id:antnestin:20210925205902p:plain

テクスチャのインポート設定

 その他の設定は諸説あるのでここでは特に弄らないことにしておきますが、とにかくStreaming Mipmapsにチェックを入れておかないとVRChatにアップロードできないので、チェックを入れます。また、4Kを越える高解像度のテクスチャを使いたい場合は、Max Sizeも上げておかないと反映されないので注意しましょう*3

 

6-3. マテリアルの設定をする

 マテリアルを設定していきます。重要なポイントは、使うシェーダーの種類・設定を頭部と素体で統一することです。ここがちぐはぐだと、どれだけBlenderでがんばって接合部を滑らかにしようが、切れ目ができてしまいます。

 

 おそらく、ベースを頭部側にした方が設定が楽*4だと思います。なので、頭部で使われているマテリアルを複製しましょう。元のマテリアルを弄りたくないので、ここでは2個複製し、それぞれを頭部用、素体用としました。モデルの方にも割り当てておきます*5

f:id:antnestin:20210925211153p:plain

フォルダ内の構成。マテリアルは頭部の元モデルに使われているもの(別フォルダ)を2個複製し、名前を変えたもの。

 

 これ以降はUTS2での説明となります。それ以外のシェーダーを使われている方は適宜読み替えてください。

 

 調整後のテクスチャをマテリアルのベースカラーに割り当て直します。

f:id:antnestin:20210925211705p:plain

テクスチャを割り当て

 画像は素体マテリアルの例ですが、(接合部のテクスチャを調整している場合は)頭部マテリアルにも同じように行ってください。

 

 これだけで首回りは問題がなくなるはずです。ですが、この段階では素体側の表示が一部変になっているかもしれません。

f:id:antnestin:20210925212031p:plain

接合部は綺麗だが、腕周りがなんかピンクい

 これは、頭部マテリアル用に割り当てられていたマスクテクスチャや瞳用のEmissiveが残っているからです。取り除きましょう。取り除きたいテクスチャ(ここでは見た目が白黒のマスクテクスチャ)の右隣の小さい丸をクリックするとブラウザが出てくるので、一番最初に出てくるNoneをクリックして割り当て無しにします。

f:id:antnestin:20210925212447p:plain

マスクテクスチャを取り除く

 

 白黒のマスクテクスチャは全部取り除いても問題ないはずです。マットキャップテクスチャは取り除いた方がいいとき*6と取り除かない方がいいとき*7があります。Emissiveも同様に黒に戻した方がいいときと弄らない方がいいときがあります。

 

 マテリアル調整をしたものがこちらになります。

f:id:antnestin:20210925213219p:plain

これで見た目はOK!

6-4. VRC向けの設定をする

※Avatar3.0での説明です。2.0でも基本は一緒だと思います

 VRChatにアバターとしてアップロードするために、ルートオブジェクトにVRC Avatar Descriptorコンポーネントをつけましょう。とりあえずは、頭部モデルの元になったアバターのものをコピーしてベースにするのが良いと思います。

 ただし、Unity標準機能で適当にコピペすると、メッシュ等の参照先がコピー元のままになっているので手作業で修正しないとまともに動きません。そこで、CopyComponentsByRegexというUnity拡張がとても便利です。インポートして使いましょう。詳しくは作者様の説明を見てください。揺れ物等のDynamicboneコンポーネントやコライダー等も一緒にコピペできます。

 

 頭部モデルの設定をコピペできたら、素体側向けの設定をします。手専用のAnimatorが用意されている場合は、Playable Layers→Base→Gestureの欄にドラッグドロップします。その他専用モーション等がある場合も同様にします(この辺は各素体モデルの説明を確認してください)。

 

※なんかうまくいかない場合

表情等が入っているオブジェクトの名前が元のモデルのものから変わっていないかをまず確認してみてください。表情等のアニメーション(FX Layerに入ってそうなものは大体そう)は、基本的に「名前」と「階層構造」が一致していないと動きません。違っていた場合はその辺を修正すると動くようになるはずです。

 

6-5. Bounds、AnchorPoint等の設定をする

 Unity上だとあまり問題は起こりませんが、このままアップロードするとVRChat上で色々な問題が起こる可能性があります。そのために、仕上げとしてBoundsとAnchor Overrideの設定をします。

Bounds: Boundsとは、通常各オブジェクトをすっぽり覆っている領域のことです。この領域がカメラに入っているときだけにオブジェクトを描画します。この設定がバラバラだと、突然頭部とかが消えて見えたりします。各オブジェクトではなく、アバター全体をすっぽり覆うように全てのオブジェクトのBoundsを設定し直すと消えにくくなります*8

Anchor Override: 6-3でせっかくマテリアルの設定を統一したとしても、空間の上の方と下の方のライティングの様子が違うと、それぞれのマテリアルの影の入り方が違ってきてしまいます。そこで、Anchor Overrideという機能を使うとそれも統一することができます。詳しい説明は↓の記事もご覧ください。

jellyfish-qrage.hatenablog.com

 BoundsとAnchor Overrideは手動で設定することもできるのですが、ここではがとーしょこら様のVRCAvatarEditor betaを使います。VRCAvatarDescripterコンポーネントが入ったアバタールートをセットするだけで、上二つの設定を含む様々な設定が超簡単に行えるとても重宝するツールです。どんどん使いましょう。

 

EX. 専用衣装の着せ替えについて

 今まで苦労して頭部と素体を調整してきたのは全てはこれの為です。簡単・綺麗に着替えをしまくりましょう!

 

 1-2で素体の大きさと位置を調整した時に、「トランスフォーム」の値をメモしたのを覚えているでしょうか? 素体に対応した衣装のArmatureに、メモした値をそのまま入れれば同じ比率・位置に変形することができるため、特に難しい調整をせずとも素体と衣装がぴったり重なります

 ただし、BlenderとUnityでは座標系が異なるため、軸と符号には気を付ける必要があります。

f:id:antnestin:20210926145519p:plain

1-2でメモった値を参考に、衣装のサイズと位置を合わせる

 

 フィッティングができたら、あとはキセテネ等でボーンの関連付けをしたり、貫通対策をしたりしましょう。

f:id:antnestin:20210926145934p:plain

VRChatへ無事アップロード完了!


 おつかれさまでした! これでBlenderでのアバター改変は怖いもの無し!

 

 

それでは良いアバターライフを~

Algo_Ayugon

*1:私も10敗以上しています

*2:UnityのClothコンポーネントとかはトランスフォームの値によってバグったりするようです

*3:逆に言うと、元のテクスチャが大きくてもここでサイズを下げれば軽量化が簡単にできます

*4:キャラクターの頭部にはマスクテクスチャ等モデラ―の叡智が詰まっており、再現が困難です…

*5:おそらく素体側の表示がヤバいことになりますが、無視します

*6:瞳用マットキャップ等の場合

*7:肌のテカり用マットキャップの場合

*8:というより、消える時は全部一緒に消えると言った方が正しい