RGBA 마스크 패킹

같은 크기 이미지의 밝기를 R·G·B·A에 원하는 순서로 넣으세요.

채널 패킹은 따로 있는 회색 맵을 엔진이 읽는 순서대로 PNG 한 장의 R·G·B·A에 넣는 일입니다. Unity HDRP 마스크 맵은 R 메탈릭·G 앰비언트 오클루전·B 디테일 마스크·A 스무스니스, Unity URP 채널 패킹 텍스처는 R 메탈릭·G 오클루전·A 스무스니스, glTF 2.0과 Godot 4용 ORM은 R 오클루전·G 러프니스·B 메탈릭입니다. 크기가 같은 회색 맵을 네 장까지 넣고 프리셋을 고르거나 채널을 직접 배치한 뒤, 엔진이 러프니스 대신 스무스니스를 원하는 채널에 "반전"을 체크하고 …-mask.png를 받으세요. 패킹된 바이트는 측정했고 엔진 가져오기는 실행하지 않았습니다.

이미지을(를) 여기에 놓으세요여러 개를 한 번에 처리할 수 있습니다
업로드 없음 · 이 기기에서 처리

패커가 채널을 채우는 방식

입력은 텍셀마다 회색 값 하나로 읽힙니다. Rec. 709 휘도, 곧 0.2126 R + 0.7152 G + 0.0722 B를 반올림한 값입니다. 진짜 회색 맵(R = G = B)이면 저장된 값과 정확히 같으므로 회색 바이트가 바뀌지 않고 채널에 들어갑니다. 색이 있는 이미지는 휘도로 섞여 버리는데, 데이터 맵에서 원하는 결과는 거의 아닙니다.

프리셋은 입력이 들어갈 자리만 정합니다. 입력은 넣은 순서대로 의미 있는 채널을 채우고, 배치가 무시하는 채널은 0, 쓰지 않는 알파는 255로 써서 파일이 불투명하게 유지됩니다. 자동 반전은 없습니다. Unity의 스무스니스는 1 − 러프니스이므로 러프니스 맵을 가졌다면 스무스니스 채널에 "반전"(255 − 값)을 체크합니다.

여기서 알파는 데이터입니다. HDRP·URP 텍스처에서 스무스니스 0은 알파 0입니다. 패커는 캔버스가 아니라 자체 인코더로(32줄씩) PNG를 쓰므로 그런 텍셀 아래의 메탈릭·AO 바이트가 살아남습니다. 입력은 브라우저 이미지 디코더로 읽으므로 투명도가 있는 파일보다 평범한 회색 PNG를 넣으세요.

데이터로 가져오세요. Unity HDRP 문서는 마스크 맵의 sRGB (Color Texture)를 끄고 Texture Type을 Default로 두라고, URP 문서는 채널 패킹 텍스처의 sRGB를 끄라고 안내하며, glTF 2.0은 메탈릭·러프니스 값이 리니어여야 한다고 규정합니다.

마스크 맵
Unity HDRP의 패킹 텍스처. R 메탈릭·G AO·B 디테일 마스크·A 스무스니스.
ORM
R·G·B에 오클루전·러프니스·메탈릭. glTF 2.0의 순서이며 Godot ORMMaterial3D도 같습니다.
상수 채널
배치상 맵이 필요 없어 전체를 0이나 255로 쓴 채널.
반전
255 − 값. 1 − x의 8비트 형태로, 러프니스와 스무스니스를 서로 바꿉니다.

예시: 같은 맵 세 장을 세 가지 배치로

텍셀 하나의 회색 맵 세 장: AO 10, 러프니스 80, 메탈릭 220. 배치 줄은 패커가 보여 주는 형식입니다(숫자 = 넣은 파일, ⁻ = 반전).

ORM (glTF 2.0, Godot 4)   파일: ao, roughness, metallic     R←1 · G←2 · B←3 · A←255   → (10, 80, 220, 255)
Unity HDRP 마스크 맵      파일: metallic, ao, roughness     R←1 · G←2 · B←0 · A←3⁻    → (220, 10, 0, 175)
Unity URP 패킹            파일: metallic, ao, roughness     R←1 · G←2 · B←0 · A←3⁻    → (220, 10, 0, 175)

스무스니스 = 255 − 80 = 175  (1 − 0.314 = 0.686)
랩 측정: ORM 프리셋 (10, 80, 220, 255), 직접 배치 (220, 10, 80, 0), R 반전 (245, 80, 220, 255)

