무엇을 어떤 기준으로 점검하나
이름으로 정하는 역할. 파일 이름을 소문자로 바꾸고 구분자를 _로 통일한 뒤, 더 구체적인 것부터 처음 맞는 토큰을 씁니다. 패킹(orm·arm·rma·mra·maskmap·mask), 알베도(albedo·basecolor·diffuse·color 등), 노멀(normalgl·normaldx·normal·nrm·n), 러프니스, 스무스니스(gloss), 메탈릭, AO(ao·occlusion·ambientocclusion), 하이트(height·displacement·bump), 에미션, 불투명도, 스페큘러 순입니다. 한두 글자 토큰(_n·_m·_r)은 신뢰도 낮음으로 봅니다. 역할은 모두 선택 상자라서 파일 이름을 바꾸지 않고 잘못된 추측을 고치면 됩니다.
누락은 워크플로가 정합니다. 개별 맵(glTF·공통): 알베도 필수, 노멀·러프니스·메탈릭 권장. Unity HDRP: 알베도와 마스크 맵 필수, 노멀 권장. Unity URP: 알베도 필수, 노멀·메탈릭 권장. Godot ORM·Unreal ORM: 알베도 필수, 노멀과 ORM 텍스처 권장이며, 러프니스와 메탈릭은 있는데 ORM이 없으면 그냥 "누락" 대신 "패킹 가능"이 나옵니다. 러프니스 맵은 스무스니스를, 스무스니스 맵은 러프니스를 대신합니다.
추측이 아니라 측정. 단일 채널 역할(러프니스·메탈릭·AO·하이트·불투명도)이 RGB로 저장돼 있을 때, 어느 텍셀도 채널 차이가 2를 넘지 않으면 "RGB로 저장된 회색", 넘으면 "채널이 서로 다름"(패킹된 것일 가능성)으로 보고합니다. 노멀맵은 텍셀마다 디코딩해, 길이가 1에서 0.12보다 멀면 단위 밖 샘플로 셉니다. 단위 밖이 1% 이하이고 파랑이 128 미만(표면 안쪽을 향하는 벡터)인 곳이 없어야 통과입니다. 다른 역할로 지정됐는데 노멀맵 시험(단위 밖 5% 이하, 음의 파랑 0.1% 이하)을 통과하면 "노멀맵처럼 보임"으로 알립니다.
2의 거듭제곱은 오류가 아니라 경고입니다. glTF 2.0은 샘플러가 반복하거나 밉맵을 쓸 때, 지원이 제한된 플랫폼에서는 2의 거듭제곱이 아닌 텍스처의 크기를 바꾸는 것이 좋다(SHOULD)고 하고, Unity 임포터에는 그런 텍스처의 크기를 조정하는 Non Power of 2 옵션이 있습니다. 중요한지는 대상에 따라 다르므로 검사기는 알리기만 하고 판단은 맡깁니다.
- 워크플로
- 엔진 머티리얼이 기대하는 맵 구성(패킹 방식 포함).
- 세트 이름
- 파일 이름에서 역할 토큰을 뺀 나머지. 한 번에 넣은 파일의 세트 이름이 다르면 "이름 불일치"가 나옵니다.
- 단위 밖 샘플
- 디코딩한 노멀의 길이가 1과 0.12보다 더 차이 나는 샘플.
- 2의 거듭제곱
- 2ⁿ 픽셀 크기: 256, 512, 1024, 2048 …
예시: Godot 4 ORM으로 점검한 바위 세트
PNG 네 장을 함께 넣고 워크플로를 Godot 4 ORM으로 골랐을 때 검사기가 돌려주는 결과입니다.
rock_basecolor.png 2048 × 2048 albedo
rock_normal.png 2048 × 2048 normal
rock_roughness.png 1000 × 1000 roughness
rock_metallic.png 2048 × 2048 metallic
error dimension-mismatch 2048x2048 대 1000x1000 (rock_roughness.png)
warn missing-recommended orm
info pack-available roughness + metallic → Godot 4 ORM 프리셋
warn not-power-of-two rock_roughness.png 1000 × 1000
세트 통과: 아니요 (오류 1)
러프니스를 2048 × 2048로 다시 내보내면 오류와 2의 거듭제곱 경고가 함께 사라집니다. 마스크 패커에서 러프니스와 메탈릭(AO가 있으면 AO도)을 패킹하면 "orm 누락"도 사라집니다.