
【VRChat】Blender 4.3.0とUnityで非対応衣装を着せるための記事 (マヌカキプフェルの制作)
VRChatではアバターごとに体の形が違うため、衣装を売る際には「このアバターに対応した衣装です」という形でBooth等に売りに出されます。
自分の持っているアバターに対応している衣装であればUnityだけで簡単に着せることができるのですが、そうでない場合はサイズ調整を行って貫通等が無いようにする必要があります。
本記事では現時点(2024/12/01)での最新版Blenderである4.3.0を用いて、非対応衣装を着せる手順を説明しています。具体的にはマヌカの衣装をキプフェルに着せて、マヌカキプフェルを制作します。
目次
始める前の注意事項
最近では周辺ツールの発展により、Blenderを使用しなくても非対応衣装をある程度着せることができます。具体的には Modular Avatar の Scale Adjuster などを用いると、ボーンのサイズ調整で特定の部位のみのサイズを変更することができます。
また、タイトルにあるマヌカキプフェルを作りたいと思って来られた方は、ふーる雑貨店さんが以下のBooth配布物のおまけとしてキプフェル化Prefabを配布してくださっています。
2024/12/01 時点でマヌカを始めとする7アバターに対応していますので、そちらを利用すればUnityだけで簡単に着せることが可能です。こちらのPrefabは先述した Modular Avatar の Scale Adjuster を用いた対応を行っているようです。
以上を踏まえて、この記事は以下のような方にオススメできます。
・VRChat関連でBlenderを使えるようになりたい
・ポリゴンを詳細にいじって完成度の高い衣装対応をしたい
・Unityだけで対応を頑張ったが技術的な限界で上手くいかなかった
正直に言えば、わざわざ衣装をBlenderで対応させるのは覚えることが多くて面倒です。始める前にご自身の目標と合っているかどうか、他の方法はないかを事前に確認してください。
それでもなおBlenderを選ぶ方へ、一緒に勉強していきましょう。
よろしくお願いします。
0. 環境の確認
本記事では以下の環境で作業を行います。
・Blender 4.3.0
・Unity 2022.3.22f1
・(Unity) Modular Avatar 1.10.11
・(Unity) Avatar Optimizer 1.8.0 (素体のメッシュ削減に使用、素体を削る必要がないなら不要)
・(Unity) lilAvatarUtils 1.3.0 (Materialの一括置換に使用、手動の場合は不要)
特に Blender と Unity のバージョンが合っているかどうかを確認してください。バージョンが違う場合、ボタンの配置等が違う可能性があり、その場合は自力で同様の作業を行う方法を探す必要があります。
バージョン4以前のBlenderを使用する場合、そのバージョンに合わせた記事を既に有志の方が執筆して下さっていますので、そちらを利用するのが良いかと思われます。これらの記事には私も大いに助けられました。ありがとうございました。
Blender 2.93.13:
Blender 3.x:
1. Blender の設定とプラグインの追加
Blender を日本語で使いたい方はまず日本語化を行いましょう。以下の記事等を参考に実施してください。
また、シェイプキー (Unityにおけるブレンドシェイプ) を維持したままサイズを編集するために、以下のプラグインをダウンロードする必要があります。衣装に1つもブレンドシェイプが存在しない場合はこの作業は読み飛ばしても差し障りありません。
以下のURLにアクセスして SKkeeper の GitHub を開きます。
以下のような画面が表示されるので、zip ファイルをダウンロードします。zipファイルは解凍しないでください。Blenderへのプラグインの追加はzipファイルで行います。
v1.6 よりも最新版が出ている場合、Blenderのバージョンによってはそのバージョンを使用することが望ましい場合があります。

Blenderを開いて、画面左上の「編集」から「プリファレンス」を選択します。

左の「アドオン」を押し、右上の下矢印から「ディスクからインストール」を選択します。

その後、先ほどダウンロードした SKkeeper の zip ファイルを選択してインストールを行います。
正常にインストールされた場合、アドオン一覧に以下のようなSKkeeperの表示が追加されます。チェックボックスが入っており有効化されていることを確認してください。
また、念のためBlenderの再起動をすることをおすすめします。

