Laigter 대안 · 브라우저에서 스프라이트 노멀맵 만들기
Laigter는 2D 스프라이트용 노멀맵(노말맵) 생성 데스크톱 프로그램입니다. itch.io에서는 유료, GitHub에는 GPL-3 무료 빌드가 있고 고도 엔진 도트 게임 개발자들이 많이 씁니다. Studio의 Texture 작업 공간은 같은 일을 브라우저 탭에서 하고 엔진 설정까지 이어 갑니다. 같은 CC0 에셋을 두 도구 모두 기본값으로 돌려 실제 정답 노멀맵과 비교했더니, 3D로 렌더링한 스프라이트는 Laigter가, 반복 벽돌 텍스처와 높이 맵은 Studio가 더 가까웠습니다.
Laigter는 2D 스프라이트용 노멀·스페큘러·오클루전·패럴랙스 맵을 만들고, 여러 조명 아래서 미리 보며, --no-gui로 창 없이도 돌아가는 자유 소프트웨어 데스크톱 앱입니다(GPL-3, GitHub 빌드, itch.io 유료 빌드). Nerulio Studio 텍스처 작업 공간은 브라우저 탭에서 노멀맵을 만들고 검증된 Godot 4 씬이나 Unity 6 임포터까지 이어집니다. 같은 CC0 에셋을 기본 설정으로 측정하니 3D로 렌더한 스프라이트는 Laigter가(18.3° 대 20.0°), 반복 벽돌과 높이 맵은 Studio가 더 가까웠습니다. 어느 쪽이 맞는지는 작업에 달렸습니다.

