ShapeKeyStripper(使っていないシェイプキーを見つけて、元メッシュを壊さず消す・Unityエディター拡張) | シェイプキーを整理してメッシュのデータを減らす(買い切り)
- ダウンロード商品¥ 1,000





衣装・髪・顔のメッシュにシェイプキー(BlendShape)が何百個も入っていて、どれが使われているか分からず消せない、という方向けのUnityエディター拡張です。アバター内のアニメーション(Animator Controller と AnimationClip)と、コンポーネントに保存された文字列・番号から、参照されているシェイプキーを調べ、「どこからも使われていない」ものに印を付けます。チェックしたものを消した新しいメッシュを別のアセットとして作り、Renderer に差し替えます。差し替えは Ctrl+Z で戻せて、元のメッシュと FBX は変更しません。Blender に戻さずに Unity の中で整理できます。サンプルシーン付きです。 【購入前にお読みください】体験版はありません。購入前の確認は、販売画像と説明文でお願いします。動作確認は Windows / Unity 6(6000.5)のみです。Unity 2022.3 LTS でのコンパイル・動作は未検証です。VRChat SDK 入りのプロジェクト、実際のアバターでの動作確認も行っていません。ウィンドウのボタン操作・確認ダイアログ・ファイル選択ダイアログは、制作側では自動テストでの確認までで、手で触っての確認はしていません。画像は、すべて説明用の描画です(一覧の中身は同梱サンプルの実際のデータ、数値は制作側の自動テストの結果)。エディター画面そのもののスクリーンショットではありません。 買い切り1,000円・追加費用なしです。本製品は SaiRollStudio が制作した非公式ツールであり、Unity Technologies および VRChat Inc. の公式製品ではありません。 【特長】 ・使用状況を自動で判定:次の4つを調べます。(1)ルート以下の Animator の Controller(サブステートマシン・BlendTree・複数レイヤー・同期レイヤーの上書きモーションをすべてたどる) (2)AnimationClip の blendShape カーブ(追加登録した Controller・.anim・フォルダ内のクリップも対象。FBX 内のクリップを含む) (3)コンポーネントに保存された文字列(配列の中も)がシェイプキー名と完全一致するもの(口パク〈ビセム〉の設定など)。(4)コンポーネントの int / int[] のうち、プロパティのパスに「blendshape」を含むもののうち、同じコンポーネント内の同じ階層にある参照欄が対象の Renderer を指すものだけを「番号で参照」とみなし、その番号のシェイプキー(まばたき設定など)。VRChat SDK には依存せず、SDK が入っていないプロジェクトでも動きます ・一覧:番号・名前・今のウェイト・使用状況(青=使用中 / 灰=未使用)・削除チェック。名前の部分一致検索、使用中 / 未使用 / 値あり の絞り込み、全選択・全解除・反転・表示中だけ選択ができます ・「未使用で値0のものにチェック」ボタン。使用中のキーにチェックを入れると行がオレンジになり、警告が出ます。口パク用の名前などを決め打ちで残す機能は入れていません(判定は実際の参照だけで行います) ・書き出し:(a)チェックを消したメッシュ (b)チェックしたものだけを残したメッシュ。保存先フォルダを選べます(既定は元メッシュと同じフォルダ。元が FBX の中なら FBX と同じフォルダ)。ファイル名は <元のメッシュ名>_stripped.asset(残す方は _extracted.asset)で、同名があれば連番になり、上書きしません ・「Renderer に差し替える」(既定ON):差し替え後、残ったシェイプキーの今のウェイトを引き継ぎます。Ctrl+Z で元のメッシュ・ウェイト・番号に戻ります。番号で参照している設定は新しいメッシュの番号へ自動で付け替え、消したキーを指していた番号は -1 にして件数を表示します ・元と同じに保たれるもの:頂点・三角形・サブメッシュ・法線・接線・頂点カラー・UV0〜UV7・ボーンウェイト・bindposes・bounds・index format。残したキーの名前・順序・差分(頂点・法線・接線)・途中段階(複数フレーム)のウェイトも同じです(自動テストで確認) ・書き出し前に、消す数・残す数(例:20個 → 11個)と、メモリ上のデータ量の「目安」を表示します。書き出し後に実際のファイルサイズも表示します ・プリセット:チェック状態を名前のリストで JSON に保存 / 読み込み。別の衣装・バージョン違いのメッシュに使い回せます(存在しない名前は無視して、一致した数と無視した数を表示します) ・Editor 専用(ビルドには入りません)。外部ライブラリ・サードパーティ素材の同梱なし。ウィンドウ右上で 日本語 / English を切り替えられます ・サンプルシーン付き:シェイプキー20個の筒状メッシュ(スクリプトで作った自作・うち1つは途中段階つき)、表情を動かすクリップ3つ、Animator Controller(サブステートマシンと BlendTree つき) 【使い方】 1. メニュー Tools > ShapeKeyStripper > シェイプキー整理 を開く 2. 「対象 Renderer」に SkinnedMeshRenderer を入れる(「選択中を使う」でも可)。アバターのルートは任意で、入れるとその下のすべての Animator を調べます 3. VRChat の FX のように Animator に直接付いていないものがあれば、追加の Controller / .anim / フォルダに登録して「使用状況を判定する」 4. 「未使用で値0のものにチェック」→ 一覧を確認 → 書き出し方を選んで書き出す(Renderer の差し替えは既定ON) 【確認した結果(Unity 6・制作側の自動テスト)】 ・自動テスト24件がすべて合格、コンパイルエラー0・警告0 ・同梱サンプル:20個中、使用中8個、未使用12個(うち3個は今の値が0ではない)。未使用で値0の9個を消すと20個から11個になり、残したキーの名前・順序・差分は元と完全一致。元のメッシュファイルは前後でハッシュが同一 ・サンプルの所要時間(384頂点):判定 0ms / 書き出し+差し替え 69ms / Undo 1ms ・6万頂点×200キーのメッシュから100個を削除する書き出し:約1.1秒(テキスト形式の .asset で約63MB)。検証係の実測では4万頂点×100キーで約3.6秒 上はすべて同梱のサンプル(スクリプトで作った自作の筒状メッシュ)での値です。実際のアバターや衣装のメッシュでの確認は、制作側では行っていません。 【導入】 同梱の unitypackage をプロジェクトにインポートします。Assets/ShapeKeyStripper/ に入ります(Editor・Samples・README)。サンプルは Assets/ShapeKeyStripper/Samples/ShapeKeySample.unity です。 【制限・注意(必ずお読みください)】 ・次のものは検出できません。「使用中」にならないことがあるので、消す前に確認し、書き出したあとにアバターの表情・口パク・まばたきを必ず確かめてください ・スクリプトのコード内に直接書かれた名前、実行時に組み立てられる名前 ・パスに blendshape を含まない int での番号参照、番号以外の方法(他のツール・外部のデータ)での参照 ・古い Animation コンポーネント(レガシー)のクリップ ・名前の一部だけを保存している設定(完全一致しないもの) ・実行時に作られるクリップ、Animator Override Controller の一部の構成、登録していない Controller / .anim ・今の値が0でなくても、アニメーションで0に戻される前提のもの(「値あり」の絞り込みで確認できます) ・コンポーネントの文字列・番号による判定は、制作側ではダミーのコンポーネントで確認したもので、実際の VRChat Avatar Descriptor・VRChat SDK の設定では未検証です。対象を指していない番号や参照のない番号は、使用中にも付け替えにもせず、「どのメッシュ用か判定できない番号参照 N 件」と画面・書き出し後に表示します(消した分だけ番号がずれることがあるので、手動で確認してください) ・「Renderer に差し替える」を OFF にして書き出すと、番号は付け替えられず、消した分だけ番号がずれます ・消したシェイプキーを参照するアニメーションは、そのキーだけ効かなくなります(エラーにはなりません) ・元のメッシュ・FBX は変更しません。ただしプロジェクトウィンドウの Prefab アセット側の Renderer を指定して差し替えると、Prefab ファイルそのものが書き換わります。作ったメッシュのファイルは Ctrl+Z では消えません(不要なら手で削除してください)。同じ元に何度も書き出すと連番のファイルが増えます。作業前にプロジェクトのバックアップをおすすめします ・シーン上の Prefab インスタンスの Renderer を差し替えると、Prefab インスタンスの上書きとして記録されます ・Read/Write が OFF のメッシュは複製できない場合があります(その場合は案内が出ます。メッシュのインポート設定で Read/Write を ON にしてください) ・画面の数字は「差分のある頂点数×約40バイト」のメモリ上の目安で、ファイルサイズとは一致しません ・できないこと:頂点・ポリゴンの削減、テクスチャの圧縮、ビルド時の自動処理(Modular Avatar 等のプラグイン化)、Runtime での処理 【ライセンス】 購入者は、自分の作品(アバター・ワールド・ゲーム等)で自由にお使いいただけます(商用利用も可)。本アセット(ツール本体・ソースコード・サンプル)の再配布・転売・譲渡は禁止です。本ツールで生成したメッシュは、購入者の作品の一部として自由に配布できます。VRChat は VRChat Inc. の、Unity は Unity Technologies の商標または登録商標です。 【姉妹品】 メッシュの形をBoxColliderの組み合わせで近似する LiteColliderMaker(メッシュからBoxColliderを自動生成・Unityエディター拡張)も販売しています。 https://sairollstudio.booth.pm/items/9057301