2. アバター素体と衣装のデータを読み込む
Blenderでモデルデータを読み込むためにはモデルデータがなければなりません。基本的にBooth等で配布されているモデルデータはFBXという形式で配布されています。これをBlenderで読み込みます。
まずは Booth からダウンロードしてきたアバター素体や衣装のzipファイルの中に FBX ファイルがあるかどうか確認してみてください。無い場合はunitypackageをUnity上で展開して、それを利用する必要があります。前者は簡単なので、今回は後者の手順で進めます。
Unityプロジェクトが無い場合はVCCやALCOM等でUnityプロジェクトを作成します。既存のものを利用する場合でも、シェーダーやModular Avatarが導入されていることを確認してください。
アバター素体と衣装のunitypackageをインポートした後、そのFBXファイルがあるディレクトリを以下のように右クリックし、「Show in Explorer (エクスプローラーで表示)」を押します。

エクスプローラーではそのフォルダを選択した状態で開くため、そのフォルダをダブルクリックして開き、.fbx ファイルの場所を覚えておきます。

ここからBlenderを起動します。最初に置いてあるカメラとキューブ、ライトはマウスで選択してDelキーを押して削除しましょう。

左上の「ファイル」から「インポート」にある「FBX」を押し、先ほど場所を確認した FBX ファイルを選択します。エクスプローラーからファイルパスをコピーしてくるのが早いと思います。


アバター素体および服の両方をインポートしてください。キプフェルとマヌカをインポートした場合は以下のようになっていると思います。

右上にUnityにおけるヒエラルキーのような階層表示(Blenderではアウトライナー) があります。ここから衣装対応に関係のないオブジェクトを消しておきます。具体的にはアバターからデフォルトの衣装を消すのがメインになります。今回の例ではキプフェルの髪や服、マヌカの顔と体を消しておきます。

好みにもよりますが、編集中にテクスチャ表示しておいた方が見やすいため、ビューポートをマテリアルで表示する設定と、マテリアルのタブからテクスチャ設定を行います。設定したテクスチャを見れるようにするため、画面右上のビューポートの表示を「マテリアルプレビュー」に設定します。( マテリアル表示は重いため、パソコンのスペックに応じてこの設定は飛ばしても良いです。 )

アウトライナー (ヒエラルキー) からテクスチャを変更したいオブジェクトを選択し、マテリアルタブを押してベースカラーの右にある黄色い丸を押します。オブジェクトごとに複数のマテリアルがある ( 画像の緑色枠 ) ことがあるため、複数ある場合はそれぞれについて以下の手順を行います。


開くボタンが出てくるので「開く」を押し、テクスチャを割り当てます。割り当てるテクスチャファイルはオブジェクトごとに異なりますが、基本的にはマテリアル名と同じ png ファイルが割り当てられることが多いです。
今回の例における 「Manuka_costume」の場合は Unity で読み込んだアセット上の「./Assets/MANUKA/Texture/Manuka_costume.png」が選択するpngになります。分からない場合はUnity上でマテリアルのテクスチャを参照し、それを設定してください。

全てのテクスチャを設定すると以下のようになると思います。かなり見やすくなりました。次はサイズの変更を行っていきます。

3. 衣装サイズの変更
衣装のアーマチュアを選択した状態で、画面左上からポーズモードを選択します。

編集しやすくするためにボーンの表示/非表示を切り替えたい場合には、右上のアーマチュアにおける目のアイコンを押して無効化することで見えなくすることができます。素体のアーマチュアは非表示にしておいた方が見やすいと思います。Unityと違って子は独立して表示/非表示を切り替えることができます。

もしくは逆に全部表示したい場合、以下のチェックボックスでメッシュ越しでもボーンが見えるようにできます。

ポーズモードに入ったらキーボードで「A」を押し、ボーンを全て選択します。
サイズを変更する前に、変更する際の基準点を設定します。今回は足元を基準としてスケール変更した方が都合が良いため「3Dカーソル」を選択しておきます。3Dカーソルはデフォルトで (0, 0, 0) に配置されており、これは基本的には素体における足元の座標になります。

