47타일 블롭 타일셋 · 배치 인식·점검·생성
서로 호환되지 않는 47타일 순서가 여러 개 있고, PNG에는 어느 것인지 적혀 있지 않습니다. Studio는 알려진 모든 순서를 모든 위치에서 이웃 타일이 얼마나 매끄럽게 이어지는지로 점수를 매겨, 어떤 배치인지와 확신도를 알려 줍니다.
블롭 타일셋은 지형 칸이 여덟 이웃에 따라 보일 수 있는 모든 모양마다 타일을 한 장씩 둡니다. 이웃 여덟 칸은 2⁸ = 256가지 조합이 되지만, 대각선 이웃은 양옆 두 변이 같은 지형일 때만 보이므로 256가지가 정확히 47장으로 줄어듭니다. 고도 4는 이런 세트를 Match Corners and Sides 모드의 지형 세트로, Tiled는 혼합 Wang 세트로, 유니티는 8방향 룰 타일로 저장합니다. 47장은 서로 호환되지 않는 여러 순서로 배포되며, Studio는 시트가 어느 순서인지 알려 주고 비트를 내보냅니다.

- 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
이웃 마스크 256가지에서 타일 47장으로
이웃마다 비트를 줍니다. N 1, NE 2, E 4, SE 8, S 16, SW 32, W 64, NW 128(y는 아래로 증가). 칸의 마스크는 같은 지형인 이웃의 비트를 더한 값으로 0부터 255까지입니다. 아무 규칙이 없다면 타일이 256장 필요합니다.
하지만 모서리는 열린 변 뒤에 가려집니다. 위 칸이 비어 있으면 타일 윗변에 이미 테두리가 그려지므로, 오른쪽 위 칸이 땅이든 아니든 눈에 보이는 차이가 없습니다. 그래서 NE는 N과 E가 모두 땅일 때만 셈에 넣고, 나머지 세 모서리도 똑같이 합니다. 이 규칙을 256가지 마스크 모두에 적용하면 서로 다른 값이 47개 남습니다. 아래 예시 표가 그 개수를 셉니다.
PNG 안에는 이 47장이 어떤 순서로 놓였는지 적혀 있지 않습니다. cr31 오름차순, 7×7 "wang blob", caeles 템플릿, 게임메이커 템플릿, 고도 3의 12×4 템플릿은 같은 칸에 서로 다른 타일을 둡니다. 잘못된 표로 가져오면 모든 타일이 엉뚱한 규칙에 들어가므로, Studio는 비트를 쓰기 전에 알려진 모든 순서를 그림의 이음새로 채점합니다(배치를 알아내는 방법).
지형 하나짜리 완전한 세트에는 이웃 비트가 모두 188개 들어갑니다. 가득 찬 타일에 8개, 외딴 타일에는 0개입니다. 고도는 이것을 피어링 비트로, Tiled는 Wang ID로(Tiled 설명서는 지형 두 개의 완전한 혼합 세트를 256장이라 하고, 47장 블롭 같은 축소 세트도 호환된다고 합니다), 유니티는 룰 타일의 이웃 규칙으로 씁니다.
- 이웃 마스크
- 같은 지형인 이웃의 비트 합. 0(혼자)부터 255(사방이 둘러싸임)까지.
- 줄인 마스크
- 양옆 두 변이 모두 켜지지 않은 모서리를 뺀 마스크. 값이 47가지만 남습니다.
- 안쪽 모서리
- 네 변은 이어지고 대각선 하나만 열린 타일. 예: 127 = NW만 빼고 모두.
- 외딴 타일과 가득 찬 타일
- 마스크 0(혼자 있는 칸, 사방에 테두리)과 255(사방이 땅, 테두리 없음).
47장 세어 보기
켜진 변의 개수로 마스크를 묶습니다. 양옆 변이 모두 켜진 모서리는 켜지거나 꺼질 수 있습니다.
켜진 변 변 패턴 셈에 드는 모서리 타일
0 1 0 1 × 2⁰ = 1
1 4 0 4 × 2⁰ = 4
마주 보는 2 2 (N+S, E+W) 0 2 × 2⁰ = 2
이웃한 2 4 (N+E, E+S, …) 1 4 × 2¹ = 8
3 4 2 4 × 2² = 16
4 1 4 1 × 2⁴ = 16
합계 = 47
원래 N + NE = 1 + 2 = 3 → 줄이면 1 (NE는 열린 E 변 뒤에 있음)
원래 255 − NW = 127 → 그대로 127 (안쪽 모서리: 네 변 모두 켜짐)줄인 마스크를 오름차순으로 놓으면 0, 1, 4, 5, 7, 16, 17, 20으로 시작해 255로 끝납니다. 이 목록을 한 줄에 여덟 개씩 놓은 것이 cr31 오름차순 배치입니다.
Studio가 알아보는 47장 배포 순서
| 배치 | 시트 | 구별하는 법 |
|---|---|---|
| cr31 오름차순 ID | 8 × 6: 타일 47장 + 빈 칸 1개 | 마스크 오름차순: 외딴 타일이 처음, 가득 찬 타일이 마지막. 기존 타일 작업실 템플릿도 이 순서 |
| cr31 wang blob | 7 × 7 = 49칸 | 모서리 세 칸이 마스크 0. Tiled의 wangblob 예제가 이 순서 |
| caeles seamless template II | 7 × 7 또는 8 × 6 | OpenGameArt의 템플릿 시트. 두 cr31 배치와 다른 순서 |
| 게임메이커 스튜디오 2 47타일 | 8 × 6, 첫 칸은 비움 | 가득 찬 타일이 마지막 칸 |
| 고도 3 "3×3 minimal" 템플릿 | 12 × 4: 마스크 47개 + 빈 칸 1개 | 고도 3.5 문서의 템플릿 이미지에서 추출 |
코퍼스 실행에서 블롭 템플릿 네 장은 모두 높은 신뢰도(이음새 AUC 1.000)로, 실제 64px 동굴 타일셋은 게임메이커 47로 중간 신뢰도(0.964)로 인식됐고 47장 모두 비트가 맞았습니다.
이렇게 작동합니다
- 알려진 블롭 47 순서: cr31 오름차순(8×6), cr31 wang blob 7×7, caeles 7×7·8×6, GameMaker Studio 2, Godot 3 3×3 minimal(12×4).
- 이음새 연속성으로 점수 매김(ROC AUC, 1.0 = 완벽). 질감이 있는 그림은 색 대역 히스토그램으로 측정합니다.
- 알려진 순서가 아닌 시트는 픽셀에서 비트를 제안합니다(미리보기).
- 생성기가 RPG 만들기 A2 블록이나 2×3 기본 블록에서 4분할 조각 그대로 블롭 47 세트를 만듭니다.
사용 방법
- 47타일 시트를 끌어다 놓습니다.
- 격자를 쓰고 배치 후보와 신뢰도를 읽습니다.
- 맞는 것을 적용하고 점검 패널을 확인합니다.
- Godot 4·Tiled·Unity·LDtk로 내보냅니다.
받게 되는 파일
블롭 세트에서 Studio가 쓰는 파일. cave.png라는 시트를 예로 들었습니다(대상마다 ZIP 하나).
| 파일 | 용도 |
|---|---|
nerulio_tileset_import.gd | 고도 4: PNG와 nerulio-tileset.json 옆에 두고 실행(File › Run)하면 Match Corners and Sides 지형 세트 하나가 든 nerulio-tileset.tres를 저장합니다. 지형 하나면 타일 47장, 피어링 비트 188개. |
cave.tsx | Tiled: 지형마다 색 하나인 혼합 Wang 세트와 그것으로 그린 sample.tmx. Tiled가 모두 0인 Wang ID를 버리므로 한 가지 색 세트의 외딴 타일은 빠집니다. |
nerulio-ruletile.json | 유니티 6: Editor/NerulioRuleTileImporter.cs와 함께 지형마다 룰 타일 하나, 스프라이트는 Point 필터로 잘림. |
cave.ldtk | LDtk 1.5.3: 지형마다 IntGrid 값 하나, 타일마다 3×3 규칙 하나(스키마와 로더로 확인, 앱에서 열지는 않음). |
tileset.json | 범용: 타일마다 패턴, cr31 마스크, Tiled Wang ID, 고도 피어링 이름, 사각형. |
문제 해결
| 증상 | 유력한 원인 | 확인 방법 | 해결 |
|---|---|---|---|
| 엔진에서 땅 한가운데에 테두리가 곳곳에 보임 | 시트를 틀린 47장 순서로 읽음 | Studio의 첫 배치 후보를 내가 가정한 순서와 비교 | 인식된 배치를 적용하고 다시 내보내기. 위 표에 순서가 정리돼 있음 |
| 호수 모서리와 한 칸 폭 길에서 구멍이나 이상한 타일 | 서로 다른 패턴이 47개보다 적음: 안쪽 모서리 누락, 또는 48칸 시트의 중복 | 점검 패널: 빠진 마스크는 반투명 타일로, 중복은 목록으로 | 빠진 타일을 그리거나 기본 블록에서 세트를 생성(타일셋 생성기) |
| 점검 패널에 "열린 변 뒤의 모서리 비트" | 양옆 변이 다 켜지지 않은 모서리를 가진 타일(예: E 없이 N + NE): 47가지에 속하지 않음 | 목록의 타일을 눌러 3×3 비트를 확인 | 모서리 비트를 지움. 그 조합은 모서리 없는 타일과 같은 타일임 |
| Tiled에서 외딴 한 칸이 나오지 않음 | Tiled는 한 가지 색 세트에서 외딴 타일의 모두 0인 Wang ID를 버림 | .tsx에 시트의 47장 대신 Wang 타일 46장 | 한 가지 색 세트에서는 정상. 외딴 칸은 고도·유니티·LDtk에서는 됨 |
| 고도에서 다른 지형과의 전환이 어색함 | 블롭 세트는 지형 하나와 빈 곳만 다룸. 전환에는 전용 타일이 필요 | 테스트 맵에서 두 지형을 나란히 칠해 보기 | A 위 B 세트를 한 쌍씩 생성하거나 전환 타일을 그림 |
다른 방법
엔진별 내보내기와 검증 방법
"검증됨"은 실제 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에서 블롭·변 세트의 칠한 모든 칸 일치.
한계
- 블롭 세트 하나는 지형 하나와 빈 곳만 다룹니다. A 위 B 전환은 한 쌍씩 생성합니다.
- 목록에 없는 순서(Tilesetter의 출력 순서는 공개되지 않음)는 비트를 칠하거나 픽셀에서 제안받아야 합니다.
- 유니티에는 지형마다 룰 타일 하나가 가며 지형 사이 전환은 없습니다.
- Tiled 지형 브러시, LDtk 앱, Godot 편집기의 칠하기는 실행하지 않았습니다. 검증은 엔진의 읽기 기능과 set_cells_terrain_connect로 했습니다.
- Unity로는 블롭·변 타일셋만 내보냅니다. 지형이 여러 개면 서로 이어지지 않는 Rule Tile 여러 개가 됩니다.
- 아이소메트릭·육각 타일, 애니메이션 타일, 오클루전·내비게이션 레이어는 지원하지 않습니다.
- 알려진 배치 없이 비트를 제안하려면 기준이 되는 "가득 찬" 타일이 필요합니다. 변만 있는 길 템플릿은 그 타일을 선택하기 전까지 추측이 틀릴 수 있습니다.
버전과 출처
256 → 47 축소는 tests/game-autotile.test.mjs가 256개 마스크 전부에 대해 확인합니다. 배치 표는 코퍼스 매니페스트에서 각 시트와 대조했고, 고도 3 표는 고도 3.5 문서의 템플릿 이미지에서 추출했습니다. 내보내기 검증(2026-09-23): Godot 4.7.2(블롭 세트마다 485/485칸), Tiled 1.12.2, Unity 6000.5.3f1. LDtk 1.5.3은 스키마와 로더로만 확인했습니다. 엔진 용어는 링크한 공식 문서를 따릅니다.
참고한 공식 문서
자주 묻는 질문
인식은 얼마나 정확한가요?
테스트 코퍼스의 블롭 템플릿 4개가 모두 높은 신뢰도(AUC 1.000)로, 실제 64px 동굴 타일셋은 중간 신뢰도(0.964)로 인식됐고 47개 타일의 비트가 모두 맞았습니다.
시트에서 타일 두 개가 뒤바뀌어 있으면요?
그림 점검이 코퍼스의 모든 블롭 세트에서 뒤바뀐 두 타일을 정확히 찾아냈습니다.
무료인가요? 계정이 필요한가요?
이 페이지의 기능은 모두 무료이며 계정 없이 쓸 수 있습니다. 워터마크나 막혀 있는 내보내기가 없습니다.
스프라이트가 업로드되나요?
아니요. Studio는 이 브라우저 탭 안에서 디코딩·패킹·내보내기를 합니다. 프로젝트는 브라우저(IndexedDB)에 자동 저장되며 .nerulio 파일로 저장할 수 있습니다.
Aseprite나 엔진 플러그인을 설치해야 하나요?
아니요. .aseprite 파일은 브라우저에서 읽고 씁니다. 엔진별 번들에는 그 엔진에 필요한 것이 들어 있습니다(Godot는 가져오기 설정과 씬, Unity와 Godot 타일셋은 작은 편집기 스크립트).