mcpField
S
scenario-game-assets

scenario-game-assets

github.com/scenario-labsクリエイティブ・メディア1.2k620 回インストール1 日前に更新
リポジトリ

scenario-game-assets について

scenario-game-assetsは、Scenarioの公開カタログでゲームアートを作成・準備するスキルです。ゲーム制作向けに、種類別のモデル検索、生成、調整、一貫性の確認、書き出しを扱います。

主な機能

  1. 01ゲームアセットの種類別モデル検索
  2. 02スプライト・アイコン・タイルの生成
  3. 03背景除去とアップスケール
  4. 04ピクセルアートの調整
  5. 05アセットのPNG書き出し

活用シーン

  1. 01透明なRPGインベントリアイコンの作成
  2. 02地形タイルセットと遷移タイルの制作
  3. 03ゲームUI用アートのバリエーション作成
  4. 04生成アセットのゲームエンジン向け書き出し

MCP 対応

`scenario`スキルで説明されるScenarioのMCP接続と生成ワークフローを利用します。クライアントによるモデルの推奨、スキーマ確認、生成、アセット書き出しを案内します。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/scenario-labs/skills --skill scenario-game-assets

インストール後、Claude Code で/scenario-game-assetsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

isometric-templates.json
isometric-templates.md
README.md
scripts/
build_isometric_templates.py

詳細

Scenario ゲームアセット

概要

Scenario の公開カタログには、アセットタイプごとにトレーニングされたモデル(スプライト、アイコン、小物、タイルセット、アイソメトリックシーン、ピクセルアート、コンセプトアート)に加え、背景除去、アップスケーリング、ピクセルのクリーンアップ用ユーティリティが用意されています。アセットタイプで探し、スキーマを確認して、生成、後処理、エクスポートします。1つのキャラクターのアニメーションフレームを並べたシートや、あらゆる歩行サイクル、ループ、GIFは、scenario-sprite-animation に該当します。接続と基本的な流れについては、scenario スキルを参照してください。ここで名前が挙がっている関連スキルが利用可能なスキルにない場合は、ユーザーにインストールを依頼してください(npx skills add scenario-labs/skills --skill <name>)。ユーザーの応答を待たずに進める場合は、ツールスキーマに基づいて作業し、その不足を明示してください。

クイックリファレンス

タスク呼び出し
アセットタイプからモデルを探すユーザーが使った言葉(スプライト、ゲームアイコン、タイルセット、アイソメトリック、ピクセルアート)で recommend を呼び出します。名前がわかっているメンバーを探す場合は search を使います
入力を確認するmodel_schema_get(model_run の前に必ず実行)
生成するmodel_run(バッチの料金を確認するには dry_run=true を指定します。並行実行の上限を超えないよう、wait=false で複数回に分けて実行し、429で拒否されたものは再実行します)。続けて jobs_wait を呼び出します
背景を透明にするまずネイティブアルファ対応の生成モデルを recommend で探します。なければ、アセットの背景除去を探します
アップスケールまたは高画質化アップスケーリングを recommend で探します(2倍から16倍まで対応するツールがあります)
ピクセルアートをクリーンアップするクリーンアップを recommend で探します(グリッドへの整列、パレットの削減)
視差背景のレイヤーレイヤーツール(recommend、capability: "img2img")を使って描画済み背景を分割するか、実行ごとに1つのレイヤーを生成します。「視差背景」を参照してください
ゲームエンジン用にエクスポートするformat="png" を指定して asset_download を呼び出します

実例:透明なポーションアイコンセット