この状態で大まかにサイズを変更します。ボーンを全て選択した状態で「S」を押すと、マウスでサイズ変更が行えます。サイズを合わせたらクリックで確定します。このとき、おすすめは素体の腕が衣装の腕に丁度合うように調整することです。

また、「G」を押すと位置を調整できます。調整中に X, Y, Z キーを押すことで、それぞれの軸でのみ動かせるようになります。今回の例の場合は若干服が後ろになっているため、「G, Y」キーを押して若干前に移動します。

大まかにサイズを設定すると以下のようになります。

この状態だと髪の毛が顔のサイズに合っていなかったり、ズボンの位置が高い、ブーツのサイズが小さいなどの問題があるため、それらのボーンを個別に位置調整します。
このとき、サイズ変更の中心点をオブジェクトやボーンの中点にしたいため、上にある項目から設定を戻しておきます。

アウトライナーでHeadを選択することで、Headのボーンを選択できます。この状態で「S」を押してサイズ変更や位置調整を行います。

Headの調整はもちろん、全体のバランスを見つつボーンのサイズをそれぞれ調整していきます。Hips等の子があるボーンのサイズを変更する場合、他のボーンも位置やサイズが変化してしまうため、全体のバランスが崩れないようにそれぞれ調整しながら進めます。
Hipsや足のボーンのサイズをある程度調整した結果が以下の通りです。

ブーツのサイズを変更するにあたって、ブーツの中の足はシェイプキー (ブレンドシェイプ) で無効化するため、Blender でも無効化しました。ちなみにUnityでは 0-100 ですが、Blenderでは 0-1 です。

この状態でオブジェクトモードに戻ります。

4. アーマチュアの適用
ボーンのサイズを変更した場合、それに紐づけられたメッシュのサイズも変更されています。この時、メッシュはあくまでボーンサイズの影響を受けて変化しているため、頂点の編集等に入ると元のサイズに戻ってしまいます。
これを防ぐために、現在のボーンによる影響をオブジェクトに適用した上で、再度ボーンにメッシュを紐づける必要があります。
アウトライナーで各衣装についてスパナのアイコンを押し、アーマチュアの下向き矢印から適用を選択します。

このとき、以下のような「モディファイアーはシェイプキーのあるメッシュには適用できません」というエラーが表示されることがあります。この場合はインストールした SKkeeper プラグインによる適用を行います。

SKkeeperによる適用は、以下のようにアウトライナーで適用したいオブジェクトを選択した上で、「オブジェクト」における「Apply All Modifiers (Keep Shapekeys)」を押します。これによりシェイプキーがあるオブジェクトでもアーマチュアを適用できます。

この作業を全てのオブジェクトに対して行うと、以下のようにすべてのオブジェクトからスパナが消えた状態になります。Armature の外に出てしまっているのは後から直せるため、出ていても出ていなくても問題ありません。

これによりオブジェクトのサイズが現状のボーンのサイズに適用されましたが、アーマチュアとの連携が切れてしまったため、それを再度接続する必要があります。
以下のようにオブジェクトを選択し、「モディファイアーを追加」から「アーマチュア」を追加します。

追加したアーマチュアのオブジェクトを、親の名前と同一にすることで適切なボーンと紐づけます。素体と衣装のどちらも armature 系の名前となっていることが多いため、間違えて素体のアーマチュアを選択しないように気を付けてください。

この作業を先ほどアーマチュアを適用した全オブジェクトに対して行います。適用すると、以下のようにサイズがおかしいことになりますが後の手順で解消するので問題ありません。

このとき、Armatureの外部にまだオブジェクトが残っている場合は、外のオブジェクトを選択して内側にドラッグアンドドロップすることで内側に入れることができます。

アーマチュアを選択し、ポーズモードに入ります。その後、左上の「ポーズ」から「適用」の「レストポーズとして適用」を選択します。


