컴바이너
이 문서를 읽으면 마스크 여러 장을 한 장으로 줄이는 법과, 아바타 전체를 스캔해 팩을 만드는 자동 최적화를 알 수 있습니다. 팩을 가리키도록 머티리얼을 다시 쓰는 것까지 맡길 수도 있는데, 그건 선택입니다.
만드는 것: 채널이 패킹된 텍스처. 원하면 그것을 가리키도록 머티리얼을 다시 쓰는 것까지
세 가지 수동 기능
| 기능 | 하는 일 |
|---|---|
| 채널 패킹 | 마스크 4장을 R/G/B/A 채널에 하나씩 담아 한 장으로 만듭니다 |
| 마스크 합치기 | 여러 마스크의 흰 영역을 더해 한 장으로 만듭니다 |
| 채널 분리 | 패킹된 텍스처를 채널별 그레이스케일 PNG로 풀어냅니다 |
수동 저장 시 저장 위치 라벨로 어디에 저장되는지 미리 확인할 수 있고, 저장 전 덮어쓰기 확인 옵션으로 매번 물어보게 할 수 있습니다.
→ 채널과 패킹
자동 최적화
아바타의 마스크를 전부 스캔해 4장씩 묶고 팩 텍스처를 저장합니다. 이어서 각 머티리얼의 슬롯과 채널을 팩에 맞춰 다시 쓸 수도 있는데, 그 단계는 실행 전에 항상 계획을 보여주고 Ctrl+Z 한 번으로 되돌아갑니다.
1. 스캔
아바타(또는 헤어) 오브젝트를 선택합니다.
| 참조 머티리얼 수 | 동작 |
|---|---|
| 50개 이하 | 선택이 바뀔 때마다 자동 스캔 |
| 50개 초과 | 스캔 버튼을 직접 눌러야 합니다 |
셰이더별 프로파일로 마스크 슬롯을 수집합니다.
| 프로파일 | 슬롯 수 | 채널 방식 |
|---|---|---|
| NiloToon | 35 | 채널 벡터 — 자유 배치 |
| Poiyomi | 29 | 채널 인덱스 — 자유 배치 |
| lilToon | 6 | R 고정 + 알파 베이크 |
2. 제외
이미 최적화된 텍스처는 자동으로 제외되고, 목록에 제외 사유가 표시됩니다.
| 제외 사유 | 설명 |
|---|---|
| 채널 패킹됨 | 채널마다 다른 데이터가 들어 있음 |
| 비그레이스케일 | 색 정보를 쓰는 텍스처 |
| 다중 채널 참조 | 한 텍스처가 여러 채널로 참조되고 있음 |
필요하면 제외 목록에서 포함을 눌러 다시 넣을 수 있습니다.
3. 그룹 편집
4장씩 자동 그룹이 제안됩니다. 썸네일과 채널 배지로 확인합니다.
| 상황 | 처리 |
|---|---|
| 해상도가 다름 | 큰 쪽 기준으로 자동 리사이즈 |
| 종횡비가 섞임 | 경고 표시 |
| 내용이 완전히 같은 중복 파일 | 자동으로 한 장으로 통합 (색상 바리에이션 머티리얼에 효과적) |
행을 다른 그룹 카드나 '새 그룹'으로 드래그하거나, 드롭다운으로 옮길 수 있습니다.
4. 실행 계획
합치기 + 재배정 전에 실행 계획 카드에서 생성될 팩 파일과 덮어쓰기 배지를 확인합니다. 계획을 보지 않고 실행되는 일은 없습니다.
5. 합치기 + 재배정
팩 텍스처를 저장하고, 각 머티리얼의 텍스처 슬롯 · 채널(R/G/B/A) · 활성화 토글 · 셰이더 키워드를 그 팩에 맞춰 다시 씁니다. 머티리얼을 건드리는 단계지만 한 번의 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" 셋 중 하나 (문자열) |
툴 헤더의 ? 버튼 → 셰이더별 연결표에서 프로퍼티 이름을 클릭하면 선택되어 복사할 수 있습니다. 이 사이트의 셰이더 연결 표에도 같은 이름이 있습니다.
저장
- 같은 이름의 파일이 있으면 덮어쓰기 / 새 이름 / 취소를 묻습니다.
- 결과는 핑 버튼과 함께 화면에 남습니다.