本文へスキップ

47タイル ブロブタイルセット · 配置の判定・チェック・生成

互換性のない47タイルの並びがいくつもあり、PNGにはどれなのか書かれていません。Studioは既知の全配置を全位置で、隣り合うタイルがどれだけ滑らかにつながるかで採点し、どの配置かと確からしさを示します。

ブロブタイルセットは、地形のマスが8つの隣に応じて取りうる見た目ごとに1枚ずつタイルを持ちます。8つの隣は2⁸ = 256通りの組み合わせになりますが、斜めの隣は両側の2辺が同じ地形のときしか見えないため、256通りがちょうど47枚にまとまります。Godot 4はこのセットをMatch Corners and Sidesモードの地形セットとして、Tiledは混合Wangセットとして、Unityは8方向のRule Tileとして保存します。47枚は互換性のない複数の並びで配布されており、Studioはシートがどの並びかを判定してビットを書き出します。

タイルセットやオートタイルのシート(PNG)をドロップ
空のStudioを開く
ブラウザ内で処理し、ファイルはアップロードされません。
Studio のタイル作業画面:GameMaker配置と認識した47タイルのシート、地形ビット、完了したチェック
CC0アセット(OpenGameArt)を開いた実際の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の両方が陸のときだけ数え、残りの3つの角も同じにします。このルールを256通りすべてに当てはめると、異なる値は47個残ります。下の具体例の表でその数を数えています。

PNGの中には、47枚がどの順に並んでいるかは書かれていません。cr31昇順、7×7の「wang blob」、caelesのテンプレート、GameMakerのテンプレート、Godot 3の12×4テンプレートは、同じマスに違うタイルを置きます。間違った表で読み込むと全タイルが違うルールに入るため、Studioはビットを書く前に既知のすべての並びを絵の継ぎ目で採点します(配置の見分け方)。

地形1つの完全なセットには、隣接ビットが合計188個入ります。全面タイルに8個、孤立タイルには0個です。Godotはこれをピアリングビットとして、TiledはWang IDとして(Tiledのマニュアルは地形2つの完全な混合セットを256枚とし、47枚のブロブのような縮小セットも互換だとしています)、UnityはRule Tileの隣接ルールとして書きます。

隣接マスク
同じ地形の隣のビットの合計。0(ひとりぼっち)から255(四方を囲まれる)まで。
縮約マスク
両側の2辺がそろっていない角を除いたマスク。値は47通りだけ残る。
内側の角
4辺はつながり、斜め1つだけが開いたタイル。例: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のまま  (内側の角:4辺すべてつながる)

縮約マスクを昇順に並べると0、1、4、5、7、16、17、20と始まり255で終わります。この一覧を1行8個ずつ並べたものがcr31昇順の配置です。

Studioが見分ける47枚の配布順

配置シート見分け方
cr31昇順ID8 × 6:47枚+空きマス1マスクの昇順:孤立タイルが最初、全面タイルが最後。従来のタイルセット工房のテンプレートも同じ
cr31 wang blob7 × 7 = 49マス角の3マスがマスク0。Tiledのwangblobサンプルがこの並び
caeles seamless template II7 × 7または8 × 6OpenGameArtのテンプレートシート。2つのcr31配置とは別の並び
GameMaker Studio 2の47タイル8 × 6、最初のマスは未使用全面タイルが最後のマス
Godot 3「3×3 minimal」テンプレート12 × 4:マスク47個+空き1Godot 3.5ドキュメントのテンプレート画像から採取

コーパスの実行では、ブロブテンプレート4枚すべてが高信頼度(継ぎ目AUC 1.000)で、実在の64px洞窟タイルセットはGameMaker 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を生成。

使い方

  1. 47タイルのシートをドロップ。
  2. グリッドを使い、配置候補と信頼度を読む。
  3. 正しいものを適用し、チェックパネルを確認。
  4. Godot 4・Tiled・Unity・LDtkへ書き出し。

出力されるファイル

ブロブセットでStudioが書き出すファイル。cave.pngというシートの例です(書き出し先ごとにZIP 1つ)。

ファイル用途
nerulio_tileset_import.gdGodot 4:PNGとnerulio-tileset.jsonの隣で実行(File › Run)すると、Match Corners and Sidesの地形セットを1つ持つnerulio-tileset.tresを保存します。地形1つならタイル47枚、ピアリングビット188個。
cave.tsxTiled:地形ごとに1色の混合Wangセットと、それで描いたsample.tmx。TiledはすべてゼロのWang IDを捨てるため、単色セットの孤立タイルは含まれません。
nerulio-ruletile.jsonUnity 6:Editor/NerulioRuleTileImporter.csと組み合わせて地形ごとにRule Tileを1つ作り、スプライトはPointフィルターで切り出し。
cave.ldtkLDtk 1.5.3:地形ごとにIntGridの値1つ、タイルごとに3×3ルール1つ(スキーマとローダーで確認、アプリでは未確認)。
tileset.json汎用:タイルごとのパターン、cr31マスク、TiledのWang ID、Godotのピアリング名、矩形。

