마스크 텍스처란
이 문서를 읽으면 셰이더가 마스크를 어떻게 읽는지, 왜 흑백인지, 왜 sRGB를 꺼야 하는지 알 수 있습니다. 툴 안에서는 헤더의 ? 버튼으로 같은 내용을 볼 수 있습니다.
색이 아니라 숫자를 저장하는 그림
마스크 텍스처는 색을 저장하는 그림이 아니라 '숫자'를 저장하는 그림입니다. 셰이더는 이 그림의 밝기(0~1)를 픽셀마다 읽어서 "이 부분에 효과를 얼마나 적용할지" 를 결정합니다.
| 마스크 값 | 뜻 |
|---|---|
| 검정 (0) | 적용 안 됨 — 원본 그대로 |
| 회색 (0.5) | 절반 적용 |
| 흰색 (1) | 완전 적용 |
그래서 마스크에는 "예쁜 색"이 필요 없습니다. 필요한 것은 어디가 얼마나 밝은가 뿐입니다.
텍스처 하나에 마스크 네 장
텍스처 한 장은 R / G / B / A 네 채널을 갖고 있고, 마스크는 보통 그중 한 채널만 씁니다. 그레이스케일 이미지는 R=G=B라서 어느 채널을 읽어도 값이 같습니다.
여기서 최적화가 나옵니다 — 마스크 네 장을 각각 R, G, B, A에 하나씩 담으면 파일 한 장에 마스크 네 개가 들어갑니다. 그 일을 하는 것이 컴바이너 탭입니다. → 채널과 패킹
저장할 때 반드시 확인할 것
마스크는 색이 아니라 숫자입니다. sRGB 체크가 켜져 있으면 Unity가 감마 보정을 걸어 숫자값이 틀어집니다. 0.5로 구운 회색이 셰이더에서 0.5로 읽히지 않습니다.
텍스처를 선택 → Inspector에서 sRGB (Color Texture) 끄기 → Apply.
Mask Maker는 굽는 시점에 이미 올바른 설정으로 저장합니다 — 마스크는 리니어, 컬러(그라데이션·페인트 컬러 모드)는 sRGB. 외부에서 가져온 마스크를 쓸 때만 직접 확인하면 됩니다. → sRGB와 임포트 설정
해상도
보통 512~1024px로 충분합니다. 마스크는 형태의 경계만 중요하고 세부 묘사가 필요 없습니다. 경계가 계단처럼 보인다면 해상도를 올리기 전에 dilate(아웃라인 확장) 값을 먼저 키워 보세요. → 문제 해결
어느 탭에서 어떤 마스크를 만드나
| 탭 | 만드는 것 | 대표 용도 |
|---|---|---|
| MatCap 광택 | 맷캡 하이라이트(광택 모드) 또는 메쉬 오목한 부분(AO/캐비티 모드)의 흑백 마스크 | 광택/스페큘러/림 마스크, 금속 부위 지정 |
| 그라데이션 | 월드 방향 그라데이션 컬러 텍스처 | 높이 기반 색 틴트(옴브레 염색) |
| 브릿지+영역마스크 | 랜덤 가닥 모드: 랜덤 선택된 가닥의 흑백 마스크 / 수동 선택 모드: 클릭한 가닥만 흰색인 마스크 | 브릿지(하이라이트) 염색용 2nd/3rd 레이어, 특정 부위만 지정하는 스태킹 레이어 마스크 |
| 슬롯 분리 | 마스크가 아니라 메쉬 자체를 다른 슬롯으로 분리 | 완전히 다른 셰이더를 줄 부위 분리 |
| 페인트 | 브러시로 직접 그린 마스크 | 자동 생성이 안 되는 임의 모양 전부 |
| 컴바이너 | 마스크 여러 장을 R/G/B/A로 합친 1장 | 파일 수 줄이기, 마스크 합치기/채널 분리 |
셰이더는 마스크를 어디서 읽나
셰이더마다 마스크를 받는 슬롯(프로퍼티)이 다릅니다. 같은 "광택 마스크"라도 lilToon은 MatCap ▸ Mask, NiloToon은 MatCap Additive ▸ Mask Map에서 읽습니다.