コンバイナー
このページを読むと 複数のマスクを 1 枚に削減する方法と、アバター全体をスキャンしてパックを作成する自動最適化が分かります。パックを指す方向にマテリアルを書き直すこともできますが、それは選択肢です。
作成するもの: チャンネルがパック済みのテクスチャ。必要に応じてそれを指し示すように修正されたマテリアル
3 つの手動機能
| 機能 | 動作 |
|---|---|
| チャンネルパッキング | マスク 4 枚を R/G/B/A チャンネルに 1 つずつ格納して 1 枚にする |
| マスク合成 | 複数マスクの白い領域を足して 1 枚にする |
| チャンネル分割 | パック済みテクスチャをチャンネルごとのグレースケール PNG に展開 |
手動保存時は保存場所ラベルでどこに保存されるかを事前確認でき、保存前の上書き確認オプションで毎回尋ねるようにできます。
自動最適化
アバターのマスクをすべてスキャンして 4 枚ずつ束ね、パックテクスチャを保存します。その後、各マテリアルのスロットとチャンネルを パックに合わせて書き直すこともできますが、その段階は実行前に常にプランを表示し、Ctrl+Z 1 回で戻します。
1. スキャン
アバター(またはヘア)オブジェクトを選択します。
| 参照マテリアル数 | 動作 |
|---|---|
| 50 個以下 | 選択が変わるたびに自動スキャン |
| 50 個超 | スキャンボタンを直接クリックする必要があります |
シェーダー別プロファイルでマスクスロットを収集します。
| プロファイル | スロット数 | チャンネル方式 |
|---|---|---|
| NiloToon | 35 | チャンネルベクトル — 自由配置 |
| Poiyomi | 29 | チャンネルインデックス — 自由配置 |
| lilToon | 6 | R 固定 + アルファベイク |
2. 除外
既に最適化されたテクスチャは自動的に除外され、リストに除外理由が表示されます。
| 除外理由 | 説明 |
|---|---|
| チャンネルパック済み | チャンネルごとに異なるデータが入っている |
| グレースケール以外 | 色情報を使用するテクスチャ |
| 複数チャンネル参照 | 1 テクスチャが複数のチャンネルで参照されている |
必要に応じて除外リストから含めるをクリックして再度追加できます。
3. グループ編集
4 枚ずつの自動グループが提案されます。サムネイルとチャンネルバッジで確認します。
| 状況 | 処理 |
|---|---|
| 解像度が異なる | 大きい方を基準に自動リサイズ |
| アスペクト比が混在 | 警告表示 |
| 内容が全く同じ重複ファイル | 自動的に 1 枚に統合(色バリエーションマテリアルに効果的) |
行を別のグループカードまたは『新規グループ』にドラッグするか、ドロップダウンで移動できます。
4. 実行計画
合成 + 再割り当て前に実行計画カードで生成されるパックファイルと上書きバッジを確認します。
5. 合成 + 再割り当て
パックテクスチャを保存して、各マテリアルのテクスチャスロット · チャンネル(R/G/B/A) · 有効化切り替え · シェーダーキーワードを自動的に変更します。マテリアルを変更する段階ですが、1 回の Ctrl+Z で全体が戻ります。 パックテクスチャだけが欲しい場合は、手動チャンネルパッキングを使ってください。
結果はピングボタンと一緒に画面に残り、再スキャンで最初から開始できます。
結果を確認した後、直接整理してください。ツールが削除しない理由は、戻す必要が生じた場合に元のファイルがないと復旧が不可能だからです。
シェーダー別処理差
| シェーダー | 処理 |
|---|---|
| NiloToon | チャンネルベクトルを持つマスクスロットをスキャン → RGBA パック + チャンネル自動再割り当て |
| Poiyomi 9.x | …Channel インデックスを持つマスクスロットをスキャン → パック + チャンネルインデックス再割り当て |
| lilToon | R 固定サンプリングなのでパックのR 位置に優先配置。アルファベイクオプションで _AlphaMask を MainTex アルファに焼き込み、スロットを空にします(lilToon 公式方式) |
シェーダープロファイル(JSON)
ビルトイン 3 種(NiloToon · Poiyomi · lilToon)以外のシェーダーを使用するか、ビルトインが見落とした スロットを追加したい場合に使用します。
| 項目 | 値 |
|---|---|
| フォルダ | <プロジェクト>/MaskMakerProfiles/*.json — Assets 外なので、パッケージアップデートで削除されません |
| 組み込みを書き出し | NiloToon/Poiyomi/lilToon デフォルトプロファイルを JSON テンプレートとして保存。コピーして編集してください |
| 再読み込み | フォルダを再スキャン |
| 名前衝突 | 同じ名前のユーザープロファイルがビルトインをその場で上書きします(マッチング優先順位は保持)。警告行で表示 |
ファイル読み込みは最初のスキャン 1 回またはボタンをクリックした時のみ実行されます。
スキーマ
{
"name": "MyToon",
"shaderNameContains": "MyToon",
"caseInsensitiveMatch": true,
"enableLilAlphaBake": false,
"slots": [
{
"texProp": "_MyMaskTex",
"channelProp": "_MyMaskChannel",
"kind": "FloatIndex"
},
{
"texProp": "_MyRimMask",
"channelProp": "_MyRimMaskChannelVector",
"kind": "Vector4Dot"
},
{
"texProp": "_MyFixedMask",
"channelProp": null,
"kind": "FixedR"
}
]
}
| フィールド | 意味 |
|---|---|
name | プロファイル名。ビルトインと同じ名前なら上書き |
shaderNameContains | マテリアルのシェーダー名にこの文字列が入っていれば、このプロファイルを適用 |
caseInsensitiveMatch | 大文字小文字を無視して比較するか |
enableLilAlphaBake | true ならば、このプロファイルにマッチしたマテリアルも lilToon アルファベイク候補として収集 |
slots[].texProp | マスクテクスチャプロパティ名(例:_EmissionMask) |
slots[].channelProp | チャンネルを選択するプロパティ名。kind が FixedR ならば使用しません |
slots[].kind | "Vector4Dot" / "FloatIndex" / "FixedR" の 3 つのいずれか(文字列) |
ツールヘッダーの**?** ボタン → シェーダー別接続表でプロパティ名をクリックするとそれが選択されてコピー可能になります。このサイトの シェーダー接続 表にも同じ名前があります。
保存
- 同じ名前のファイルがある場合は上書き / 新しい名前 / キャンセルを尋ねます。
- 結果はピングボタンと一緒に画面に残ります。