본문으로 건너뛰기

고도 엔진 2D 노멀맵 · 조명 씬까지 한 번에 내보내기

Godot 4에서 2D 노멀맵은 넣기만 해서는 아무 변화가 없습니다. CanvasTexture 안에 들어가야 하고, 높이가 있는 Light2D가 스프라이트를 비춰야 합니다. 텍스처 작업 공간은 노멀맵을 만들고 Godot 캔버스 렌더러와 같은 식으로 비춰 본 뒤, 스프라이트·조명·주변광·프레임이 다 들어간 씬을 내보냅니다. Godot 4.7.2 렌더와 미리보기의 차이는 1/255 이내였습니다.

스프라이트, 스프라이트 시트 또는 반복 텍스처(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일반 파일

이렇게 작동합니다

  • <name>_lit.tscn: CanvasTexture(디퓨즈 + 노멀)를 텍스처로 쓰는 Sprite2D, 주변광 색을 맡는 CanvasModulate, 조명마다 PointLight2D 하나, 그리고 자른 시트라면 region_rect를 프레임마다 옮기는 AnimationPlayer.
  • PointLight2D마다 그 조명의 감쇠(smooth·linear·quadratic·none)가 텍스처로 들어가고, 색·세기·높이(픽셀 단위 z)도 그대로 옮겨집니다.
  • 직접 만든 Sprite2D에 쓸 <name>_canvas_texture.tres. 스페큘러를 0보다 크게 두면 스페큘러 맵과 specular_shininess가 추가됩니다.
  • 조명 보기는 Godot 캔버스 조명 식(기본색 × 주변광 + 감쇠 × 조명 × 세기 × (기본색 × N·L + 스페큘러))을 그대로 쓰고, WebGL2 화면은 CPU 기준 계산과 1/255 이내로 같습니다.
  • 점 조명은 최대 8개. 림 라이트는 커스텀 셰이더 없이는 Godot가 그리지 않으므로 미리보기 전용입니다.

사용 방법

  1. 스프라이트나 시트를 넣습니다. 시트는 먼저 스프라이트 작업 공간에서 잘라야 프레임이 움직입니다.
  2. 노멀 맵 패널에서 베벨과 디테일을 확인하고, 높이 브러시(B)로 튀어나오거나 들어갈 곳을 고칩니다.
  3. L을 눌러 조명을 놓고 높이·세기·감쇠를 정한 뒤, 조명 보기에서 Enter로 재생해 봅니다.
  4. 내보내기(Ctrl+E)에서 Godot 4를 체크합니다.
  5. godot 폴더를 res:// 아래 아무 곳에 복사하고 <name>_lit.tscn을 엽니다.

Godot 번들에 들어 있는 것

파일·노드내용내 게임에서 할 일
<name>_lit.tscn의 Sprite2D텍스처 = CanvasTexture, region 사용, 도트면 Nearest 필터씬을 인스턴스하거나 텍스처만 내 스프라이트로 복사
<name>_canvas_texture.tresdiffuse_texture, normal_texture, 필요하면 specular_texture와 specular_shininess같은 시트를 그리는 Sprite2D에 재사용
PointLight2D(조명마다 하나)프레임 픽셀 기준 위치, color, energy, height = z, 감쇠 PNG 텍스처, 반경에서 계산한 texture_scale하나는 횃불로 남기고 나머지는 지우거나, 값을 레벨 조명에 옮기기
CanvasModulate "Ambient"주변광 색레벨에 하나만 두기(캔버스 전체에 색이 곱해짐)
AnimationPlayer태그마다 애니메이션 하나, 프레임 시작마다 region_rect 키, 태그대로 반복스크립트에서 태그 이름으로 play() 호출
PNG 파일<name>.png, <name>_n.png(OpenGL), 스페큘러 맵, 쓰인 감쇠마다 PNG 하나씬 옆에 두기(상대 경로)

림 라이트는 내보내지 않습니다(미리보기 전용). 폴더의 README에 검증 상태가 다시 적혀 있습니다.

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

"검증됨"은 실제 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 방식입니다.

자주 묻는 질문

고도 2D에서 노멀맵을 넣었는데 아무 변화가 없어요.

대개 셋 중 하나입니다. 노멀맵이 CanvasTexture의 normal_texture에 들어가 있지 않거나, 스프라이트까지 닿는 Light2D가 없거나, 조명 높이가 0이라 옆에서 스치듯 비추는 경우입니다. 내보낸 씬은 셋 다 설정되어 있으니 내 노드와 비교해 보세요.

AnimatedSprite2D를 쓰나요?

아니요. Sprite2D를 쓰고 AnimationPlayer가 시트 위에서 region_rect를 옮깁니다. CanvasTexture 하나가 모든 프레임의 노멀맵을 담습니다. 검증에서 Godot 4.7.2가 렌더한 것도 이 구성이며, AnimatedSprite2D 구성은 확인 대상이 아니었습니다.

어떤 렌더러와 에셋으로 확인했나요?

Godot 4.7.2 Compatibility 렌더러(gl_compatibility)에서 실제 CC0 에셋 6건입니다. 도트 횃불(스페큘러 유무), 60프레임 사무라이, 80×110 모험가, 반복 벽돌 텍스처, 가져온 DirectX 노멀맵. 확인한 모든 프레임이 1/255 이내였고, 초록을 뒤집은 렌더는 3.8~37단계 어긋났습니다.

Godot에서 밝기도 미리보기와 같나요?

네. 조명마다 Studio의 감쇠 곡선이 텍스처로 들어가서 곡선이 같고, 검증도 최종 조명 픽셀을 비교했습니다. Unity는 URP가 자체 감쇠를 쓰므로 다릅니다.

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

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

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

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

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

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