디테일 마스크가 없어서 HDRP와 URP 줄이 같습니다. HDRP는 B를 디테일 마스크로 읽고 URP는 무시합니다. HDRP 프리셋에 파일을 세 장만 넣으면 세 번째 파일이 B에 들어가므로, 위처럼 B를 0으로, A를 3번 파일 반전으로 바꾸세요.

회색 맵마다 들어갈 곳

가진 회색 맵Unity HDRP 마스크 맵Unity URP 채널 패킹glTF 2.0 / Godot ORM
메탈릭RRB
앰비언트 오클루전GG(텍스처를 Occlusion에도 지정하면 읽음)R
러프니스A, 반전(스무스니스)A, 반전(스무스니스)G
디테일 마스크B——
채널에 넣을 맵이 없음상수 0(예: 디테일 없는 B)B = 0A = 255(사용 안 함)

Nerulio의 "Unity 메탈릭+스무스니스" 프리셋은 내장 Standard 셰이더 문서(G·B 사용 안 함)를 따라 G에 0을 씁니다. URP에서 오클루전도 쓰려면 직접 배치를 골라 AO 파일을 G에 두세요.

받게 되는 파일

파일용도
rock_metallic-mask.png패킹한 텍스처. 처음 넣은 파일 이름을 따릅니다. 8비트 RGBA PNG이며 알파 0인 곳의 RGB도 유지됩니다.
rock_metallic-mask-channels.zip선택 확인용: 패킹한 파일을 채널 분리기로 열어 네 평면을 저장하고 입력과 비교합니다.

패킹한 텍스처를 엔진에서 쓰기

엔진 문서에 있는 단계이며 Nerulio가 이 가져오기를 실행하지는 않았습니다.

  1. Unity HDRP: PNG를 가져와 sRGB (Color Texture)를 끄고 Texture Type을 Default로 둔 뒤, HDRP Lit 머티리얼의 Surface Inputs에서 Mask Map에 지정합니다. 마스크 맵을 지정하면 Metallic·Smoothness·AO Remapping 슬라이더가 나타납니다.
  2. Unity URP: sRGB (Color Texture)를 끄고 가져와 Lit 머티리얼의 Workflow Mode를 Metallic으로 두고, 텍스처를 Metallic Map과 Occlusion Map에 지정한 뒤 Smoothness › Source는 기본값 Metallic Alpha로 둡니다.
  3. Godot 4: ORMMaterial3D를 만들고 ORM PNG를 ORM 텍스처로 지정합니다. StandardMaterial3D도 ao_texture_channel을 Red, roughness_texture_channel을 Green, metallic_texture_channel을 Blue로 두면 같은 파일을 읽습니다.
  4. glTF 2.0: ORM 이미지를 머티리얼의 metallicRoughness 텍스처로, 오클루전을 담았다면 오클루전 텍스처로도 참조합니다. 베이스 컬러는 별도의 sRGB 이미지로 둡니다.

결과 확인

  • 패킹한 PNG를 같은 배치로 채널 분리기에서 엽니다. 각 평면이 넣은 회색 맵과 같아야 하고(기능 점검에서 ambientCG 회색 맵으로 바이트 동일 확인), 반전한 채널은 255 − 값이어야 합니다.
  • 상수 채널은 채널 통계에서 최소 = 최대(0 또는 255)로 보입니다.
  • 엔진에서 거친 곳은 흐리게, 연마된 곳은 날카롭게 보여야 합니다. 반대라면 스무스니스 채널을 반전하지 않은 것입니다.

문제 해결

증상유력한 원인확인 방법해결
Unity에서 거친 곳이 매끈해 보임러프니스를 반전 없이 알파에 넣음A를 분리하면 255 − 러프니스가 아니라 러프니스 그대로A의 "반전"을 체크하고 다시 패킹
맵이 엉뚱한 채널에 들어감입력은 넣은 순서대로 채널을 채움미리보기 아래 배치 줄(예: R←1 · G←2 · B←3 · A←255)채널마다 선택 상자에서 맞는 파일 고르기
"All channel inputs must have the same dimensions"회색 맵 하나의 크기가 다름파일 목록에 크기가 나옴모든 맵을 먼저 같은 크기로 내보내기
URP 머티리얼이 주변광에서 어두워짐텍스처를 Occlusion에 지정했는데 Unity 프리셋이 G에 0을 씀G를 분리하면 최소 = 최대 = 0직접 배치로 AO 파일을 G에 두거나 Occlusion Map을 비워 두기
가져온 뒤 전체가 너무 번들거리거나 무광패킹 텍스처를 sRGB 켠 채로 가져옴Unity 텍스처의 sRGB (Color Texture) 체크sRGB 끄기. 값은 데이터임
채널 값이 예상과 다름색이 있는 입력이 휘도로 줄어듦입력이 회색이 아님(R·G·B가 다름)색이 있는 원본을 먼저 실제 채널로 분리한 뒤 그 평면을 패킹

