Godot 4 오토타일·지형 세트 생성기 · 피어링 비트 자동 설정
47개 타일×8개 피어링 비트를 손으로 찍는 곳에서 Godot 4 지형이 틀어집니다. Studio는 시트의 배치를 인식해 비트를 쓰고, 빠진 조합을 보여 주고, set_cells_terrain_connect와 똑같이 테스트 맵을 칠합니다.
Godot 4에는 이제 "오토타일"이라는 타일 종류가 없습니다. 자동 연결은 TileSet의 지형 세트(매칭 모드 Match Corners and Sides·Match Corners·Match Sides)와 그 안의 지형, 그리고 타일마다 지정하는 지형과 피어링 비트(이웃 칸마다 어떤 지형이 와야 하는지)로 이뤄집니다. 47타일 블롭 시트라면 연결 비트 188개를 제자리에 찍어야 합니다. Nerulio는 픽셀에서 배치를 읽어 비트를 설정하고, Godot 안에서 TileSet을 만드는 GDScript를 함께 줍니다. 그 뒤 Terrains 탭으로 칠하거나 set_cells_terrain_connect()를 호출하면 됩니다. Godot 4.7.2에서 검증했습니다.

- Godot 4 TileSet검증됨· Godot 4.7.2
- Tiled검증됨· Tiled 1.12.2
- Unity 6 Rule Tile검증됨· Unity 6000.5.3f1 + 2D Tilemap Extras 8.0.3
- LDtk일부 검증· LDtk 1.5.3 schema + loader
지형 세트, 매칭 모드, 피어링 비트
Godot 4.7 문서는 지형을 Godot 3 오토타일의 "더 강력한 대체"라고 설명합니다. TileSet이 지형 세트를 가지며, 세트마다 어떤 이웃을 볼지 정하는 모드와 하나 이상의 지형(이름과 색)이 있습니다. 각 타일에는 Terrain Set과 Terrain 번호(둘 다 0부터, −1은 없음)를 주고, 이웃 위치마다 피어링 비트, 즉 그 자리에 와야 할 지형 번호(빈칸이면 −1)를 줍니다. 문서의 예처럼 비트가 모두 0인 타일은 8개 이웃이 전부 지형 0일 때만 나옵니다.
모드는 그림을 따릅니다. 안쪽 모서리까지 그린 47타일 블롭 세트는 8방향을 모두 보는 Match Corners and Sides, 변 16타일이나 3 × 3 상자는 네 변만 보는 Match Sides, 모서리 16타일(Wang 2-corner, 듀얼 그리드 4 × 4)은 Match Corners가 맞습니다. 256이 아니라 47인 이유는, 모서리는 양옆 두 변이 모두 이어질 때만 의미가 있어서 한 칸의 이웃 조합 256가지가 서로 다른 타일 47개로 줄어들기 때문입니다.
칠할 때 Godot는 칸마다 이웃과 비트가 가장 잘 맞는 타일을 고릅니다. TileMapLayer 레퍼런스는 이 기능에 "필요한 모든 지형 조합"이 있어야 한다고 경고합니다. 조합이 빠지면 Godot는 아무 경고 없이 가장 가까운 타일을 넣거나 칸을 비워 두는데, "Godot 지형이 안 된다"는 경우의 대부분이 이것입니다(Godot 지형이 틀린 타일을 칠할 때 참고).
- 지형 세트(Terrain set)
- 한 모드 아래에서 서로 맞춰지는 지형의 묶음. 타일 하나는 한 지형 세트에 속합니다.
- Match Corners and Sides / Match Corners / Match Sides
- 세 가지 모드. 타일 비트가 8개 이웃 위치 중 어디를 설명하는지 정합니다.
- 피어링 비트
- 이웃 위치마다(
TileSet.CellNeighbor이름, 예:top_right_corner) 와야 할 지형 번호. −1은 빈칸. set_cells_terrain_connect- 코드로 지형을 칠하고 이웃 칸까지 고쳐 주는
TileMapLayer메서드. Terrains 탭과 같은 매칭을 씁니다.
예시: 칸 하나, 이웃 여덟, 타일 하나
X는 땅, C는 지금 칠하는 칸입니다. cr31 마스크는 땅인 이웃마다 가중치를 더합니다.
맵 . X X
X C .
. X .
가중치 N 1 NE 2 E 4 SE 8 S 16 SW 32 W 64 NW 128
원래 마스크 N + NE + S + W = 1 + 2 + 16 + 64 = 83
NE는 N과 E가 모두 땅일 때만 셈. E가 비었으므로 NE는 빠짐
타일 마스크 1 + 16 + 64 = 81 (47개 중 하나)
Godot 타일 지형 0; top_side 0, bottom_side 0, left_side 0; 나머지 5비트 −1
세트 전체 타일 47개, 0으로 설정된 비트 188개(나머지는 −1)nerulio-tileset.json에서 이 타일은 "peering":{"top_side":0,"bottom_side":0,"left_side":0}으로 적히고, 이름이 없는 위치는 −1입니다. 가져오기 스크립트는 이름마다 TileSet.CellNeighbor 상수를 찾아 TileData.set_terrain_peering_bit()를 호출합니다.
이렇게 작동합니다
- 이음새 연속성으로 블롭 47(공개된 순서 5가지), 변 16, 모서리 16·듀얼 그리드, 3×3 배치를 신뢰도와 함께 인식합니다.
- 모서리+변, 변, 모서리 매칭 모드와 세트당 여러 지형.
- 점검 패널이 빠진 조합, 즉 Godot가 말없이 다른 타일로 대체할 칸을 알려 줍니다.
- 내보내기: PNG + JSON + nerulio_tileset_import.gd. 스크립트가 Godot 안에서 지형이 있는 TileSet을 만듭니다(4.7.2에서 검증).
사용 방법
- 오토타일 시트를 끌어다 놓습니다.
- 격자를 쓰고 가장 좋은 배치 후보를 적용합니다.
- 점검하고 Godot 규칙으로 테스트 맵을 칠합니다.
- Godot 4로 내보내고 편집기에서 가져오기 스크립트를 실행합니다.
받게 되는 파일
cave.png라는 시트를 내보냈을 때의 ZIP 속 Godot 폴더입니다(같은 ZIP에 Tiled·LDtk·Unity·범용 폴더와 NOTES.txt도 들어 있습니다).
| 파일 | 용도 |
|---|---|
cave.png | 타일셋 이미지. 바뀌지 않습니다. |
nerulio-tileset.json | 타일 크기, 여백, 간격, 지형 세트(모드, 지형 이름과 색), 타일마다 아틀라스 좌표·지형·피어링 비트. 설정했다면 충돌 폴리곤과 확률도 들어갑니다. |
nerulio_tileset_import.gd | Builder 클래스가 Godot 자체 API로 TileSet을 만들어 res://nerulio-tileset.tres로 저장하는 EditorScript. 손으로 쓴 .tres는 주지 않습니다. |
README.txt | 이 세트의 모드와 타일 수가 적힌 아래 단계 안내. |
Godot 4에서 TileSet 만들고 칠하기
- PNG,
nerulio-tileset.json,nerulio_tileset_import.gd를 프로젝트 루트에 복사합니다. 스크립트는res://nerulio-tileset.json을 읽고res://nerulio-tileset.tres를 쓰므로, 하위 폴더에 둘 때는 스크립트 맨 위의JSON_PATH와OUTPUT_PATH를 고치세요. - 파일시스템 독이 PNG 가져오기를 마치면 스크립트 편집기에서 스크립트를 열고 File › Run(Ctrl+Shift+X)으로 실행합니다. 출력 패널에
Saved res://nerulio-tileset.tres: source 0, 47 tiles, 188 peering bits, 0 collision polygons, mode match_corners_and_sides같은 줄이 나옵니다. TileMapLayer노드를 추가하고 Tile Set 속성에nerulio-tileset.tres를 넣습니다.- 레이어를 선택한 채 아래쪽 TileMap 패널의 Terrains 탭에서 지형 세트 0과 지형을 고르고 Connect 모드로 칠합니다. Path 모드는 한 번의 획 안에서만 칸을 잇습니다.
- 코드로는 영역 전체를 한 번에 칠합니다.
$TileMapLayer.set_cells_terrain_connect(cells, 0, 0)에서cells는Array[Vector2i], 앞의 0은 지형 세트, 뒤의 0은 지형입니다. - 픽셀 아트라면 레이어의 Texture › Filter를 Nearest로(또는 프로젝트 기본 캔버스 텍스처 필터를) 바꾸세요. Godot에서 픽셀 아트가 흐릴 때 참고.
결과 확인
- 출력 줄의 타일·비트 수를 봅니다. 블롭 세트는 타일 47개·비트 188개, 변 16이나 모서리 16 세트는 타일 16개·비트 32개입니다.
- TileSet 편집기 › Select 모드에서 타일을 누르면 Terrains 섹션에 Terrain Set 0, Terrain 0이 보이고 타일 위에 피어링 비트가 그려집니다.
- 3 × 3 사각형과 외딴 칸 하나를 칠합니다. 사각형에는 서로 다른 타일 9개(모서리 4, 변 4, 가운데)가, 외딴 칸에는 고립 타일이 놓여야 합니다.
- Studio 테스트 맵에서 같은 모양을 Godot 규칙으로 칠해 봅니다. 저희 실행에서 Godot 4.7.2는 모든 칸에 같은 타일을 놓았습니다.
문제 해결
| 증상 | 유력한 원인 | 확인 방법 | 해결 |
|---|---|---|---|
스크립트가 Cannot read res://nerulio-tileset.json을 출력 | 파일이 하위 폴더에 있거나 JSON 이름을 바꿈 | 출력 패널 첫 줄 | 세 파일을 res://로 옮기거나, 스크립트의 JSON_PATH와 OUTPUT_PATH를 고친 뒤 다시 실행 |
| PNG가 아직 가져와지지 않아 픽셀을 포함했다는 경고 | 편집기가 이미지를 가져오기 전에 스크립트를 실행함 | .tres가 PNG보다 훨씬 큼 | 파일시스템 독의 가져오기가 끝난 뒤 다시 실행해 TileSet이 가져온 PNG를 가리키게 함 |
Tile (x, y) is outside the … atlas grid; skipped | 프로젝트의 PNG가 내보낸 것과 다르거나, 내보내기 전 격자(여백·간격)가 틀림 | Studio 타일셋 패널의 격자와 이미지 크기를 비교 | 격자를 고쳐 다시 내보내고 PNG와 JSON을 함께 교체 |
| 칠하면 빈칸이나 틀린 모서리가 생김 | 세트에 필요한 조합이 없어 Godot가 가까운 타일로 대체하거나 비워 둠 | Studio 점검 패널의 있는 조합/필요한 조합, 유령 타일 | 빠진 타일을 그리거나 생성한 뒤 다시 내보내기 |
| Terrains 탭에 칠할 것이 없음 | 레이어가 다른 TileSet을 쓰거나, 타일에 Terrain Set이 없음 | TileMapLayer의 Tile Set 속성 | 그 레이어에 nerulio-tileset.tres를 지정 |
| 확대하면 타일이 뭉개져 보임 | 레이어의 텍스처 필터가 Linear | 2D 뷰포트를 확대해 픽셀 경계를 봄 | 레이어나 프로젝트 전체의 Texture › Filter를 Nearest로 |
다른 방법
| 방법 | 이럴 때 더 낫습니다 |
|---|---|
| Godot TileSet 편집기에서 비트를 직접 설정(Select 모드의 Terrains 섹션, 또는 같은 값을 여러 타일에 칠하는 타일 속성 칠하기) | 타일이 몇 개뿐이거나 Nerulio가 모르는 배치일 때. 추가 파일은 없지만 블롭 세트면 타일 47개를 하나씩 설정해야 합니다. |
| 먼저 오토타일 테스터나 타일셋 생성기로 세트를 점검·보완 | 시트가 불완전하거나 작은 원본 블록만 있을 때. |
| Tiled에서 Wang 세트로 맵을 그리고 Tiled의 Godot 4 내보내기(Tiled 1.10부터) 사용 | 레벨을 Tiled에서 설계하고 Godot에는 완성된 맵만 필요할 때. |
엔진별 내보내기와 검증 방법
"검증됨"은 실제 CC0 에셋으로 내보낸 파일을 해당 엔진·도구가 직접 불러와 원본과 비교했다는 뜻입니다. 불러오지 않은 형식은 그렇게 표시합니다.
| 대상 | 파일 | 검증 |
|---|---|---|
| Godot 4 TileSet | PNG · nerulio-tileset.json · nerulio_tileset_import.gd | 검증됨 Godot 4.7.2포함된 가져오기 스크립트가 지형 피어링 비트가 설정된 TileSet을 만듭니다. set_cells_terrain_connect로 칠한 맵이 9개 코퍼스 시트의 모든 칸에서 Studio 미리보기와 같았습니다. |
| Tiled | .tsx Wang set · sample.tmx | 검증됨 Tiled 1.12.2Tiled 자체 읽기 기능이 모든 Wang ID를 그대로 읽고 샘플 맵이 픽셀 단위로 동일하게 렌더링됩니다. 지형 브러시 자체는 실행하지 않았습니다. |
| Unity 6 Rule Tile | nerulio-ruletile.json · Editor/NerulioRuleTileImporter.cs | 검증됨 Unity 6000.5.3f1 + 2D Tilemap Extras 8.0.3블롭·변 타일셋: 칠한 Tilemap의 모든 칸이 예측한 스프라이트와 같습니다. 모서리/듀얼 그리드 타일셋은 Unity로 내보내지 않습니다. |
| LDtk | .ldtk (1.5.3) · rules · sample level | 일부 검증 LDtk 1.5.3 schema + loaderLDtk JSON 스키마와 공식 로더가 받아들이고 규칙을 다시 실행하면 내보낸 타일과 같습니다. LDtk 앱에서 열어 보지는 않았습니다. |
검증 근거
타일 코퍼스에서 픽셀만으로 배치를 인식: 블롭 47 템플릿 4개와 Wang 템플릿 2개는 높은 신뢰도, 실제 64px 동굴 타일셋은 중간 신뢰도로 모든 타일의 비트가 정확. Godot 4.7.2가 모든 테스트 칸을 Studio 예측대로 칠함(블롭 세트마다 485/485, 지형 4개 듀얼 그리드 팩 251/251). Tiled 1.12.2가 모든 Wang ID를 다시 읽음. Unity 6000.5에서 블롭·변 세트의 칠한 모든 칸 일치.
한계
- 내보내기 하나에 지형 세트 하나(안에 지형 최대 16개). 아이소메트릭·육각 타일, 애니메이션 타일, 대체 타일은 쓰지 않습니다.
- Godot 편집기의 지형 브러시 자체는 테스트에서 조작하지 않았고, 브러시가 쓰는
set_cells_terrain_connect를 검증했습니다. - 모서리(듀얼 그리드) 세트는 Godot에서 반 칸 어긋나지 않고 칸 위에 그려집니다. 듀얼 그리드 타일셋 참고.
- Tiled 지형 브러시, LDtk 앱, Godot 편집기의 칠하기는 실행하지 않았습니다. 검증은 엔진의 읽기 기능과 set_cells_terrain_connect로 했습니다.
- Unity로는 블롭·변 타일셋만 내보냅니다. 지형이 여러 개면 서로 이어지지 않는 Rule Tile 여러 개가 됩니다.
- 아이소메트릭·육각 타일, 애니메이션 타일, 오클루전·내비게이션 레이어는 지원하지 않습니다.
- 알려진 배치 없이 비트를 제안하려면 기준이 되는 "가득 찬" 타일이 필요합니다. 변만 있는 길 템플릿은 그 타일을 선택하기 전까지 추측이 틀릴 수 있습니다.
버전과 출처
Godot 4.7.2에서 검증: 함께 주는 가져오기 스크립트가 헤드리스로 TileSet을 만들고, 리소스를 다시 불러와 set_cells_terrain_connect로 칠한 뒤 모든 칸을 Studio 예측과 비교했습니다. 코퍼스의 블롭 세트마다 485/485칸, 지형 4개짜리 듀얼 그리드 팩에서 251/251칸이 같았습니다. 위의 편집기 메뉴와 노드 이름은 Godot 4.7 공식 문서를 따릅니다.
참고한 공식 문서
자주 묻는 질문
.tres 파일로 내보내나요?
아니요. PNG, JSON 설명, Godot 안에서 TileSet을 만드는 GDScript를 줍니다. 리소스는 Godot가 직접 쓰며, 이 전체 과정을 Godot 4.7.2에서 검증했습니다.
Godot와 칸 단위로 같나요?
테스트 코퍼스에서 Godot 4.7.2로 칠한 모든 칸이 Studio 미리보기와 같았습니다(블롭 세트마다 485/485, 듀얼 그리드 팩 251/251).
무료인가요? 계정이 필요한가요?
이 페이지의 기능은 모두 무료이며 계정 없이 쓸 수 있습니다. 워터마크나 막혀 있는 내보내기가 없습니다.
스프라이트가 업로드되나요?
아니요. Studio는 이 브라우저 탭 안에서 디코딩·패킹·내보내기를 합니다. 프로젝트는 브라우저(IndexedDB)에 자동 저장되며 .nerulio 파일로 저장할 수 있습니다.
Aseprite나 엔진 플러그인을 설치해야 하나요?
아니요. .aseprite 파일은 브라우저에서 읽고 씁니다. 엔진별 번들에는 그 엔진에 필요한 것이 들어 있습니다(Godot는 가져오기 설정과 씬, Unity와 Godot 타일셋은 작은 편집기 스크립트).