これにより先ほど調整した状態にオブジェクトの位置が戻り、ボーンサイズの変更が完了できます。これにより先ほどポーズモードで見たような表示となります。メッシュのサイズ変更が完了したため、次はメッシュの頂点を変更しつつ貫通等を防止していきます。

5. メッシュの修正
頂点をいじる前の注意
ここで、服のメッシュをいじる前に、素体のブレンドシェイプで素体の一部を無効化することにより、貫通を防げないかを検討することをおすすめします。具体的には、今から例で挙げる肩の部分の貫通防止はブレンドシェイプで肩周辺を無効化することによっても回避できます。無駄な時間を溶かさないためにも、ブレンドシェイプによる対応も検討してみてください。
以上の注意を踏まえて、メッシュが貫通していたり不自然だったりする部分について、頂点を編集しながら修正していきます。今回は例として以下の肩の部分を修正してみます。

修正にあたっては右上の方にあるビューポートシェーディングの変更やオブジェクトの表示/非表示を変更しながら進めると良いです。ビューポートシェーディングではワイヤーフレーム表示やソリッド表示なども利用でき、頂点編集の場合はこれらの方が編集しやすいことがあります。


頂点を編集するにはオブジェクトを選択して以下のように編集モードに入ります。

その後、編集したい頂点を範囲選択等で大まかに選択します。このとき、移動する前に「プロポーショナル編集」を有効化します。有効化するには画面の上にある円形のマークを選択します。

プロポーショナル編集を有効化すると、移動する頂点の周辺も同様に滑らかに移動してくれます。これにより形の崩壊をなるべく防ぎつつ頂点を移動することができます。
頂点は「G」を押して移動します。プロポーショナル編集では範囲を指定でき、これはマウスホイールで大小を変更できます。小さくする場合はマウスホイールを奥に回転してください。デフォルトの適用サイズは大きすぎるので、マウスを動かす前にホイールを奥に回して範囲を狭め、適切な範囲を指定してから移動します。
また、頂点を軸にそって移動したい場合は「G」を押してから「X, Y, Z」のキーを押すことで可能です。

選択範囲を狭めつつ、メッシュが貫通しないように調整していきます。
あとはひたすら破綻が無いように頂点を動かしていくだけです。

プロポーショナル編集を大きめの範囲で使ってると起きづらい問題ではあるのですが、以下のように頂点のズレによりテクスチャが歪むことがあります。マテリアルプレビューを利用して歪みがないか確認しつつ進めると良いでしょう。

貫通を全て解決すると以下のようになります。どうしてもある程度は歪んでしまうため、どれくらい許容するかは編集にかける時間と相談しながら決めてください。

この作業を全てのメッシュ貫通や違和感がなくなるまでやります。今回の例だとキプフェルには胸やお尻の凸が似合わないため、そこも平らにします。
また、服の位置を調整したことにより服の表面からリボンやアクセサリ等が離れてしまった場合は、「3.衣装サイズの変更」の工程をもう1度行い、リボンやアクセサリのボーンを正しい位置に修正する必要があります。このとき、アーマチュアのモディファイアの適用と再設定はその変更を加えたオブジェクトのみで構いません。その後、根本が遠い等の破綻が生じた場合はリボンやアクセサリの頂点を移動して適切な場所に修正してください。
この作業を満足するまで行います。私の環境におけるマヌカキプフェルだと最終的に以下のようになりました。

6. FBXでエクスポートしUnityで読み込む
完成したデータをFBX形式でエクスポートし、Unityで取り込めるようにします。エクスポートには「ファイル」から「エクスポート」にある「FBX (.fbx)」を選択します。

エクスポートの設定では以下のように設定します。赤枠の部分が主にデフォルトから変更がある部分ですが、念のため全体を見て全て揃えることをオススメします。

Unityの画面に戻り、FBXのインポートを行います。作成したFBXを分かりやすい場所に配置するため、Assets等で右クリックし、「Create」から「Folder」を選んでフォルダを作成します。名前は何でもよいですが、「(Kaihen)」のように括弧を付けると一番上に表示されて便利です。

