Blenderアドオン 無料 Blender 4.2+

NuniAvatarToolkit

服に隠れて見えない面の削除、服からはみ出した肌の検出と修正、不要データの掃除、書き出し前のチェックまで。アバター改変でよく使う下ごしらえを、Blenderのサイドバーひとつにまとめたアドオンです。

9機能を収録 削除前に必ず選択して確認 PC/Quest別の参考ランク GPLv3
※実機スクリーンショットではなく、サイドバーの構成を示したイメージ図です。
Features

改変の下ごしらえを、ひとつのタブで

3Dビューポートのサイドバー「Avatar Toolkit」タブに、次の9機能がパネルとして並びます。削除や変更を伴う操作は、先に対象を選択・一覧表示してから確認ダイアログを経て実行します。

隠れメッシュ削除

服に完全に覆われて外から見えない体の面を、レイキャストで自動検出します。まず面を選択してハイライトし、目視で確認してから削除します。削除直前のボディは自動でバックアップされます。

不要データ一括削除

空の頂点グループ、効果のないシェイプキー、未使用のUVマップ・頂点カラー・マテリアルスロット、浮遊頂点/エッジをまとめて掃除します。スキャンで件数を確認してから削除できます。

メッシュ/マテリアル統合

複数メッシュの結合を、シェイプキーの消失やアーマチュア/UV構成の違いなどの事前チェック付きで行います。同じマテリアルを参照する重複スロットの統合もできます。

統計/書き出し前チェック

ポリゴン数・マテリアルスロット数・ボーン数などをPC/Quest別の参考ランクで表示し、NaN/Inf座標、スケール・回転の未適用、非多様体、ウェイトなしボーン、コレクション構成などの不整合を一覧にします。

テクスチャ再リンク

読み込んだアバターでテクスチャが見つからない(紫/ピンク表示になる)とき、指定フォルダから画像を探して自動で再リンクします。候補が複数ある場合は自動選択せず、候補を一覧表示します。

アーマチュア位置合わせ

指定したボーン(既定はHips)のレストポーズ位置が一致するように、別のArmatureを平行移動します。素足版とヒール版など、同じアバターの別バージョンを重ねて比べたいときに使います。

統合用ボーンウェイト

アクセサリなどの全頂点を、指定ボーンへウェイト1.0で割り当てます。アバター本体へ統合したあとも、UnityやVRChatでそのボーンに追従させられます。

服メッシュフィット

頂点グループで指定した範囲のうち、体に埋まっている服の頂点だけを体表面まで押し出し、結果をシェイプキーとして追加します。値を0に戻せば、いつでも元の形状に戻せます。

貫通チェック

服の表面より外側にはみ出している体の面を、現在のポーズのまま検出して編集モードで選択します。検査のみを行い、削除や変形は一切しません。

Setup

インストール

配布ZIPを展開せず、そのままBlenderにインストールします。

配布ZIPを用意する

BOOTHからダウンロードした NuniAvatarToolkit-1.0.0.zip を、展開せずにそのまま用意します。

ディスクからインストールする

Blenderの「編集 > プリファレンス > アドオン」を開き、右上の「∨」メニューから「ディスクからインストール」を選んで、配布ZIPを指定します。

アドオンを有効化する

一覧に表示された「NuniAvatarToolkit」にチェックを入れて有効化します。

サイドバーの「Avatar Toolkit」タブを開く

3Dビューポートで N キーを押してサイドバーを開くと、「Avatar Toolkit」タブが追加されています。各機能はこのタブ内のパネルとして並んでいます。

対応バージョンはBlender 4.2以降です。自動テストはLinux版Blender 4.2.0・4.3.2・5.2.0と、Windows版Blender 5.2.0で実施しています。更新するときは、アドオンを無効化してから新しいZIPを同じ手順でインストールし、有効化し直してください。
How to use

各機能の使い方

サイドバーに並ぶパネルの順に掲載しています。各機能をクリックすると、手順と注意点が開きます。

