본문으로 건너뛰기

노멀맵 OpenGL·DirectX 판별 · 초록 채널

볼록한 부분이 오목하게 보이거나 빛이 반대쪽에서 오는 것처럼 보이면, 노멀맵의 초록(G) 채널 규약이 엔진과 다른 경우가 대부분입니다. Godot와 유니티는 OpenGL 방식(Y+), 언리얼은 DirectX 방식(Y−)을 씁니다. 파일 이름이나 눈대중으로는 의외로 자주 틀립니다.

스프라이트, 스프라이트 시트 또는 반복 텍스처(PNG)를 끌어다 놓으세요
빈 Studio 열기
브라우저에서 처리하며 파일은 업로드되지 않습니다.
Studio 텍스처 작업 공간: 가져온 ambientCG 노멀맵을 높은 신뢰도로 DirectX라고 판별했고, 규약을 확인하기 전에는 아무것도 바뀌지 않는 화면
CC0 에셋(ambientCG)을 연 실제 Studio 화면입니다.
내보내기 대상
  • Godot 4 2D lights검증됨· Godot 4.7.2
  • Unity 6 URP 2D검증됨· Unity 6000.5.3f1 (URP 17.5)
  • PNG set + JSON일반 파일

이렇게 작동합니다

  • 검사 패널은 표면 자체로 규약을 잽니다. OpenGL로 읽었을 때 실제 표면의 기울기는 서로 맞아떨어져야 하고, DirectX 맵은 이를 측정 가능한 방식으로 깨뜨립니다.
  • 스프라이트에서는 실루엣으로 독립된 두 번째 검사를 합니다. 가장자리의 노멀은 바깥을 향해야 하며, 두 검사가 일치하면 신뢰도가 올라갑니다.
  • 판정마다 신뢰도와 근거를 보여 줍니다. 대각선 굴곡이 없는 평평한 맵은 추측 대신 판정을 내리지 않고, “OpenGL입니다/DirectX입니다”를 누르기 전에는 아무것도 바뀌지 않습니다.
  • 스프라이트에서는 뒤집힌 빨강(R) 채널도 찾아 “Flip red (X−)”로 고칩니다. 투명한 가장자리가 없는 텍스처에서는 빨강과 초록을 구분할 수 없으며, 패널이 그렇게 알려 줍니다.
  • 두 규약 모두 내보냅니다. PNG 세트에 _n(OpenGL)과 _n_dx(DirectX), 또는 한쪽만 담은 노멀맵 PNG 하나.

사용 방법

  1. 텍스처 작업 공간에 그림과 그 노멀맵을 넣습니다.
  2. 노멀 맵 패널에서 소스를 가져온 노멀맵으로 정합니다.
  3. 검사 패널에서 판정, 신뢰도, 근거를 읽습니다.
  4. “OpenGL입니다” 또는 “DirectX입니다”를 누르고(표시되면 Flip red도), C로 평면과 조명을 비교합니다.
  5. 엔진이 읽는 규약으로, 또는 두 가지가 다 든 PNG 세트로 내보냅니다.

엔진별로 쓸 노멀맵

엔진·출처초록 규약Studio에서 쓸 파일
Godot 4OpenGL (Y+)_n.png 또는 Godot 4 번들(CanvasTexture와 조명 씬)
유니티(URP 2D)OpenGL (Y+)_n.png 또는 Unity 6 번들(Secondary Texture _NormalMap)
언리얼 엔진DirectX (Y−)_n_dx.png
ambientCG 다운로드NormalGL = OpenGL, NormalDX = DirectXGodot·유니티에는 NormalGL
출처를 모르는 맵검사 패널에서 측정판정을 확정한 뒤 원하는 쪽으로 내보내기
빨강이 반대인 스프라이트 맵빨강 뒤집힘(X−)Flip red (X−) 후 내보내기

엔진별 내보내기와 검증 방법

"검증됨"은 실제 CC0 에셋으로 내보낸 파일을 해당 엔진·도구가 직접 불러와 원본과 비교했다는 뜻입니다. 불러오지 않은 형식은 그렇게 표시합니다.