作成したフォルダにエクスプローラーからFBXをドラッグアンドドロップするとインポートされます。インポートされるとこのようにFBXがUnity上で読み込まれます。

7. UnityでFBXを利用する
先ほどインポートしたFBXをアバター直下に配置します。

Blenderから書き出したFBXには
・服 (今回はマヌカ) のアーマチュア
・服 (今回はマヌカ) のメッシュ
・素体 (今回はキプフェル) のアーマチュア
・素体 (今回はキプフェル) のメッシュ
が含まれています。このうち、下2つの素体関係のオブジェクトはBlenderで調整するために使用したため、Unity側では不要です。チェックボックスを外し、タグを Editor Only にしておきましょう。


改変したFBXはマテリアルがデフォルトの物になっており、色合いがおかしかったり正常に表示されない等の問題が発生するため、マテリアルを修正する必要があります。それぞれのオブジェクトについて各マテリアルを手作業で設定しても良いのですが、今回のようにオブジェクト数が多いと面倒なため、ここでは lilAvatarUtils のマテリアル一括置換機能を使います。
「Window」から「_lil」を選択し「AvatarUtils」を選択します。

開いたら先ほどアバター直下に入れたFBXのオブジェクトをウィンドウに入れます。これによりその配下にあるテクスチャやマテリアルを見たり置換したりすることができるようになります。

Materialsタブを選択し、Replaceの部分に置き換えるマテリアルを入れます。赤字になったら Apply を押すと置換されます。置換後はマテリアルが正しく適用され、シーンにおける表示も適切に変わっていると思います。


Blender上でブレンドシェイプを適用することで頂点の改変をスキップした部分について、Unityでも同様にブレンドシェイプを適用して貫通をなくしておきます。

また、服を追従させるために Modular Avatar での Setup Outfit を行います。この時、服のアーマチュアに対してMerge Armature コンポーネントが追加されていることを確認してください。アバター素体のアーマチュアに適用されている場合、服が追従しません。

アバター素体のアーマチュアに適用されている場合は、そのアーマチュアは使用しないので削除してしまって構いません。削除してから再度 Setup Outfit をすると、アーマチュアは服の物しかないため問題なく動作するはずです。

もしもメッシュが一部飛び出てしまっている場合、Avatar Optimizer の Remove Mesh by Box を素体に追加して、範囲指定でメッシュを削除します。


概ねこれらの設定で服の破綻防止と追従等の設定が完了になります。一旦アップロードして見落としている貫通等が無いか確認しても良いでしょう。
8. PhysBone と PB Colliders の移植
FBXから読み込んだデータには PhysBone スクリプトが含まれていません。そのため服に揺れ物が設定されている場合、それらが全て揺れない状態となっています。
これを解決するためには PhysBone スクリプトを元のPrefabから移植してくる必要があります。温もりのある手作業でこれを行っても良いのですが、スクリプトが多いと面倒なため、今回は有志の方が作成した移行スクリプト (PhysCopy) を使用します。
上記BoothのURLからunitypackageをダウンロードし、プロジェクトに追加します。また、元の服のPrefabをヒエラルキーに追加しておきます。今回は服ではなくアバターなのでマヌカをヒエラルキーに追加しています。

PhysCopyのコピー元アバターの部分に服のPrefab、コピー先アバターの部分に今回作成したヒエラルキー上のFBXを設定し、オプションを以下のように設定した上でコピーの実行を行います。