1. 隠れメッシュ削除 Hidden Mesh

体メッシュの各頂点から放射状にレイを飛ばし、服(または任意で体自身)に完全に囲まれて外から見えない頂点・面を検出します。

  1. 「ボディメッシュ」に体のオブジェクトを指定します。
  2. 「服メッシュ」一覧の「+」で欄を追加し、体を覆っている服オブジェクトをひとつずつ指定します。
  3. 必要に応じて「サンプル数」「オフセット比率」「判定モード」「安全余白」を調整します。「安全余白」は削除候補を境界から1〜3段階内側へ縮め、アバターが動いたときに穴が見えにくくします(通常は「中」を推奨)。
  4. 表情シェイプキーで見える可能性がある口の中・目の周りなどは、頂点グループを作って「除外頂点グループ」に指定すると保護できます。
  5. 「隠れた面を選択」を実行すると編集モードに入り、隠れていると判定された面がハイライトされます。この時点では何も削除されません。目視で確認し、必要なら手動で選択を調整します。
  6. 問題なければ「選択した面を削除」を実行します(確認ダイアログあり)。削除直前のボディは、非表示の独立コピーとして AMT_Backups コレクションへ自動保存されます。

注意点

  • まばたき・視線・口の開閉などのシェイプキーや、ゲーム内で切り替える別の服を着たときだけ見える面を消さないよう、削除前に必ず目視で確認してください。「自身のメッシュも遮蔽物に含める」を有効にすると、口の中などが削除対象になりやすくなります。
  • Subdivision Surface・Mirror・Booleanなど頂点数を変えるモディファイアは、一時的に無効化した状態でポーズを評価します。それでも頂点数が合わない場合は、変形前(レスト位置)の座標で判定した旨が警告されます。
  • 処理はモーダルで実行され、ESC キーでキャンセルできます。進行状況はステータスバーに表示されます。頂点数×サンプル数が多いと時間がかかります。
  • 除外されたコレクションやビューポートで非表示のメッシュは判定対象にできません。共有・リンクされたボディは解析のみ行い、選択・削除はしません。

Python API(スクリプト・AIエージェントから)

Blender内のPythonから、公開関数 NuniAvatarToolkit.run_hidden_mesh を呼び出せます。オブジェクト名またはオブジェクトを渡せます。

import NuniAvatarToolkit

result = NuniAvatarToolkit.run_hidden_mesh(
  body="Body",
  clothing=["Tops", "Jacket"],
  action="SELECT",  # ANALYZE / SELECT / DELETE
  safety_margin="MEDIUM",  # NONE / SMALL / MEDIUM / LARGE
)
print(result)

ANALYZE は変更を加えず結果だけを返し、SELECT は安全余白を適用した面を選択します。DELETE は同じ面を削除しますが、必ず先に AMT_Backups へボディのコピーを作ります。戻り値は面番号・件数・バックアップ名などを含む辞書です。

2. 不要データ一括削除 Cleanup
  1. 「対象メッシュ」に処理したいオブジェクトを指定します。
  2. 削除したい項目にチェックを入れます(初期状態では全項目が有効です)。
  3. 「スキャン」で削除候補の件数を確認します(この時点では削除しません)。
  4. 内容を確認し、「削除を実行」を実行します(確認ダイアログあり)。

注意点

  • モディファイアやシェイプキーから参照されている頂点グループ、割り当て済みマテリアルのノードが参照するUVマップ/頂点カラー、ドライバー制御に使うシェイプキーは保護されます。編集モードの変更を同期してから判定します。
  • 共有・リンク・ライブラリオーバーライドのメッシュは、変更前に処理を中止します。
  • Solidify・Bevel・Wireframe・Geometry Nodesなど、素材番号の維持を確認できないモディファイアが残っている場合は、未使用マテリアルスロットの削除を中止します。複製したメッシュへモディファイアを適用するか、「未使用のマテリアルスロット」をオフにして他の項目だけ処理してください。
