채널과 패킹
이 문서를 읽으면 R/G/B/A 채널이 왜 마스크 네 장을 담을 수 있는지, 셰이더가 어느 채널을 읽는지 고르는 방식이 셰이더마다 어떻게 다른지 알 수 있습니다.
채널 네 개 = 마스크 네 장
텍스처 한 픽셀은 R · G · B · A 네 개의 숫자를 담습니다. 컬러 텍스처는 그 넷을 묶어 "색"으로 읽지만, 셰이더가 한 채널만 골라 읽으면 각 채널은 서로 독립된 마스크가 됩니다.
| 채널 | 담을 수 있는 것 |
|---|---|
| R | 마스크 1 |
| G | 마스크 2 |
| B | 마스크 3 |
| A | 마스크 4 |
이렇게 네 장을 한 장에 담는 것이 채널 패킹입니다. 파일 수와 텍스처 메모리가 1/4로 줄고, 드로우콜당 샘플링 횟수도 줄어듭니다.
셰이더가 채널을 고르는 세 가지 방식
여기가 셰이더마다 갈리는 지점입니다. Mask Maker의 컴바이너 자동 최적화는 이 세 방식을 구분해 처리합니다.
| 방식 | 내부 표기 | 셰이더 | 동작 |
|---|---|---|---|
| 채널 벡터 | Vector4Dot | NiloToon | 마스크 슬롯 옆에 (1,0,0,0) 같은 벡터가 있고, 그 벡터와 픽셀을 내적해 채널을 고릅니다. 어느 채널이든 자유 |
| 채널 인덱스 | FloatIndex | Poiyomi 9.x | …Channel 프로퍼티에 0/1/2/3을 넣어 채널을 고릅니다. 어느 채널이든 자유 |
| R 고정 | FixedR | lilToon | 셰이더가 항상 R만 읽습니다. 팩의 R 자리에 배치해야 합니다 |
자유 배치(앞의 둘)는 컴바이너가 그룹을 짜고 남는 채널부터 채우면 됩니다. R 고정(lilToon)은 한 팩에 하나만 들어갈 수 있으므로, 컴바이너가 lilToon 슬롯을 우선 R에 배치합니다.
lilToon은 _AlphaMask를 MainTex의 알파 채널에 구워 슬롯 자체를 비우는 공식 방식을 지원합니다. 컴바이너의 알파 베이크 옵션이 그것입니다 — 마스크 한 장이 통째로 사라집니다.
셰이더가 이미 정해 둔 팩
일부 슬롯은 처음부터 패킹된 형태를 요구합니다. 채널의 뜻이 셰이더에 고정되어 있으므로, 그 순서대로 만들어야 합니다.
| 셰이더 | 슬롯 | 채널 배치 |
|---|---|---|
| MingToon | PBR ▸ Packed Mask | R = 금속 / G = AO / B = 예약 / A = 매끄러움 |
| MingToon | Region ▸ Region Mask | RGBA = 서로 다른 부위 4개 |
| Poiyomi | RGBA Color Masking ▸ Masks | RGBA = 독립 마스크 4개 |
| Poiyomi | Decals ▸ RGBA Mask | R/G/B/A = 데칼 0~3번 |
| Poiyomi | Subsurface Scattering ▸ Color & Thickness | RGB = 색 / A = 두께 |
이런 슬롯은 컴바이너의 채널 패킹(수동 모드)으로 순서를 직접 지정해 만드는 것이 안전합니다.
패킹하면 안 되는 텍스처
컴바이너 자동 최적화는 다음을 자동으로 제외합니다. 제외 목록에 사유가 표시되고, 필요하면 포함으로 되돌릴 수 있습니다.
| 제외 사유 | 이유 |
|---|---|
| 이미 채널 패킹됨 | 채널마다 다른 데이터가 들어 있어 한 채널로 옮길 수 없습니다 |
| 비그레이스케일 | 색 정보를 쓰는 텍스처입니다 (그라데이션 결과물 등) |
| 다중 채널 참조 | 한 텍스처가 여러 채널로 참조되고 있습니다 |
| A 채널 사용 중 | 알파에 이미 데이터가 있습니다 |
채널을 다시 푸는 법
컴바이너의 채널 분리가 패킹된 텍스처를 채널별 그레이스케일 PNG로 되돌립니다. 남의 아바타에서 받은 팩 텍스처를 한 장만 수정하고 싶을 때 씁니다.
→ 컴바이너
꽂을 때 채널을 맞추기
패킹된 마스크를 슬롯에 꽂았는데 엉뚱한 부위에 효과가 나온다면, 슬롯의 채널 선택이 실제 데이터가 든 채널과 다른 것입니다. 컴바이너의 합치기 + 재배정을 쓰면 이 값까지 자동으로 맞춰 줍니다.
→ 문제 해결