- Godot 4 2D lights검증됨· Godot 4.7.2
- Unity 6 URP 2D검증됨· Unity 6000.5.3f1 (URP 17.5)
- PNG set + JSON일반 파일
두 툴이 스프라이트로 하는 일
두 툴 모두 그림에서 높이를 추측해 기울기를 구합니다. Laigter의 기본값은 알파 외곽선에서 돔 모양을 세우는데, 둥근 물체에는 좋은 출발점이며 색에서 디테일도 더합니다. 프리셋에 설정(1.6 릴리스부터는 조명까지)을 저장하고, 1.12.0부터 앱에서 프레임 수나 격자 크기로 시트를 나눌 수 있으며, 1.13.0에서 조명 애니메이션이 추가됐습니다. README에는 노멀·패럴랙스·스페큘러·오클루전 맵과 각각의 명령줄 옵션이 나옵니다.
Nerulio Studio는 스프라이트 크기에 맞춘 베벨(128px 이하 프레임은 1.5px, 그보다 크면 대표 내접 반지름의 약 0.9배)을 제안하고, 자른 프레임을 하나씩 처리하며, Godot 4의 2D 계산식으로 비춰 미리보기가 Godot 결과와 1/255 이내로 같습니다. 다른 곳에서 온 맵의 OpenGL·DirectX 판별, 높이 브러시, 양자화한 도트 노멀, 16비트 높이 입력도 있습니다.
반복 텍스처에서는 가장자리가 차이를 만듭니다. Laigter 기본값은 이미지 가장자리를 스프라이트 가장자리처럼 다뤄 네 변에 3px 띠를 기울입니다(벽돌에서 롤 오차 63.8). Tile 프리셋을 쓰면 사라지며(롤 0, 기준과 16.5°), Wrap을 쓴 Studio는 14.7°였습니다.
Godot 4.7.2에서 기준 노멀과 비교해 비춰 보면 스프라이트 차이는 작습니다. 3D로 렌더한 소행성에서 Laigter 기본값은 6.32단계, Studio는 6.98단계 차이였습니다. 손으로 칠한 횃불에서는 모든 생성기가 평평한 맵보다 나빴으므로(평평 26.6, Studio 36.2, Laigter 51.0), 어느 쪽도 양식화된 노멀을 손으로 그리는 일을 대신하지 못합니다.
- 롤 오차
- 생성하고, 텍스처를 절반 굴려 다시 생성해 되돌린 뒤 가장자리 띠를 비교한 값. 0이면 이음새 없이 반복됩니다.
- 평균 각도
- 툴의 노멀과 실제 기준 노멀 사이 평균 각도. 낮을수록 가깝습니다.
- Tile 프리셋
- 반복 텍스처용 Laigter 프리셋으로, 가장자리에 베벨이 생기지 않게 합니다.
이렇게 작동합니다
- 베벨 추천값이 스프라이트 크기에 맞춰집니다. 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 검증) | 직접 설정 |
| 스프라이트 시트 | 프레임마다 따로 처리 | 앱에서 프레임 수나 격자 크기로 시트를 나눔(1.12.0 릴리스). 프레임 경계 처리는 측정 안 함, 명령줄은 시트를 한 장의 그림으로 처리 |
| 열어 본 맵이 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을 열거나 유니티에서 임포터를 실행합니다.
다른 방법
| 방법 | 이럴 때 더 낫습니다 |
|---|---|
| Laigter | 빌드 스크립트에서의 일괄 생성(--no-gui), 패럴랙스·오클루전 맵, 조명 애니메이션, 브라우저 없는 데스크톱 앱, 그리고 기본 돔이 가장 가까웠던(18.3°) 3D 렌더 스프라이트. |
| Nerulio Studio 텍스처 | 손으로 연결할 필요 없는 Godot 4 조명 씬이나 Unity 6 URP 2D 설정, 자동으로 Wrap을 제안하는 반복 텍스처, 프레임별 시트 처리, 다른 툴에서 온 맵의 규약 점검, 설치 불필요. |
| SpriteIlluminator(유료, 데스크톱) | 노멀을 직접 칠하고 싶을 때. Angle·Structure 브러시와 선택 도구에 해당하는 기능이 Studio에는 없고 높이 브러시뿐입니다. |
| 3D에서 굽기 또는 손으로 그리기 | 렌더한 스프라이트(굽기가 정답)나 양식화된 도트(작가의 횃불에 가까운 생성기는 없었음). |
엔진별 내보내기와 검증 방법
"검증됨"은 실제 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%).
한계
- 명령줄이나 일괄 처리가 없습니다. Studio는 브라우저에서 그림을 하나씩 처리합니다.
- 패럴랙스 맵이 없고, 스페큘러 맵은 Godot용으로만 내보냅니다.
- 조명 애니메이션이 없습니다. 미리보기와 내보내기의 조명은 고정입니다.
- 3D로 렌더한 소행성에서는 Laigter 기본값이 실제 노멀에 1.7° 더 가까웠습니다.
- Chromium에서만 확인했고 Firefox·WebKit은 돌려 보지 않았습니다.
- 투명한 가장자리가 없는 그림(반복 텍스처)에서는 빨강이 뒤집힌 것과 DirectX 초록을 구별할 수 없습니다. 점검 패널이 이를 알리고 "빨강 뒤집기"를 제공합니다.
- 시트는 스프라이트 작업 공간에서 프레임을 자르기 전까지 그림 하나로 조명됩니다. 텍스처 작업 공간은 프레임을 자르지 않습니다.
- 림 라이트는 미리보기 전용이며, Unity로는 스페큘러 맵을 내보내지 않습니다(Godot는 내보냄).
- Unity는 자체 빛 감쇠를 씁니다. 내보낸 노멀맵은 Unity에서 검증했지만 밝기 곡선은 Unity 방식입니다.
버전과 출처
Laigter 1.14.0(GitHub의 Windows 빌드, --no-gui로 기본값과 Tile 프리셋 실행)과 Nerulio를 2026-09-24에 실제 기준 노멀과 비교했고, Godot 조명 비교는 2026-09-25 Godot 4.7.2에서 했습니다. 어느 쪽도 에셋별로 조정하지 않았습니다. 위의 Laigter 기능은 README와 릴리스 노트에서 가져왔습니다.
참고한 공식 문서
자주 묻는 질문
Laigter 온라인 버전이 있나요?
Laigter 자체는 데스크톱 프로그램입니다. 브라우저에서 끝내고 싶다면 Texture 작업 공간이 그림을 업로드하지 않고 탭 안에서 노멀맵을 만듭니다. 어느 쪽이 더 정확했는지는 표에 있습니다.
Laigter로 만든 벽돌 노멀맵 가장자리에 띠가 생기는 이유는?
기본 설정이 그림 경계를 스프라이트 윤곽으로 보고 네 변에 3px 기울어진 띠를 만들기 때문입니다(롤 오차 63.8). Tile 프리셋을 쓰면 없어집니다(롤 0). Studio는 투명 픽셀이 없는 그림에 Wrap을 추천합니다.
Laigter로 이미 만든 노멀맵을 가져와도 되나요?
됩니다. 스프라이트와 함께 열고 소스로 고르세요. Check 패널이 규약을 읽어 주는데, 이번 비교의 Laigter 출력은 "OpenGL, 높음"이었습니다. 이후 조명 미리보기와 내보내기에 그대로 쓰입니다.
무료인가요? 계정이 필요한가요?
이 페이지의 기능은 모두 무료이며 계정 없이 쓸 수 있습니다. 워터마크나 막혀 있는 내보내기가 없습니다.
스프라이트가 업로드되나요?
아니요. Studio는 이 브라우저 탭 안에서 디코딩·패킹·내보내기를 합니다. 프로젝트는 브라우저(IndexedDB)에 자동 저장되며 .nerulio 파일로 저장할 수 있습니다.
Aseprite나 엔진 플러그인을 설치해야 하나요?
아니요. .aseprite 파일은 브라우저에서 읽고 씁니다. 엔진별 번들에는 그 엔진에 필요한 것이 들어 있습니다(Godot는 가져오기 설정과 씬, Unity와 Godot 타일셋은 작은 편집기 스크립트).