3. メッシュ/マテリアル統合 Merge
  • 選択メッシュを結合:結合先にしたいオブジェクトをアクティブにした状態で、結合したいメッシュをすべて選択して実行します。シェイプキーの有無やアーマチュア/UV構成の違いなど、結合前に注意すべき点があれば確認ダイアログに表示されます。Blender標準の結合では、アクティブ以外のオブジェクトのシェイプキーは失われる点に注意してください。
  • 重複マテリアルスロットを統合:アクティブオブジェクト内で同じマテリアルを参照している重複スロットをひとつにまとめ、重複していたスロットだけを削除します(確認ダイアログあり)。重複と関係のない未使用スロットは残ります。

注意点

  • Solidify・Bevel・Wireframe・Geometry Nodesなど素材番号に依存するモディファイアが残っている場合(表示を無効にしているものも含む)、重複スロット統合は中止します。複製したメッシュへ適用してから統合してください。
  • メッシュを他のオブジェクトと共有している場合やリンクされている場合は処理しません。結合先が共有メッシュの場合も、選択していないオブジェクトを守るため結合を中止します。
4. 統計/書き出し前チェック Diagnostics
  1. 体・服・アーマチュアなどアバター一式をまとめたコレクションを作り、「アバターコレクション」に指定します。
  2. 「診断を実行」を実行すると、結果が一覧表示されます。

チェック内容

  • 評価後のポリゴン数・マテリアルスロット数、ボーン数・シェイプキー数と、PC/Quest別の参考ランク(Excellent〜Very Poor。例:【PC: Excellent / Quest: Good】)
  • 不正な座標(NaN/Inf)を含む頂点の有無(Basisを含むすべてのシェイプキーも検査)
  • メッシュとArmatureのマイナススケール・不均一スケール・回転未適用(デルタトランスフォームも含む)
  • 非多様体(ノンマニフォールド)エッジ数
  • どのメッシュからもウェイトが乗っていないボーンの一覧(削除はしません。PhysBoneなどメッシュのウェイトだけでは判断できない参照があり得るため、確認は手動で行ってください)
  • コレクション構成:サブコレクションを使わず直下に置かれたメッシュ、除外・非表示のコレクションに入っている中身、複数コレクションへの重複所属、アーマチュアが0個または2個以上、名前が初期値(Collection 等)のままのコレクション、空のサブコレクション

分類名(衣装/Accessoryなど)は問いません。サブコレクションを一切使わないフラットな構成では、構成に関する警告は出ません。参考ランクはVRChatのAvatar Performance Ranking System(PC版/Quest版)の基準を参考にした概算です。

5. テクスチャ再リンク Texture Relink

BOOTHで購入したアバターのFBX/.blendを読み込んだとき、テクスチャが見つからず紫/ピンク表示になることがあります。その欠落しているテクスチャ画像を、指定フォルダから探して再リンクします。

  1. 「検索フォルダ」に、テクスチャファイルが入っているフォルダを指定します(サブフォルダも検索します)。
  2. 「欠落テクスチャを再リンク」を実行します。
  3. 画像ごとに「再リンクしました」「候補が複数あるためスキップしました」「見つかりませんでした」などの結果が表示されます。

一致の優先順位

  1. 画像名とファイル名が完全に一致するもの
  2. 拡張子・大文字小文字・Blenderが付ける重複サフィックス(.001 等)の違いを許容して一致するもの
  3. 名前の一部が一致するもの(部分一致)
  4. 同じ一致レベルで候補が複数ある場合は、誤ったファイルを選ばないよう再リンクせず、候補を一覧表示します

注意点

  • フォルダ内に実在するファイルとの再リンクのみ行います。テクスチャファイル自体が手元に無い場合は解決できません。
  • FBXの読み込みで画像データ自体が作られなかった場合は対象外です。UDIM・連番・動画・パック済み画像、別の.blendからリンクされた画像も変更しません。
  • 候補が実際に画像として読み込めることを確認してからパスを変更します。壊れたファイルは成功扱いにせず、元のパスを保ちます。
6. アーマチュア位置合わせ Armature Align

