본문으로 건너뛰기

노멀맵 만들기 사이트 · 2D 스프라이트용 생성기

스프라이트를 열면 노멀맵이 바로 만들어져 있습니다. 투명한 가장자리에서 안쪽으로 베벨을 세우고, 밝기나 직접 그린 높이 맵으로 디테일을 더한 뒤, 끌어서 옮기는 점광원으로 비춥니다. 조명은 Godot 4의 2D 계산식 그대로라서 미리보기가 곧 엔진 화면입니다.

스프라이트, 스프라이트 시트 또는 반복 텍스처(PNG)를 끌어다 놓으세요
빈 Studio 열기
브라우저에서 처리하며 파일은 업로드되지 않습니다.
Studio 텍스처 작업 공간: 6프레임으로 자른 도트 횃불을 생성한 노멀맵과 점광원으로 비춘 화면
CC0 에셋(OpenGameArt)을 연 실제 Studio 화면입니다.
내보내기 대상
  • Godot 4 2D lights검증됨· Godot 4.7.2
  • Unity 6 URP 2D검증됨· Unity 6000.5.3f1 (URP 17.5)
  • PNG set + JSON일반 파일

이렇게 작동합니다

  • 실루엣 베벨: 폭과 높이(px), 둥근·직선·부드러운·오목·턱 모양. 추천 폭은 128px 이하 도트가 1.5px, 큰 스프라이트는 전체가 둥글게 부푼 모양입니다.
  • 밝기로 디테일 추가(근사치라고 표시되며, 어두운 망토를 구멍으로 읽지 않도록 넓은 음영 무시 옵션이 있음) 또는 같은 크기의 높이 맵(16비트 PNG 포함).
  • 텍스처 작업 공간의 높이 브러시(B): 추측이 틀린 곳을 올리고·내리고·부드럽게·평평하게·지웁니다. 한 번 칠하면 되돌리기 한 번이고 프레임 밖으로 넘어가지 않습니다.
  • 점광원 최대 8개(색·세기·높이·반경·감쇠), 앰비언트, 스페큘러. WebGL2 미리보기는 CPU 기준과 1/255 이내로 같았고 Godot 4.7.2도 마찬가지였습니다.
  • 도트용 노멀은 모든 픽셀을 4·8·16·32방향 × 1~4단계 기울기로 맞춰 그림체를 해치지 않습니다.

사용 방법

  1. 투명한 배경의 스프라이트 PNG를 넣습니다(시트라면 먼저 스프라이트 작업 공간에서 프레임을 자릅니다).
  2. 노멀맵 패널에서 추천 베벨을 그대로 쓰거나 폭과 모양을 바꿉니다.
  3. Lit 보기에서 빛을 끌어 보고 C로 평면과 조명을 비교하며, 어색한 곳은 높이 브러시로 칠합니다.
  4. Godot 4 씬, Unity 6 URP 2D 번들, 또는 OpenGL·DirectX PNG로 내보냅니다(Ctrl+E).

그림 종류별 시작 설정

Studio는 투명 여부로 스프라이트·반복 텍스처를 제안합니다. 아래는 보통의 출발점입니다.

그림시작 설정확인할 것
도트 스프라이트(프레임 128px 이하)베벨 1.5px, 둥근 모양, Clamp 가장자리, Pixel 커널, 필요하면 도트용 노멀Lit 보기에서 빛을 돌려 밝은 가장자리가 빛을 따라가는지
크거나 채색한 스프라이트베벨 ≈ 대표 내접 반지름 × 0.9(부푼 모양), 넓은 음영 무시를 켠 밝기 디테일어두운 부분이 구멍처럼 보이지 않는지, 높이 브러시로 보정
반복 텍스처(투명 없음)Wrap 가장자리, 밝기 디테일 또는 높이 맵Wrap 테스트 0 = 이음새 없음, 3×3 타일 보기(T)
이미 있는 노멀맵생성 대신 원본으로 사용점검 패널 판정 후 "It is OpenGL / It is DirectX", 스프라이트는 빨강 뒤집힘이면 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 방식입니다.

자주 묻는 질문

도트 그림에도 쓸 수 있나요?

네. 128px 이하 프레임은 기본 1.5px 테두리, Pixel 커널은 부드럽게 만들지 않고, 도트용 노멀로 방향을 맞출 수 있습니다. 다만 손으로 그린 도트 조명은 어떤 생성기에도 어렵습니다. CC0 횃불에서는 Nerulio·Laigter·PBR Forge 모두 원작자의 맵과 37~42° 차이 났습니다.

OpenGL과 DirectX 중 무엇이 필요한가요?

고도 엔진과 유니티는 OpenGL식 초록(Y+)을 읽으며 이것이 기본값입니다. PNG 세트는 _n(OpenGL)과 _n_dx(DirectX)를 둘 다 씁니다. 기존 노말맵을 가져오면 점검 패널이 규약을 판별하되, "It is OpenGL / It is DirectX"를 누르기 전에는 아무것도 바꾸지 않습니다.

엔진용 내보내기에는 무엇이 들어 있나요?

Godot 4는 Sprite2D, CanvasTexture, 앰비언트용 CanvasModulate, 빛마다 PointLight2D, 프레임용 AnimationPlayer가 든 _lit.tscn입니다. Unity 6은 PNG, JSON, 그리고 노멀맵을 _NormalMap 보조 텍스처로 넣고 조명 미리보기를 만드는 편집기 스크립트입니다.

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

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

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

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

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

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