본문으로 건너뛰기

채널과 패킹

이 문서를 읽으면 R/G/B/A 채널이 왜 마스크 네 장을 담을 수 있는지, 셰이더가 어느 채널을 읽는지 고르는 방식이 셰이더마다 어떻게 다른지 알 수 있습니다.

채널 네 개 = 마스크 네 장​

텍스처 한 픽셀은 R · G · B · A 네 개의 숫자를 담습니다. 컬러 텍스처는 그 넷을 묶어 "색"으로 읽지만, 셰이더가 한 채널만 골라 읽으면 각 채널은 서로 독립된 마스크가 됩니다.

채널담을 수 있는 것
R마스크 1
G마스크 2
B마스크 3
A마스크 4

이렇게 네 장을 한 장에 담는 것이 채널 패킹입니다. 파일 수와 텍스처 메모리가 1/4로 줄고, 드로우콜당 샘플링 횟수도 줄어듭니다.

셰이더가 채널을 고르는 세 가지 방식​

여기가 셰이더마다 갈리는 지점입니다. Mask Maker의 컴바이너 자동 최적화는 이 세 방식을 구분해 처리합니다.

방식내부 표기셰이더동작
채널 벡터Vector4DotNiloToon마스크 슬롯 옆에 (1,0,0,0) 같은 벡터가 있고, 그 벡터와 픽셀을 내적해 채널을 고릅니다. 어느 채널이든 자유
채널 인덱스FloatIndexPoiyomi 9.x…Channel 프로퍼티에 0/1/2/3을 넣어 채널을 고릅니다. 어느 채널이든 자유
R 고정FixedRlilToon셰이더가 항상 R만 읽습니다. 팩의 R 자리에 배치해야 합니다

자유 배치(앞의 둘)는 컴바이너가 그룹을 짜고 남는 채널부터 채우면 됩니다. R 고정(lilToon)은 한 팩에 하나만 들어갈 수 있으므로, 컴바이너가 lilToon 슬롯을 우선 R에 배치합니다.

lilToon의 알파 베이크

lilToon은 _AlphaMask를 MainTex의 알파 채널에 구워 슬롯 자체를 비우는 공식 방식을 지원합니다. 컴바이너의 알파 베이크 옵션이 그것입니다 — 마스크 한 장이 통째로 사라집니다.

셰이더가 이미 정해 둔 팩​

일부 슬롯은 처음부터 패킹된 형태를 요구합니다. 채널의 뜻이 셰이더에 고정되어 있으므로, 그 순서대로 만들어야 합니다.

셰이더슬롯채널 배치
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 = 두께

이런 슬롯은 컴바이너의 채널 패킹(수동 모드)으로 순서를 직접 지정해 만드는 것이 안전합니다.

패킹하면 안 되는 텍스처​

컴바이너 자동 최적화는 다음을 자동으로 제외합니다. 제외 목록에 사유가 표시되고, 필요하면 포함으로 되돌릴 수 있습니다.

제외 사유이유
이미 채널 패킹됨채널마다 다른 데이터가 들어 있어 한 채널로 옮길 수 없습니다
비그레이스케일색 정보를 쓰는 텍스처입니다 (그라데이션 결과물 등)
다중 채널 참조한 텍스처가 여러 채널로 참조되고 있습니다
A 채널 사용 중알파에 이미 데이터가 있습니다

채널을 다시 푸는 법​

컴바이너의 채널 분리가 패킹된 텍스처를 채널별 그레이스케일 PNG로 되돌립니다. 남의 아바타에서 받은 팩 텍스처를 한 장만 수정하고 싶을 때 씁니다.

→ 컴바이너

꽂을 때 채널을 맞추기​

패킹된 마스크를 슬롯에 꽂았는데 엉뚱한 부위에 효과가 나온다면, 슬롯의 채널 선택이 실제 데이터가 든 채널과 다른 것입니다. 컴바이너의 합치기 + 재배정을 쓰면 이 값까지 자동으로 맞춰 줍니다.

→ 문제 해결