同じアバターの別バージョン(例:素足版とハイヒール版)のArmatureは、オブジェクトの位置が両方 (0, 0, 0) でも、ボーン配置(レストポーズ)がずれていることがあります。指定ボーンのレストポーズのワールド座標が一致するように、対象Armature全体を平行移動します。

  1. 「基準Armature」に、動かさない基準側のArmatureを指定します。ボーンは"Hips"相当が自動で選ばれますが、選び直せます。
  2. 「対象Armature」に、位置を合わせて動かしたいArmatureを指定します。
  3. 「位置を合わせる」を実行すると、対象Armatureが平行移動し、指定ボーンの位置が基準側と一致します。

注意点

  • 位置(平行移動)のみ合わせます。回転・スケールは変更しません。
  • 基準はレストポーズ(Edit Modeでのボーン配置)です。現在のポーズは見ません。
  • 対象Armatureに親子付けされたメッシュは一緒に動きますが、Armatureモディファイアだけで紐づいているメッシュは動きません(警告が表示されます)。
  • Armatureの編集中は実行せず、オブジェクトモードへの切り替えを案内します。コンストレイントやドライバーで位置だけを安全に合わせられない場合は、変更を元に戻します。
7. 統合用ボーンウェイト Bone Follow

アクセサリなどをアバター本体へ統合する前に、全頂点をひとつのボーンへウェイト1.0で割り当てます。結合後もUnityやVRChatで、そのボーンに剛体的に追従させるための機能です。

  1. 「対象メッシュ」に統合したいアクセサリなどのメッシュを指定します。
  2. 「Armature」に追従先のArmatureを指定します。
  3. 「ボーン」から追従先のボーンを選びます。
  4. 「統合用ウェイトを設定」を実行します。
  5. 対象メッシュと、同じArmatureモディファイアを持つ結合先メッシュを選択し、結合先をアクティブにして「選択メッシュを結合」を実行します。

注意点

  • 同じArmatureに属する既存のボーンウェイトは対象メッシュから外し、指定ボーンだけにウェイト1.0を設定します。Armatureモディファイアが無ければ自動で追加します。
  • 結合先と別のArmatureモディファイアを持つメッシュ、Bone Parentが設定済みのメッシュ、リンクされていて変更できないメッシュは処理しません。
  • 共有メッシュ、メッシュデータだけがリンクされている対象、変形に使わないボーン(use_deform=False)も、既存ウェイトを外す前に拒否します。共有メッシュは先にシングルユーザー化し、追従先には変形用のボーンを選んでください。
8. 服メッシュフィット Cloth Fit

他のアバター向けの服を着せると、体が服を突き抜けて肌がはみ出すことがあります。服のうち頂点グループで指定した範囲だけを対象に、体に埋まっている頂点を体表面まで押し出し、結果をシェイプキーとして追加します。全体をShrinkwrapで吸着させるのと違い、胸まわり・腰まわりなど直したい部分だけを狙えます。

  1. 服メッシュに、フィットさせたい範囲の頂点グループを作ります。ウェイト値がそのままフィットの強さになるので、境界を0へ向けてぼかしておくと段差が出ません。
  2. 「ボディメッシュ」に体のメッシュを、「服メッシュ」に変形させたい服のメッシュを指定します。
  3. 「対象頂点グループ」で、手順1で作った頂点グループを選びます。
  4. 必要に応じて「オフセット」(体表面から浮かせる距離)と「最大探索距離」を調整します。
  5. 「フィットしてシェイプキーを作成」を実行すると、服メッシュにシェイプキー(既定名 AMT_Fit)が値1.0で追加されます。

体の外側にある頂点は動かさず、内側に埋まっている頂点だけを押し出すので、服のシルエットは保たれます。