場合によってはエラーが発生することがあります。今回もエラーが発生しましたが、これはBlenderでのFBX書き出しのタイミングでボーン名が変更されている (例えば Shoulder_L が Shoulder.L になっている) ことによるものです。これらはしょうがないので手作業でコンポーネントのコピーを行うか、宛先ボーン名をUnity上で変更して対応しましょう。
以下のボーンはコピーに失敗したか、参照コライダーの変更に失敗しました
Armature/Hips/Spine/Chest/Shoulder_L/UpperArm_L/Manuka_shirt_root_L
Armature/Hips/Spine/Chest/Shoulder_R/UpperArm_R/Manuka_shirt_root_R
Armature/Hips/UpperLeg_L/LowerLeg_L/Manuka_shoes_ribbon_L
Armature/Hips/UpperLeg_L/Manuka_pants_ribbon_L
Armature/Hips/UpperLeg_R/LowerLeg_R/Manuka_shoes_ribbon_R
Armature/Hips/UpperLeg_R/Manuka_pants_ribbon_R
PhysBoneのコピーとペーストを手作業で行う場合は以下のように行います。

ここで注意なのが、「Root Transform」「Ignore Transforms」「Colliders」の3か所は、宛先のArmatureやPhysBoneを指定する場所であり、PhysBoneをコピーした場合この部分も完全にコピーされるため、参照先が後から消すPrefab宛になっています。
今回作成したFBX宛のアーマチュアやコライダーに対して宛先を変更しなければ、あとからPrefabを消した後にNoneになってしまい、期待通りの動作をしてくれません。PhysCopyを使った場合は適切に参照先が変更されますが、手作業の場合はされないため、忘れずに変更しておきましょう。

PhysBoneとコライダーの移植が終わったら、コライダーのサイズと位置調整を行います。基本的に同じくらいのサイズの非対応衣装を着せている場合はこの手順は不要ですが、念のため確認しておくことをおすすめします。
コライダーは形、半径、長さ等のパラメータを使って当たり判定を制御していますが、大幅にサイズやメッシュへの変更を加えた場合、サイズが違いすぎたり位置がおかしかったりします。実際の例として、マヌカにおける腕のコライダーがキプフェルにおいてはズレてしまっています。

コライダーを選択し、インスペクタから適切な値にします。その後、ヒエラルキー上の改変したFBXを押すことで、全体におけるコライダーの分布等を確認して違和感がないかを確かめます。


9. 確認とアップロード
Unity上でのPlayやオフラインテスト、アップロード等を行い、PhysBoneとコライダーが適切に動作するかを確認します。この時、場合によっては動いたときにPhysBoneが激しく振動するバグが起こることがあります。その場合はコライダーが干渉しているか、Armature のスケールが 0.01 等の極端に小さい値になっています。
前者の場合はコライダーの位置を調整するか、PhysBone の設定からコライダーを除去してください。後者の場合は Blender での対応が必要になります。
Blender上でアーマチュアを選択し、「オブジェクト」の「適用」から「スケール」を選択します。これによりアーマチュアのサイズが1として設定され、この状態でFBX書き出しを行うことによりPhysBoneの揺れが修正されます。

FBXの更新はエクスプローラーで行ってください。Unity上で「Show in Explorer」を実行し、先に作成した「(Kaihen)」ディレクトリを開きます。エクスポートした .fbx ファイルがあるため、新しくエクスポートした FBX ファイルでそれを上書きします。

基本的にはUnity側でよしなに更新してくれるので、ヒエラルキー上のオブジェクトを再設定する必要はありません。ただし、アーマチュアのサイズが0.01から1になるので、その配下にあったコライダー等が100倍のサイズになっている可能性はあります。適宜確認しつつ修正を行ってください。
以上の手順で正常に動作すれば完了です。お疲れ様でした。

トラブルシューティング
範囲選択できない、カーソルが円になった
この状態は W キーを押すとなります。手癖で W 押す気持ちわかります。

画面左にある以下のボタンを長押しするとこのようなポップアップが出てくるので、「ボックス選択」にカーソルを合わせた状態で離してください。

あとがき
こんなに長い記事を読んでくださってありがとうございます。
誤字や誤った情報、トラブルシューティングに追記して欲しい事象等がありましたら、遠慮なくX (旧Twitter) 等でご報告ください。
また、支援して下さる方はこの記事の有料部分をご購入いただければ励みになります。書いてあるのは感謝の文字だけです。
皆さんのVRChatライフが良いものになりますように。
ここから先は
¥ 100
この記事が気に入ったらチップで応援してみませんか?