トラブルシューティング

症状考えられる原因確認方法対処
エンジンで陸の真ん中のあちこちに縁が出るシートを違う47枚の並びで読んだStudioの最初の配置候補と、自分が想定した並びを比べる判定された配置を適用して書き出し直す。上の表に並びをまとめています
湖の角や1マス幅の道で穴や変なタイルが出る異なるパターンが47未満:内側の角の欠け、または48マスのシートでの重複チェックパネル:足りないマスクは半透明タイルで、重複は一覧で足りないタイルを描くか、基本ブロックからセットを生成(タイルセットジェネレーター)
チェックパネルに「開いた辺の奥の角ビット」両側の辺がそろっていない角を持つタイル(例:EなしでN + NE):47通りに含まれない一覧のタイルをクリックして3×3のビットを見る角ビットを消す。その組み合わせは角のないタイルと同じもの
Tiledで孤立した1マスが出ないTiledは単色セットの孤立タイルが持つすべてゼロのWang IDを捨てる.tsxのWangタイルがシートの47枚ではなく46枚単色セットでは正常。孤立マスはGodot・Unity・LDtkでは使える
Godotで別の地形との境目が不自然ブロブセットは地形1つと空きだけを扱う。境目には専用のタイルが要るテストマップで2つの地形を隣に塗ってみるA over Bのセットを1組ずつ生成するか、遷移タイルを描く

ほかの方法

方法こんなときに向いています
角タイル16枚のデュアルグリッドセット新しくセットを描いていて、半タイルずれた表示レイヤーを受け入れられるとき。47枚ではなく16枚です(デュアルグリッドの解説)。
辺タイル16枚のセット道、柵、パイプ、足場のように4辺だけが大事で、内側の角を描かないとき。
基本ブロックから47枚を生成RPGツクールA2のブロックや2×3の基本ブロックがあるとき。タイルセットジェネレーターが20個のパーツからセット全体を組み立てます。

エンジン別の書き出しと検証方法

「検証済み」は、実際のCC0アセットから書き出したファイルを本物のエンジン・ツールで読み込み、元データと比較したという意味です。読み込んでいない形式はそのように表示します。

書き出し先ファイル検証
Godot 4 TileSetPNG · 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 Tilenerulio-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はブロブ・辺セットの塗った全セルで一致。

制限

  • ブロブセット1つで扱うのは地形1つと空きだけです。A over Bの遷移は1組ずつ生成します。
  • 一覧にない並び(Tilesetterの出力順は公開されていない)は、ビットを塗るかピクセルから提案させる必要があります。
  • Unityには地形ごとにRule Tileが1つ渡り、地形間の遷移はありません。
  • Tiledの地形ブラシ、LDtkアプリ、Godotエディターでの塗りは操作していません。検証はエンジンの読み込み機能とset_cells_terrain_connectで行いました。
  • Unityへはブロブ・辺タイルセットのみ。地形が複数あると、互いにつながらないRule Tileが複数になります。
  • アイソメトリック・六角タイル、アニメーションタイル、オクルージョン・ナビゲーションレイヤーは対象外です。
  • 既知の配置なしでビットを提案するには基準となる「塗りつぶし」タイルが必要です。辺だけの道テンプレートでは、そのタイルを選ぶまで推定を誤ることがあります。

バージョンと出典

256 → 47の縮約はtests/game-autotile.test.mjsが256通りすべてで確かめています。配置の表はコーパスのマニフェストで各シートと照合し、Godot 3の表はGodot 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タイルのビットはすべて正解でした。

シート内で2枚のタイルが入れ替わっていたら?

絵のチェックが、コーパスの全ブロブセットで入れ替わった2枚を正確に見つけました。

無料ですか?アカウントは必要ですか?

このページの機能はすべて無料で、アカウントなしで使えます。透かしや制限された書き出しはありません。

スプライトはアップロードされますか?

いいえ。Studioはこのブラウザのタブ内でデコード・パック・書き出しを行います。プロジェクトはブラウザ(IndexedDB)に自動保存され、.nerulioファイルとして保存できます。

Asepriteやエンジンのプラグインは必要ですか?

いいえ。.asepriteファイルはブラウザで読み書きします。エンジン別のバンドルには必要なものが入っています(Godotはインポート設定とシーン、UnityとGodotのタイルセットは小さなエディタースクリプト)。