다른 방법

방법이럴 때 더 낫습니다
패킹 없이 Godot 채널 선택 사용Godot 전용. StandardMaterial3D가 텍스처 한 장의 원하는 채널에서 맵을 읽으므로, 순서만 다른 기존 패킹 파일은 다시 패킹할 필요가 없습니다.
텍스처링 프로그램의 내보내기 프리셋맵을 그린 도구가 엔진 배치로 바로 내보낼 수 있을 때. Godot 문서는 ORM용으로 Substance Painter와 ArmorPaint(Unreal Engine 프리셋)를 꼽습니다.
Shader Graph (Unity)어느 프리셋에도 없는 배치를 쓸 때. Unity URP 문서도 채널을 다르게 패킹했다면 Shader Graph를 쓰라고 안내합니다.

버전과 출처

텍스처 랩에서 측정(docs/TEXTURE-LAB.md): AO 10 / 러프니스 80 / 메탈릭 220에 ORM 프리셋을 쓰면 랩 안에서도 이 페이지에서도 (10, 80, 220, 255). 직접 배치는 (220, 10, 80, 0), R 반전은 (245, 80, 220, 255). 브라우저 기능 점검은 ambientCG 회색 맵 세 장을 패킹해 채널마다 입력과 바이트가 같음을 확인합니다. 배치는 아래 문서(Godot ORM 순서는 엔진 소스)에서 왔으며 엔진 가져오기는 실행하지 않았습니다.

참고한 공식 문서

예제

원본 도형 샘플 · 96 × 64
원본 도형 샘플 · 96 × 64
도구로 처리한 샘플 · 96 × 64
도구로 처리한 샘플 · 96 × 64

이 도구로 만든 예제입니다. ZIP 도구는 미리보기를 표시하며 전체 파일은 내려받은 압축 파일에서 확인하세요.

RGBA 마스크 패킹

같은 크기 이미지의 밝기를 R·G·B·A에 원하는 순서로 넣으세요.

사용 방법

  1. 이미지 넣기
  2. 필요한 설정을 조정하고 결과 확인
  3. 다운로드로 새 파일 저장

지원 형식

PNG / JPG / WebP / AVIF / HEIC → PNG — 입력 디코딩은 브라우저 지원과 추가 엔진 사용 여부에 따라 다릅니다.

이 도구로 할 수 있는 일

같은 크기 이미지의 밝기를 R·G·B·A에 원하는 순서로 넣으세요.

처리 방식과 검증 수준

advanced · sequential row-transfer channel packing / incremental PNG. 품질 검증을 진행 중입니다. Pro·Flagship 수준은 아직 입증되지 않았습니다.

저장 전에 확인하세요

입력 크기가 같아야 합니다. 색 관리 없는 캔버스의 바이트 밝기를 사용합니다.

자주 묻는 질문

이 도구의 한계는 무엇인가요?

입력 크기가 같아야 합니다. 색 관리 없는 캔버스의 바이트 밝기를 사용합니다.

파일이 서버에 업로드되나요?

이 도구에서 연 파일은 서버에 업로드하지 않고 사용자 기기에서 처리합니다. 커뮤니티 글에 직접 첨부하는 이미지는 별도로 업로드됩니다. 일부 엔진과 모델은 외부에서 내려받으므로 IP 주소 등 연결 정보가 해당 서비스에 전달됩니다.

작업이 자동 저장되나요?

아니요. 이미지와 편집 상태는 이 탭에 있고 미디어 결과는 기기 내 임시 저장소를 사용할 수 있습니다. 언어를 바꿔도 작업은 유지되지만 새로고침, 탭 닫기, 다른 페이지로 이동하면 사라질 수 있습니다.