注意点

  • 結果はシェイプキーなので、値を0にすれば元の形状に戻せます。スライダーで効き具合を弱めることもできます。
  • 同じ名前のシェイプキーがある場合は、確認ダイアログのうえで上書きします。部位ごとに分けたい場合は「シェイプキー名」を変えて実行してください。
  • 計算中はArmatureを一時的にレストポーズとして扱い、実行後に元のポーズへ戻します。
  • 「最大探索距離」より遠い頂点は処理されません。大きく離れた服を合わせたい場合は値を大きくするか、0(距離制限なし)にしてください。
  • 変更する服はローカルかつシングルユーザーのメッシュにしてください。absoluteキー、自己参照する相対キー、ミュート済みキー、値1.0を含まないスライダー範囲の既存キーがある場合は、設定を勝手に変えず実行を中止します。
  • Displace・Shrinkwrap・Mirror・Subdivisionなど、座標や頂点構成を変える服側のモディファイアは、無効化するか複製した服へ適用してから実行してください。
9. 貫通チェック Poke-through

服の表面より外側に出ている体の面を検出し、編集モードで選択してハイライトします。検査のみを行い、削除や変形は一切しません。

  1. 「ボディメッシュ」に体のオブジェクトを指定します。
  2. 「服メッシュ」一覧の「+」で欄を追加し、体を覆っている服オブジェクトをひとつずつ指定します。
  3. 必要に応じて「最大探索距離」「検出しきい値」「判定モード」を調整します。
  4. 顔・手・足など、服から出ているのが正しい部位は、頂点グループを作って「除外頂点グループ」に指定すると保護できます。
  5. 「貫通をチェック」を実行すると、貫通している面が編集モードで選択され、面数と最大突き出し量が表示されます。

注意点

  • 判定は現在のポーズで行います。貫通はポーズによって出たり消えたりするので、問題が起きるポーズを取らせてから実行してください(レストポーズで計算する「服メッシュフィット」とは逆です)。
  • 「最大探索距離」より近くに服が無い頂点は、服に覆われていない部分として判定から外れます。襟ぐりや袖口の肌が誤検出される場合は小さく、厚みのある服の貫通が検出されない場合は大きくしてください。
  • 「検出しきい値」は、ぴったり接している面を貫通と誤検出しないための余裕です。細かい面が大量に選択される場合は大きくしてください。
  • 見つかった箇所は、「服メッシュフィット」で服を膨らませるか、「隠れメッシュ削除」で体側の面を削って対処します。
  • 共有メッシュのボディは拒否します(参照する服側のメッシュ共有は問題ありません)。
Notes

ご利用にあたって

削除を伴う機能を使う前に確認してください。

削除の前に保存・複製を

削除系の操作を実行する前に、必ずファイルを保存するか複製を作ってください。削除操作はBlenderの元に戻す(Ctrl+Z)の対象ですが、ファイルを開き直したりBlenderを終了したりすると、そのUndo履歴は使えません。

削除前に必ず目視で確認

「隠れメッシュ削除」「不要データ一括削除」は、シェイプキーや服の着せ替えなど、実行時点では見えていないものの将来見える可能性がある面・データを消してしまうことがあります。除外設定を活用し、選択・スキャン結果を目視で確認してから削除してください。

未対応の構成は変更前に中止します

共有・リンク・編集できないメッシュや、結果を保証できないモディファイア構成などを検出した場合は、データを書き換える前に処理を中止し、理由を表示します。「服メッシュフィット」「アーマチュア位置合わせ」は、途中で失敗した場合に変更前の状態へ戻します。

VRChatのランク表示は参考値です

「統計/書き出し前チェック」のランクは、VRChatのAvatar Performance Ranking Systemの基準を参考にした概算です。マテリアルスロットは同じマテリアルでもスロットごとに数えます。基準は将来変わる可能性があるため、最終判断はVRChat公式ドキュメントで最新の基準を確認してください。

License

ライセンス

本アドオンは GNU General Public License v3.0(GPLv3) の下で提供しています。配布ZIPに LICENSE を同梱しています。

コードの改変・再頒布は、GPLv3の条件に従って自由に行えます。bpy を利用するBlenderアドオンは、GPL互換のライセンスである必要があるためです。