メインコンテンツまでスキップ

チャンネルとパッキング

このページを読むと R/G/B/A チャンネルがマスク 4 枚をなぜ格納できるのか、シェーダーがチャンネルを読む方法がシェーダーごとにどのように異なるのかが分かります。

チャンネル 4 個 = マスク 4 枚​

テクスチャ 1 ピクセルは R · G · B · A 4 つの数字を格納します。カラーテクスチャはそれら 4 つをまとめて「色」として読みますが、シェーダーが1 チャンネルのみを選択して読む場合、各チャンネルは互いに独立したマスクになります。

チャンネル格納可能
Rマスク 1
Gマスク 2
Bマスク 3
Aマスク 4

このように 4 枚を 1 枚に格納することがチャンネルパッキングです。ファイル数およびテクスチャメモリが 1/4 に削減され、ドロー呼び出しごとのサンプリング回数も削減されます。

シェーダーがチャンネルを選択する 3 つの方法​

ここがシェーダーごとに異なる点です。Mask Maker の コンバイナー 自動最適化は、この 3 つの方法を区別して処理します。

方法内部表記シェーダー動作
チャンネルベクトルVector4DotNiloToonマスクスロットの隣に (1,0,0,0) のようなベクトルがあり、そのベクトルとピクセルを内積してチャンネルを選択します。任意のチャンネル
チャンネルインデックスFloatIndexPoiyomi 9.x…Channel プロパティに 0/1/2/3 を設定してチャンネルを選択します。任意のチャンネル
R 固定FixedRlilToonシェーダーが常に R のみを読みます。パックのR 位置に配置する必要があります

自由配置(前の 2 つ)はコンバイナーがグループを構成して空いているチャンネルから埋めれば構いません。R 固定(lilToon)は 1 つのパックに 1 つのみ格納できるため、コンバイナーは lilToon スロットを優先して R に配置します。

lilToon のアルファベイク

lilToon は _AlphaMask を MainTex のアルファチャンネルに焼き込む公式方式をサポートしています。コンバイナーのアルファベイクオプションがそれです — マスク 1 枚がすべて削除されます。

シェーダーが既に定めたパック​

一部のスロットは、最初からパック形式を要求します。チャンネルの意味がシェーダーに固定されているため、その順序で作成する必要があります。

シェーダースロットチャンネル配置
MingToonPBR ▸ Packed MaskR = メタリック / G = AO / B = 予約 / A = ラフネス
MingToonRegion ▸ Region MaskRGBA = 異なる部位 4 つ
PoiyomiRGBA Color Masking ▸ MasksRGBA = 独立マスク 4 個
PoiyomiDecals ▸ RGBA MaskR/G/B/A = デカール 0~3 番
PoiyomiSubsurface Scattering ▸ Color & ThicknessRGB = 色 / A = 厚さ

このようなスロットは、コンバイナーのチャンネルパッキング(手動モード)で順序を直接指定して作成する方が安全です。

パッキングしてはいけないテクスチャ​

コンバイナー自動最適化は以下を自動的に除外します。除外リストに理由が表示され、必要に応じて含めるで戻すことができます。

除外理由理由
既にチャンネルパック済みチャンネルごとに異なるデータが入っていて、1 チャンネルに移せません
グレースケール以外色情報を使用するテクスチャです(グラデーション結果など)
複数チャンネル参照1 テクスチャが複数のチャンネルで参照されています
A チャンネル使用中アルファに既にデータがあります

チャンネルを再度展開する方法​

コンバイナーのチャンネル分割がパック済みテクスチャをチャンネルごとのグレースケール PNG に戻します。他人のアバターから受け取ったパックテクスチャで 1 枚のみ修正したい場合に使用します。

→ コンバイナー

挿入時にチャンネルを一致させる​

パック済みマスクをスロットに挿入したが、エフェクトが予期しない部位に表示される場合、スロットのチャンネル選択が実際のデータが入っているチャンネルと異なることが考えられます。コンバイナーのパック + 再割り当てを使用すれば、この値も自動的に一致させられます。

→ トラブルシューティング