대상파일검증
Godot 4 2D lights_lit.tscn · CanvasTexture .tres · normal / specular PNG검증됨 Godot 4.7.2실제 CC0 사례 6개를 Godot(gl_compatibility)가 렌더링했고, 확인한 모든 프레임이 Studio 조명 미리보기와 1/255 이내로 같았습니다. 초록을 뒤집은 같은 렌더는 3.8~37단계 어긋나므로 잘못된 규약을 잡아낼 수 있습니다.
Unity 6 URP 2DPNG · nerulio-texture.json · Editor/NerulioNormalMapImporter.cs검증됨 Unity 6000.5.3f1 (URP 17.5)12회 중 12회 통과(사례 6개 × 감마·리니어 색 공간): URP가 적용한 조명이 내보낸 노멀맵과 일치합니다(평균 오차 0.0037~0.0085). 빛의 감쇠는 URP 방식이라 밝기는 미리보기가 아니라 Unity 기준입니다.
PNG set + JSONalbedo · _n (OpenGL) · _n_dx (DirectX) · 16-bit height · AO · specular · manifest일반 파일어떤 엔진이나 도구에서도 쓰는 일반 파일이며, 엔진 실행 검증은 주장하지 않습니다.

검증 근거

Godot 4.7.2가 실제 CC0 사례 6개(도트, HD 스프라이트, 반복 텍스처, 가져온 DirectX 맵)를 렌더링했고 확인한 모든 프레임이 Studio 미리보기와 1/255 이내였습니다. Unity 6000.5 URP 2D: 12회 중 12회 통과(사례 6개 × 감마·리니어). 규약을 아는 실제 맵으로 OpenGL/DirectX 판별: 1K 전체 맵 128개 100% 정답, 표본 1,562개 중 틀린 "높음" 판정 0건(초록이 밝으면 OpenGL이라는 단순 규칙은 46%).

한계

  • 투명한 가장자리가 없는 그림(반복 텍스처)에서는 빨강이 뒤집힌 것과 DirectX 초록을 구별할 수 없습니다. 점검 패널이 이를 알리고 "빨강 뒤집기"를 제공합니다.
  • 시트는 스프라이트 작업 공간에서 프레임을 자르기 전까지 그림 하나로 조명됩니다. 텍스처 작업 공간은 프레임을 자르지 않습니다.
  • 림 라이트는 미리보기 전용이며, Unity로는 스페큘러 맵을 내보내지 않습니다(Godot는 내보냄).
  • Unity는 자체 빛 감쇠를 씁니다. 내보낸 노멀맵은 Unity에서 검증했지만 밝기 곡선은 Unity 방식입니다.

자주 묻는 질문

Godot, 유니티, 언리얼은 어느 규약인가요?

Godot와 유니티는 OpenGL 방식(Y+), 언리얼은 DirectX 방식(Y−)입니다. Studio의 Godot 4·Unity 6 내보내기는 OpenGL로 쓰며, Godot 4.7.2와 Unity 6000.5.3f1에서 예상대로 조명되는 것을 확인했습니다.

판별은 얼마나 정확한가요?

규약을 아는 실제 맵으로 쟀습니다. 1K 맵 128장 100 %, 256² 조각은 판정을 낸 것 중 100 %(99.2 %에 판정), 64² 조각 99.6 %, 스프라이트 프레임 213장 100 %. 1,562개 표본에서 틀린 “높음” 판정은 0건입니다. “초록이 밝으면 OpenGL” 같은 단순 규칙은 46 %였습니다.

DirectX인 걸 이미 알면 초록만 뒤집으면 되나요?

네. 아래 링크한 기존 텍스처 랩 페이지가 초록을 한 번에 뒤집습니다. 검사 패널은 확신이 없는 파일용이고, 바꾸기 전에 조명 결과부터 보여 줍니다.

빨강이 뒤집혔다고 나오는 이유는?

빨강을 반대로 쓰는 생성기가 있습니다(NormalMap-Online 기본 출력이 그렇습니다). 스프라이트는 실루엣으로 빨강을 따로 재므로, 판정은 초록 기준이고 빨강은 따로 보고하며 신뢰도는 “중간”까지만 냅니다.

무료인가요? 계정이 필요한가요?

이 페이지의 기능은 모두 무료이며 계정 없이 쓸 수 있습니다. 워터마크나 막혀 있는 내보내기가 없습니다.

스프라이트가 업로드되나요?

아니요. Studio는 이 브라우저 탭 안에서 디코딩·패킹·내보내기를 합니다. 프로젝트는 브라우저(IndexedDB)에 자동 저장되며 .nerulio 파일로 저장할 수 있습니다.

Aseprite나 엔진 플러그인을 설치해야 하나요?

아니요. .aseprite 파일은 브라우저에서 읽고 씁니다. 엔진별 번들에는 그 엔진에 필요한 것이 들어 있습니다(Godot는 가져오기 설정과 씬, Unity와 Godot 타일셋은 작은 편집기 스크립트).