Laigter 대안 · 브라우저에서 스프라이트 노멀맵 만들기
Laigter는 2D 스프라이트용 노멀맵(노말맵) 생성 데스크톱 프로그램입니다. itch.io에서는 유료, GitHub에는 GPL-3 무료 빌드가 있고 고도 엔진 도트 게임 개발자들이 많이 씁니다. Studio의 Texture 작업 공간은 같은 일을 브라우저 탭에서 하고 엔진 설정까지 이어 갑니다. 같은 CC0 에셋을 두 도구 모두 기본값으로 돌려 실제 정답 노멀맵과 비교했더니, 3D로 렌더링한 스프라이트는 Laigter가, 반복 벽돌 텍스처와 높이 맵은 Studio가 더 가까웠습니다.

- Godot 4 2D lights검증됨· Godot 4.7.2
- Unity 6 URP 2D검증됨· Unity 6000.5.3f1 (URP 17.5)
- PNG set + JSON일반 파일
이렇게 작동합니다
- 베벨 추천값이 스프라이트 크기에 맞춰집니다. 128px 이하 도트는 1.5px, 큰 그림은 전형적인 내접 반지름의 약 0.9배. 이 규칙은 Laigter와의 소행성 비교에서 나왔습니다(고정 4px 베벨은 36.6°).
- 투명 픽셀이 없는 그림에는 Wrap을 추천하므로 반복 텍스처 경계에 밝은 띠가 생기지 않습니다(벽돌에서 롤 오차 0).
- Sprite 작업 공간에서 자른 프레임을 하나씩 같은 픽셀 단위 설정으로 처리하므로 애니메이션 내내 입체감이 같고 프레임끼리 번지지 않습니다.
- PNG만 주는 게 아니라, 조명이 달린 고도 씬(Sprite2D·CanvasTexture·조명마다 PointLight2D)과 유니티 6 URP 2D 임포터를 내보냅니다. 둘 다 엔진에서 확인했습니다.
같은 에셋으로 본 Nerulio Studio와 Laigter
실제 정답 노멀맵과의 평균 각도이며 낮을수록 좋습니다. Laigter 1.14.0은 명령줄 기본값, Studio는 열 때 추천한 설정 그대로이고 에셋별로 조정하지 않았습니다.
| Nerulio Studio | Laigter 1.14 | |
|---|---|---|
| 소행성(3D 모델에서 렌더링한 노멀) | 20.0° | 18.3° — 비교한 4개 도구 중 가장 가까움 |
| 손으로 그린 도트 횃불 | 38.1° | 41.6°(모든 생성기가 37~42° 차이) |
| 색상 이미지로 만든 반복 벽돌 | 14.7°, 롤 오차 0 | 27.3°, 이음새 24.0, 롤 오차 63.8. Tile 프리셋 16.5°, 롤 0 |
| 8비트 높이 맵으로 만든 벽돌 | 8.8°(높이 맵으로 읽으면 7.7°) | 29.8°, Tile 프리셋 26.0° |
| 실행 환경 | 브라우저 탭, 무료, 파일은 내 컴퓨터에 | 데스크톱. itch.io 유료, GitHub GPL-3 무료 빌드 |
| 고도 엔진 조명 씬 | 내보낸 뒤 _lit.tscn 열기(Godot 4.7.2 검증) | CanvasTexture와 조명을 직접 구성 |
| 유니티 6 URP 2D | 임포터와 Light2D 미리보기(Unity 6 검증) | 직접 설정 |
| 스프라이트 시트 | 프레임마다 따로 처리 | 확인 안 함(명령줄은 시트를 한 장의 그림으로 처리) |
| 열어 본 맵이 OpenGL인지 DirectX인지 | 신뢰도와 함께 판별, 확인해야 적용 | 기능 없음 |
이 수치의 출처: docs/STUDIO-TEXTURE.md (Head-to-head, 2026-09-24)
Laigter 쪽이 더 나은 경우
- 실제 3D 형태가 있는 스프라이트에서는 기본값이 정답에 가장 가까웠습니다. 소행성에서 18.3°로 Studio(20.0°)보다 낫고, 기본 돔 베벨도 좋은 출발점입니다.
- 프리셋, 그리고 앱 안에서 여러 조명으로 비춰 보는 자체 미리보기.
- 명령줄(--no-gui)로 폴더 단위 일괄 처리가 되어 빌드 과정에 넣기 좋습니다.
- 소스가 GPL-3로 공개된 데스크톱 프로그램이라 웹사이트 없이도 씁니다.
사용 방법
- 스프라이트를 이 페이지에 끌어다 놓으면(시트 전체라면 먼저 Sprite 작업 공간에서 자르기) Texture 작업 공간이 바로 노멀맵을 만듭니다.
- Normal map 패널에서 추천 베벨을 그림과 비교해 폭·프로파일을 바꾸거나, 높이 브러시(Texture에서 B)로 입체를 칠합니다.
- 조명 도구(L)로 빛을 놓고 Normal·Lit 보기를 오가거나 Compare(C)로 화면을 나눠 봅니다.
- Export(Ctrl+E) 후 고도 엔진에서 _lit.tscn을 열거나 유니티에서 임포터를 실행합니다.
엔진별 내보내기와 검증 방법
"검증됨"은 실제 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 2D | PNG · 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 + JSON | albedo · _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 방식입니다.
자주 묻는 질문
Laigter 온라인 버전이 있나요?
Laigter 자체는 데스크톱 프로그램입니다. 브라우저에서 끝내고 싶다면 Texture 작업 공간이 그림을 업로드하지 않고 탭 안에서 노멀맵을 만듭니다. 어느 쪽이 더 정확했는지는 표에 있습니다.
Laigter로 만든 벽돌 노멀맵 가장자리에 띠가 생기는 이유는?
기본 설정이 그림 경계를 스프라이트 윤곽으로 보고 네 변에 3px 기울어진 띠를 만들기 때문입니다(롤 오차 63.8). Tile 프리셋을 쓰면 없어집니다(롤 0). Studio는 투명 픽셀이 없는 그림에 Wrap을 추천합니다.
Laigter로 이미 만든 노멀맵을 가져와도 되나요?
됩니다. 스프라이트와 함께 열고 소스로 고르세요. Check 패널이 규약을 읽어 주는데, 이번 비교의 Laigter 출력은 "OpenGL, 높음"이었습니다. 이후 조명 미리보기와 내보내기에 그대로 쓰입니다.
무료인가요? 계정이 필요한가요?
이 페이지의 기능은 모두 무료이며 계정 없이 쓸 수 있습니다. 워터마크나 막혀 있는 내보내기가 없습니다.
스프라이트가 업로드되나요?
아니요. Studio는 이 브라우저 탭 안에서 디코딩·패킹·내보내기를 합니다. 프로젝트는 브라우저(IndexedDB)에 자동 저장되며 .nerulio 파일로 저장할 수 있습니다.
Aseprite나 엔진 플러그인을 설치해야 하나요?
아니요. .aseprite 파일은 브라우저에서 읽고 씁니다. 엔진별 번들에는 그 엔진에 필요한 것이 들어 있습니다(Godot는 가져오기 설정과 씬, Unity와 Godot 타일셋은 작은 편집기 스크립트).