依頼:「RPG のインベントリ用に、スタイルを統一した透明背景のポーションアイコンを4つ作成してください。」

  1. ユーザー自身の言葉をpromptとしてrecommendを実行し、next_stepに従って選びます(scenarioを参照)。 カタログはチームごとに異なるため、モデル ID をハードコードしないでください。実行前にここで透明度を決めます。recommendの項目またはスキーマにアルファ出力対応と記載された候補を優先してください。生成時点でアイコンを透明にできるため、アイコンごとに料金が発生する背景除去処理を省けます。それ以外の候補は不透明として扱います。
  2. model_schema_getでmodel_id=""を指定します。プロンプトフィールド、サイズフィールド、サンプル数パラメーターがあれば、その内容を確認します。
  3. model_runでparameters={"prompt": "health potion, corked glass bottle, glowing red liquid, bold outline, centered, plain background"}を指定します(無地の背景は背景除去処理で切り抜きやすくなります。ネイティブのアルファ対応モデルでは、被写体だけを指定し、「transparent」という語は決して使いません)。スキーマのサンプル数パラメーターは、1つのアイテムのバリエーションを1つのプロンプトで繰り返し生成します。アイテムが異なる場合は、アイテム名だけを変え、「mana potion」「stamina potion」のように、固定した文言テンプレートで別々に実行します。まずdry_run=trueで料金を確認します(dry run 1回で1つの工程の料金がわかるため、バッチ全体ではその数を掛けます)。その後、wait=falseで実行します。
  4. jobs_waitでjob_ids=[""]を指定します(IDは最大32個まで指定でき、1回の呼び出しでバッチ全体を処理できます)。タイムアウトした場合は、返されたpending_job_idsを指定して再度呼び出し、model_runをもう一度実行してはいけません。その後、asset_displayで確認します。呼び出し1回につきasset_idは1つです。
  5. 不透明な候補を選んだ場合のみ、透明化します。背景除去ツール(作成時点ではPhotoroom、Pixelcut、851 Labs)をrecommendで探し、選んだツールのスキーマをmodel_schema_getで取得してから、画像フィールドに生成済みアセット ID を設定してmodel_runを実行します。
  6. 任意:残すアセットをアップスケールします(アップスケールツールをrecommendで探し、いつもどおりmodel_schema_getでスキーマを取得します。アップスケーラーは2倍から8倍以上に対応します)。
  7. asset_downloadでasset_idとformat="png"を指定します(PNG はアルファを保持します)。リダイレクトに従います: curl -L -o potion.png "<url>"。

スタイルの一貫性

  • まずは手軽にできる方法から試します。バッチ全体で同じseedを使い、スキーマにある場合はモデルのプロンプト拡張フラグをオフに固定します。拡張機能は各プロンプトを個別に書き換えるため、固定テンプレートが崩れます。
  • 参照画像:アートディレクション画像をupload_assetでアップロードし、ローカルパスではなくアセット ID をモデルの画像または参照パラメーターに渡します。
  • asset_describeは再利用可能なスタイルの要約を抽出します(料金が発生します。parameters内のdry_run: trueで見積もりができます)。scenario_tools_searchで見つけ、見積もりと実行にはpermissionに基づいて実行方法を選びます(scenarioを参照)。
  • searchでtarget="assets"とimages={like: ["asset_..."]}を指定すると、目標のルックにすでに合致するアセットを探せます。
  • プロジェクトのスタイルを固定するには、プロジェクト独自のアートでカスタム LoRA をトレーニングします(scenario-model-trainingスキル)。トレーニング済みモデルも、同じ生成手順で使用できます。

バリエーション一括生成用のリファレンスを準備する

承認済みのコンポーネント(ボタン、パネル、ポップアップ用のくぼみ、アイコンファミリー)を一括で再スタイリングする際は、プロンプトよりもリファレンスが原因で失敗することがよくあります。モデルは、オブジェクトに合成されたものすべてをオブジェクトの一部として扱います。

  • オブジェクト本来の範囲で切り抜きます。 透明な余白は構図の一部として認識されるため、実行するたびに拡大率やオフセットがずれ、スプライト計測コードが異なる領域を取得します。アルファをトリミングしてから生成し、固定サイズのキャンバスに余白を戻します。モデルが対応するアスペクト比にソースの比率が含まれない場合も、実行ごとに比率がずれます。UI コンポーネントは、9 スライス対応のリスケール(角と文字をゆがめず、中央の帯を引き伸ばす)で調整してから、余白を戻します。
  • 生成前に焼き込み済みのエフェクトを取り除きます。 リファレンスにドロップシャドウ、外側のグロー、ベベルがあると、シルエットとして認識され、オブジェクトに厚みが加わったり、二重になったり、融合したりして再現されます。フラットなアートを渡し、エンジン側でエフェクトを再適用すれば、後から調整できます。影付きのソースに合わせた最終 PNG を作る場合は、アルファを使ってソースからエフェクトレイヤーを取り出し、各出力の下に合成します(透明なソースでは、影は半透明で、オブジェクトは不透明ですが、オブジェクトのアンチエイリアスがかかった縁も半透明です。影は、不透明マスクを 1〜2 px 膨張させた範囲の外側にある半透明ピクセルとして取り出し、縁はオブジェクト側に残します)。
  • どの部分が機能上の制約なのかを明示します。 9 スライスのパネルには伸縮可能な中央部分と固定された角が必要ですが、拡散モデルはどちらも理解しません。制約をプロンプトに明記し、守られているか確認します。
  • オブジェクトは 1 つだけにし、背景は無地にして、シーンは含めません。 1 つのリファレンスに複数のオブジェクトがあると、組み合わされてハイブリッドになります。
  • 透明な出力では、アルファの縁を必ず確認します。 影を取り除くと半透明の縁が残り、ネイティブアルファ対応モデルでは、オブジェクトの周囲に大きな半透明のグローが生成されることがあります。どちらも、色付きの UI 背景上ではハローに見えます。内部のアルファも確認します。ネイティブアルファ対応モデルは、あるアイテムの透過面(空のガラス)をアルファ 0 にする一方で、次のアイテムを不透明に塗ることがあり、エンジンのスロット内でセットの見た目が揃わなくなります。

