layer-tilesets について
layer-tilesetsは、グリッドの整ったゲームマップを作るアーティスト向けのLayerスキルです。投影法と占有範囲を統一し、複数のエンジン形式へ書き出す方法を説明します。
主な機能
- 01タイルの投影法と占有範囲の統一
- 02正方形・六角形グリッドへの対応
- 03参照画像によるセットのスタイル維持
- 04建物の高さと向きの指定
- 05エンジン向けタイルセットの出力
活用シーン
- 01アイソメトリックな村マップの作成
- 02複数マス建物と異なる向きの作成
- 03GodotやUnity向けタイルセットの出力
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ layerai/ skills --skill layer-tilesetsインストール後、Claude Code で/layer-tilesetsを入力して読み込まれたか確認します。
詳細
レイヤータイルセット
概要
タイルは、隣り合うタイルがあって初めて役に立ちます。わずかに異なる角度で描かれた、あるいはわずかに異なる土台に立つ、美しいアイソメトリックの家が2軒あっても、1つのマップ上には並べられません。プロンプトの表現を工夫しても解決できません。Layer は説明ではなく構造で解決します。execute_forge の tile_grid は、固定グリッドのブロックアウト上に各タイルを描画し、その後タイルを切り出してグリッドに合わせます。これにより、セット内のすべてのタイルが同じ投影とフットプリントを共有します。
このスキルでは、グリッド上に配置されるタイル(アイソメトリックのひし形、六角形、整列したトップダウンのセル)を扱います。草や石のように端から端まで繰り返される平面はテクスチャです。layer-textures の説明に従って、tileability を使用してください。生成の仕組み、費用のゲート、ポーリングについては layer を参照してください。
ここで名前が挙がっている関連スキルが利用可能なスキルに見当たらない場合は、ユーザーにインストールを依頼してください(npx skills add layerai/skills --skill <name>)。無人で進める場合は、ツールのスキーマに基づいて作業を続け、該当スキルがないことを明記してください。
クイックリファレンス
| 目的 | 使用方法 |
|---|---|
| グリッド上に描画するモデル | list_base_models で filter.capabilities: {tile_grid: true} を指定し、最初の結果を使用します |
| アイソメトリックのひし形タイル | tile_grid.shape: "SQUARE"(デフォルト)、向きは DIAMOND(デフォルト) |
| トップダウンの正方形マップ | shape: "SQUARE"、orientation: "ALIGNED" |
| 六角形タイル | shape: "HEXAGON"、orientation: "POINTY_TOP"(デフォルト)または "FLAT_TOP" |
| クラシックな2:1のアイソメトリック表示 | elevation を未設定にすると、正方形では30(2:1のディメトリック)です。最大60を設定できます。六角形では未設定時に60です |
| 地面タイルと建物 | 平坦な地面には height: 0、建物には約1~2(セルの辺を単位とする) |
| 複数セルの建物 | footprint_width x footprint_depth。各辺は1~8セルです。1セルを占める六角形では未設定のままにします |
| 同じ建物の別の面 | facing は0、90、180、270(正方形のみ。六角形の向きは0) |
| 出力されるセルのサイズ | tile_width はピクセル単位です。未設定の場合、描画サイズを最も近い2のべき乗に丸めます |
| 既存のアセットをタイルとして描き直す | そのアセットを init_image として添付します。形状とデザインは維持されます |
| セットの外観や向きを引き継ぐ | 承認済みのタイルを reference_image として添付します |
| 固定キャンバス上のタイル | canvas: "FIXED" と anchor: "BASE" を指定して output_fit を使用します |
| エンジンへのインポート | engine に TILED、GODOT、UNITY、JSON のいずれかを指定して export_tileset を使用します |
グリッドを最初に固定する
グリッドはセットの基準です。すべてのタイルが同じ tile_grid を共有し、タイルごとに変わるのはフットプリント、高さ、向きだけです。最初の実行前に shape、orientation、elevation、light_from、tile_width を決めて書き留め、後続のすべての実行で同じ値を渡してください。途中で elevation や tile_width を変更するとタイルが揃わなくなり、light_from を変更するとマップ上で影が両方向に落ちることになります。
light_from(カメラから見た左または右)はデフォルト値があるため、忘れやすい項目です。それでも明示し、プロンプトの照明に関する表現をその値と一致させてください。
プロンプトで指定する内容
グリッドが投影と配置を処理するため、プロンプトでは対象とセットの表現ルール、つまり素材、配色、時代、ディテールの度合い、輪郭の処理に文字数を使います。タイル上にあるものだけを説明してください。セルの外の風景、地平線、隣接する建物は、切り抜きの邪魔になります。
タイルを1つ承認し、それをすべての同系タイルに reference_image として添付して、配色とレンダリングを引き継がせます。数か月にわたって増やしていくセットでは、参照セットをトレーニングします(layer-reference-sets)。
向き
四方から見た建物は、facing を 0、90、180、270 にした4回の実行で生成します。まず facing 0 を生成して承認します。次に、承認済みのタイルを reference_image として添付して、残り3方向を実行します。これにより「同じ建物を別の向きから見たもの」になります。これがないと、フットプリントだけが同じで別々の建物が4つ生成されます。向きを指定できるのは正方形のセルのみです。
export_tileset は、同じ対象の向きをその対象名に続けて命名し(tower_0、tower_90)、対象と向きをタイルのプロパティとして記録します。
納品
マップの仕上げには export_tileset を使います。決定論的なファイル操作で、Creative Units は不要です。各タイルはグリッド上の位置に配置されます。リストの順序で最大128個の file_ids を渡します。すべてのタイルで同じグリッドを使う必要があります。
engine | zip の内容 |
|---|---|
TILED | .tsx タイルセット、タイルごとの画像、およびサンプルの .tmx マップ |
GODOT | 1つのアトラスを使った Godot 4 TileSet .tres |
UNITY | 1つのアトラスと、ピボット付きスプライトに分割する .meta |
JSON | PixiJS、Phaser、Cocos 向けの1つのアトラスと TexturePacker JSON(hash) |
zip には、インポート手順とマップに必要なグリッド設定を記載した README が含まれます。padding はアトラス上の透明な余白を設定します。TILED では無視されます。
エンジンへのインポートではなく1枚のシート画像を求められた場合は、pack_sprite_sheet を使います。すべてのフレームが tile_grid タイルであれば、フレームをアンカー(タイルが立つセルの下辺中央)に合わせて配置し、cell_width と cell_height を無視して、各フレームの矩形と Unity のピボットを返します。同じサイズの単体スプライトとして納品するタイルでは、FIXED キャンバスと anchor: "BASE" を指定した output_fit により、すべてのタイルの底辺を同じ位置に揃えます。tile_grid なしの BASE は拒否されます。
使用例
「Godot 向けのアイソメトリックな中世の村のタイルセット:草地、土の道、水面の地面タイル、四方から見た 2x2 の家、1x1 の見張り塔。」
filter.use_case: "text_to_image"とfilter.capabilities: {tile_grid: true}を指定してlist_base_modelsを実行します。最初の結果を選び、トリガーワードがあればget_base_modelを実行します。- セット全体でグリッドを固定します。
{shape: "SQUARE", orientation: "DIAMOND", light_from: "left", tile_width: 128}。2:1 のディメトリックではelevationを未設定にします。 - 最初に草地を生成します。
height: 0、footprint_width: 1、footprint_depth: 1とし、プロンプトでは素材、配色、輪郭のみを指定します:「手描きの草地タイル、落ち着いた緑、柔らかな濃色の輪郭」。1つ承認し、以降のすべての実行でreference_imageとして使います。 - 道と水面:同じグリッド、
height: 0、承認済みの草地を添付します。 - 家の
facing0:footprint_width: 2、footprint_depth: 2、height: 1.5。承認してから、90、180、270 の向きを生成し、それぞれに承認済みの家をreference_imageとして添付します。 - 見張り塔:1x1、
height: 2。見た目を合わせるため、草地を添付します。 - ステップ3の前に、作業の料金を見積もります。種類ごとに個別に料金を見積もれる1回分の実行(地面タイル、家、塔)について
estimate_forge_priceを実行し、個数分を合算して、20 CUs を超える場合はユーザーに確認します。各実行を開始し、返されたpoll_interval_secondsに従ってget_forge_runをポーリングします。 engine: "GODOT"と、リスト順の承認済みfile_idsを指定してexport_tilesetを実行します。ダウンロードリンクを渡し、README に記載されたグリッド設定を案内します。
よくある間違い
tile_gridを指定せずにモデル実行のプロンプトに「isometric」と書き、タイルがスナップすると期待する。- セットの途中で
elevation、tile_width、orientation、light_fromを変更する。 - 承認済みの facing 0 を
reference_imageとして添付せずに、facing 90 から 270 を生成する。 - facing が 0 のみの六角形に
facingを設定する。 - タイルの周囲の風景(地平線、隣接するオブジェクト、セルの外まで続く地面)をプロンプトで指示する。
- 平坦な反復面に
tile_gridを使ったり、グリッド上に配置するタイルにtileabilityを使ったりする。 - ユーザーがエンジンにタイルセットとしてインポートできるものを求めているのに、まとめたシートを渡す。