블로그로 돌아가기
튜토리얼

Normal Map 규칙: OpenGL vs DirectX 설명

Unreal에서는 normal map이 반전되어 보이는데 Unity에서는 잘 보이는 이유 — tangent-space Y축 규칙을 쉽게 설명하고 구체적인 해결책을 제시합니다.

Admin2026년 4월 23일2 분 소요11

Normal map을 Unreal에 연결하면 태양이 아래에서 나오는 것처럼 표면이 밝아집니다. 같은 파일을 Unity나 Blender에 연결하면 완벽해 보입니다. 메시도 같고 텍스처도 같은데. 무슨 일이 일어나고 있는 걸까요?

두 업계, 하나의 축 차이

Normal map은 RGB 채널에 표면 방향을 저장합니다. Red = X, green = Y, blue = Z. 모든 PBR 엔진은 한 가지 예외를 제외하고 동일한 방식으로 디코딩합니다: Y의 부호입니다.

OpenGL 규칙 (Y+): green 채널이 더 밝으면 표면이 를 향합니다. Unity, Godot, Blender(Cycles 및 Eevee), Substance Painter의 기본 내보내기, 그리고 모든 WebGL 기반 엔진에서 사용합니다.

DirectX 규칙 (Y−): green이 더 밝으면 표면이 아래를 향합니다. Unreal Engine, 레거시 Direct3D 툴체인, 그리고 일부 CryEngine/Xbox 시대 에셋에서 사용합니다.

PNG의 바이트는 동일합니다. 물리적 의미는 반대입니다.

한눈에 구별하는 방법

Normal map에서 반구형 범프(버튼이나 돔처럼)를 보세요. OpenGL 규칙에서는 범프의 아래쪽이 더 짙은 green입니다. 표면이 Y− 방향으로 회전하고 있기 때문입니다. DirectX 규칙에서는 아래쪽이 더 밝은 green입니다.

엔진 내에서 조명이 거꾸로 보이면 — 그림자가 있어야 할 곳에 하이라이트가 있으면 — 규칙 불일치가 있는 것입니다.

해결책은 5초면 됩니다

Unreal에서는 텍스처 임포트 대화상자에 Flip Green Channel 체크박스가 있습니다. 켜면 엔진이 샘플 시점에 G 채널을 반전시킵니다. 소스를 다시 내보낼 필요가 없습니다.

Unity에서는 텍스처 타입을 Normal map으로 설정하면 임포터가 모든 것을 처리합니다 — Unity는 OpenGL을 예상하지만 파일이 잘못된 것처럼 보이면 경고합니다. Blender에서는 Separate Color → Invert G → Combine Color 노드 체인을 사용하거나, Normal Map 노드에서 DirectX 스타일 입력을 직접 선택하세요.

처음부터 두 가지 표준이 있었던 이유는?

1990년대에 OpenGL과 DirectX는 반대의 텍스처 좌표 공간을 정의했습니다 — OpenGL은 Y가 위로 증가하고 DirectX는 Y가 아래로 증가합니다. 2000년대 중반에 normal map이 일반화되었을 때 각 툴체인은 자신의 공간을 출력물에 구워버렸습니다. 이미 구축된 파이프라인을 뒤집는 것이 비싸기 때문에 차이가 고착되었습니다.

혼동 없이 Normal Map 생성하기

aukimi Normal Map Generator를 사용하면 내보낼 때 규칙을 명시적으로 선택할 수 있습니다. heightmap의 밝기에 Sobel gradient를 실행한 후 (−dx·s, −dy·s, 1)을 RGB에 패킹합니다 — DirectX를 선택하면 Y를 뒤집습니다. 생성 후에 규칙을 토글하고 다시 업로드할 필요 없이 다시 다운로드할 수 있습니다.

내부적으로 공식은 동일합니다. 유일한 차이는 green 채널을 쓰기 전에 Y 성분에 적용하는 부호입니다. 이것을 알면 any 이미지 에디터로 파일을 규칙 간에 변환할 수 있습니다: PNG를 열고, green 채널을 선택하고, 반전시키고, 저장합니다. 이것이 Unreal의 "Flip Green Channel"이 하는 모든 것입니다.

빠른 참조

  • Unity, Godot, Blender, Substance Painter (기본): OpenGL (Y+).
  • Unreal Engine, 레거시 Direct3D: DirectX (Y−).
  • Unreal에서 잘못 보이나요? 임포트 설정에서 Flip Green Channel을 활성화하세요.
  • Unity에서 잘못 보이나요? 아마 DirectX 규칙 툴에서 내보낸 것 같습니다 — green 채널을 반전시키거나 다시 내보내세요.

규칙을 이해하면 해결책은 사소합니다. 가장 어려운 부분은 처음으로 인식하는 것입니다.

#normal-map#3d#pbr#shaders#opengl#directx

이 글이 도움이 되셨나요?

ShareHN