セットの確認は目視ではなく測定で行います。バッチを採用する前に、各出力のアルファ境界ボックスをソースと比較します。

アイソメトリックタイルとマスク付き塗りつぶし

スタイルより先にグリッドを選びます。2:1 のひし形はゲームでよく使われる投影法ですが、投影された六角形は異なるフットプリントです。一連のタイルでは、投影法、配置アンカー、光の方向、影の側を統一します。タイルの地面のフットプリントは、スプライト全体のシルエットとは異なります。木や建物はその上に伸び、後ろのタイルに重なることがあります。背の高いオブジェクトを地面のマスクで切り取らないでください。バッチを拡大する前に、小さなマップを組み立てて、継ぎ目、道のつながり、オクルージョン、見た目の品質を確認します。アルファ境界がきれいなだけでは、合格とはいえません。

アイソメトリックテンプレートガイドを使って、中立的な地面またはスラブの参照を選び、地面、側面、オブジェクトの領域を分けます。JSON マニフェストには、それらの形状、ファイル名、ソースハッシュが記録されています。テンプレートビルダーは、メンテナーまたはローカルで形状が必要なエージェントが実行すると、PNG とマニフェストを作成します。生成するのは形状のみで、完成したゲームアートではありません。形状の参照は承認済みのスタイル参照と分けておきます。中立的な形状によって、パレットやファセット調の見た目が強制されないようにしてください。アップロード済みのアセットを解決し、新しいバージョンを公開するには、scenario スキルの共有アセットライフサイクルを使用します。一致するアセットにアクセスできない場合に限り、ローカル入力をアップロードしてください。

公開カタログには、アイソメトリック専用のメンバーがあります。ユーザーが求めるタイルを指定してrecommendを実行し、続けてmodel_schema_getを実行します。参照、マスク、シード、強度の各フィールドがあると決めつけたり、強度を低くすれば形状が保たれると考えたりせず、それらのフィールドを確認してください。規則はモデルによって異なります。題材を変える場合も、カメラとライティングに関する記述は固定します。対応している場合に限り、シードを再利用してください。一貫した参照を使ってもモデルが投影法や光の方向から外れる場合は、scenario-consistencyを使用し、その後、承認済みのタイルでscenario-model-trainingを検討してください。

地面の塗りつぶしや、明示的に形状の範囲内に収めるコンテンツには、マスク付きのimg2imgを使用します。専門特化型の候補にマスクフィールドがない場合は、capability: "img2img"とマスクの要件を指定して、もう一度recommendを実行します。model_schema_getでマスクの極性と、必須のベース画像フィールドを確認してください(scenario-imageにはモデル固有の規則が記載されています)。テンプレートの領域画像は内側が白です。アルファが必要な場合も含め、モデルの規則に合わせて調整してください。ベースキャンバスは、マスクと寸法および配置を一致させる必要があります。承認済みのスタイル参照でベースキャンバスを代用することはできません。キャンバスが不透明な場合は、編集時にその背景を保持してください。透明な出力を同時に求めると、保護対象のキャンバスという制約と矛盾します。透明化は後から行ってください。地形には地面の領域を、木や建物には背の高いオブジェクトの領域を使います。後者は編集用の領域であり、最終的なシルエットマスクではありません。

まずタイルを1つ生成します。編集領域の外で発生した変化をソースキャンバスと比較して測定し、結果を確認してください。範囲を意図的に限定した地面の塗りつぶしで数ピクセルはみ出した場合は、マスクに合わせて切り抜けます。大きくずれている場合は、再試行する前に、極性、ベースキャンバス、読み込まれた参照を診断してください。背の高いスプライトでは、ネイティブのアルファまたは背景除去を使ってオブジェクトのシルエットを保ち、地面のアンカーを別途確認します。決定論的な地面マスクでは、カメラの誤りや構図の悪さは修正できません。

「ローポリ」の見た目とローポリメッシュは、別の成果物です。見た目は画像モデルに指定する2Dスタイルの語句です。メッシュはscenario-3dです。画像から3Dへの候補(recommend、capability: "img23d")にポリゴン数の目標やトポロジーの選択肢があるかどうかは、model_schema_getで確認し、決して決めつけないでください。どちらも指定できない場合は、別のリメッシュユーティリティ(個別に課金される実行で、recommendとcapability: "3d23d"を使って見つけます)を使って、後からポリゴン数を減らします。いずれの場合も、入力するコンセプト画像にはフラットシェーディング、明瞭なシルエット、単色の背景を使い、形状が読み取りやすくなるようにします。

地形タイルセットと遷移

トップダウンの地形セットは、エンジンとのレイアウト契約です。すべての辺と角のパターンを用意し、隣接するタイルとつながる必要があります。ユーザーの言葉とタイルサイズを含めて「32x32 トップダウン タイルセット、草から土への遷移」のように recommend し、続いて model_schema_get を実行します。作成時のピクセルタイルセットのメンバーには style 列挙型があり、1 つの地形プロンプトから作るフルタイルセット、2 種類の地形の遷移モード(2 つ目の地形には extraPrompt または extraImage を指定)、単一タイル、バリエーション、オブジェクトの各モードを選べました。width と height はシート全体ではなく、1 枚のタイルのサイズです。また、これらの値とモードによって料金が変わるため、まず dry_run を実行してください。生成されるのはシンプルな Wang セットであり、47 枚のタイルからなる blob レイアウトではありません。タイルをエンジンのオートタイルルールに対応づけ、ダウンロードしたシートを使ってエンジンのタイルエディターで小さなテストマップを作成し、地形を増やす前にタイル同士のつながりを確認してください。

視差背景

視差背景は、エンジンが異なる速度でスクロールさせる奥行き平面を重ねたものです。不透明な空または遠景の平面の上に、背後の平面が透けて見える透明な隙間のある切り抜き平面を2、3枚重ねます。このスタックを作る方法は2つあります。生成プロンプトに「レイヤー」や「視差」と書くだけでは、どちらも作れません。レイヤーを重ねた1枚の画像が返されるだけで、スタイル学習済みモデルでは、複数のレイヤーが1枚の画像に描き込まれたものが返されます。

  • すでにある背景画を分割します。 レイヤー抽出は競合の激しい分野です(Scenario の独自ツールとサードパーティ製の分割ツールが競合しています)。そのため、capability: "img2img" を指定して、ユーザーの言葉で必要な内容(「この背景を視差用の奥行き平面に分割」)を recommend に渡し、選ばれたツールを model_schema_get で確認します。制作時に使う専用ツールでは、シーンの説明ではなく分割ルールを示す separationInstruction(「前から後ろへ4平面:前景の茂み、近景の木々、遠景の丘、空」)、価格に影響する maxLayers の上限、各切り抜きでできる穴を埋めるインペイントの選択肢(こちらも価格に影響します)を指定しました。切り抜きと再構築した背景(最背面の平面)が返され、各平面が1つのアセットになるため、asset_display で1つずつ確認します。ビューポートサイズの絵から切り出した平面の幅はビューポートと同じだけですが、スクロールする平面にはカメラの両側にはみ出す余白が必要です。キャンバス拡張ツールは不透明な画像を塗り直すため、切り抜きの透明な隙間を埋めてしまいます。したがって、分割する前に絵の幅を広げます(拡張が必要な内容を指定して capability: "img2img" で recommend を実行し、必要なスクロール範囲の最大値に合わせて絵のサイズを決めます。分割したすべての平面にこの幅が引き継がれます)。または、近景の平面には2つ目の方法を使います。
  • 実行ごとに1つの平面を生成します。 カメラ、地平線、光の向き、パレットを表す語句を固定し、平面の内容だけを変えます。空と遠景の平面は通常の不透明画像として生成し、近景の平面はそれぞれ切り抜きとして生成します(ネイティブアルファ対応のジェネレーターを使うか、単色のフィールドを生成して上記の除去処理を行います。拡散モデルには「透明」という語を使わないでください)。平面同士で内容が重複しないよう、「地面なし、空なし」のように含めてはいけないものを指定します。各平面のサイズは、ビューポートに水平スクロールのオフセット範囲全体を加えた大きさにします。オフセットが大きいほど余白を多く取る必要があり、ループさせる場合は継ぎ目のない端が必要です。

書き出す前にスタックを確認します。model_scenario-compose-image(固定されたファーストパーティの ID で、Scenario の唯一の決定論的な画像コンポジターです。検出しても同じものを再特定するだけです)に、奥行き順で各平面を layers として渡します。各平面には source(アセット ID)と zIndex を指定し、canvasMode: "custom"、数値の canvasWidth と canvasHeight、および backgroundColor: "transparent" を設定します。カメラのビューポート寸法を使い、各平面の元のサイズを維持し、共通のキャンバスを配置して、余白がビューポートの両端の外側にくるようにします。余白が各平面のオフセット範囲をカバーしていれば、幅が同じ分割平面を使用できます。2つ目の合成画像では、近景の平面を利用可能な余白の範囲内で x 方向に数パーセントずらします(パーセント文字列)。これにより、エンジンが生成する視差オフセットをプレビューできます。継ぎ目、二重になった地平線、切り抜きの端に見えるハローがないかを、エンジンで作業する前に確認できます。サムネイルを見るだけでなく、実際のアルファ値も確認してください。切り抜きの継ぎ目、欠けた風景、再構築した背景に残った前景オブジェクトがあるスタックは却下します。平面をずらすと、こうした重複が見えてしまうためです。ユーザーの予算内で分離設定またはインペイント設定を修正するか、実行ごとに1つの平面を生成する方法を使います。そうでなければ、エンジンですぐ使えるセットではなく、プレビュー失敗として報告します。採用した各平面を format="png" で asset_download します(すべて同じ形式にするため、遠景の平面も含みます)。奥行き順のタグを付け、スクロール速度とループ設定はエンジンに任せます。

よくある間違い

  • 拡散モデルに「透明な背景」とプロンプトで指定すること:出力は不透明です。背景除去ツールで後から背景を切り抜くか、ネイティブのアルファチャンネルに対応したモデルを選んでください。
  • スプライトを JPG で書き出すこと:JPG にはアルファチャンネルがありません。format="png" を維持してください。
  • グリッドに合わないピクセルやノイズの多いパレットのまま、AI 生成のピクセルアートを出荷すること:ピクセルクリーンアップツール(recommend で見つかります)で後処理し、グリッドへのスナップと厳密なパレット設定を行ってください。
  • model_schema_get を省略すること:特殊用途モデル(ピクセルアート系)は txt2img 専用で、独自のフィールドがあります。汎用パラメーターは拒否されます。
  • 視差背景の「レイヤー」を一度の生成で求めること:返されるのは画像 1 枚です。奥行きの面は、完成した絵を分割するか、面ごとに 1 回ずつ生成します(「視差背景」を参照)。
  • タイルセットを手作業でつなぎ合わせること:タイルセットのメンバーを使えば、エッジやコーナーのケースも生成できます。テクスチャ固有のアップスケーラーを使えば、タイルの連続性を保てます。
  • 文字入りアセットを 1 回だけサンプリングすること:同じレシピでも、ある単語は描画できても、別の単語では失敗することがあります(参照のタイポグラフィではなく、暗いエンボス文字になるなど)。1 回の実行で複数のサンプルを生成し(スキーマのサンプル数パラメーターを使用)、パレットがずれる場合は、プロンプトで正確な 16 進カラーコードを指定してください。

コメント