mcpField
B
blockbench-vanilla-textures

blockbench-vanilla-textures

github.com/jasonjgardnerクリエイティブ・メディア26165 回インストール5 週間前に更新
リポジトリ

blockbench-vanilla-textures について

blockbench-vanilla-texturesは、MojangのBedrock用テクスチャを検索してBlockbenchの制作フローに取り込むスキルです。テクスチャの取得、色付け、タイル化、UV割り当て、PBR処理を扱い、Javaや汎用モデルにも利用できます。

主な機能

  1. 01バニラテクスチャの検索と取得
  2. 02ブロック面ごとのテクスチャ解決
  3. 03色付け、タイル化、アニメーション処理
  4. 04テクスチャのインポートとUV設定
  5. 05PBRテクスチャセットの取得

活用シーン

  1. 01BlockbenchモデルにMinecraftの標準テクスチャを使用
  2. 02大きなモデル面向けにテクスチャを事前タイル化
  3. 03対象エディション用の名前とパスを準備
  4. 04モデル面のテクスチャ割り当てを確認

インストール

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

$npx skills add https://github.com/jasonjgardner/blockbench-mcp-project --skill blockbench-vanilla-textures

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

同梱ファイル

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

references/
names-tints-and-animation.md
scripts/
tint_texture.py
vanilla_texture.mjs

詳細

Blockbench のバニラテクスチャ

模倣したテクスチャを描いたり生成したりするのではなく、Mojang の純正テクスチャファイルを使います。入手元:Mojang/bedrock-samples(resource_pack/textures/...)。jsDelivr から配信されています:

https://cdn.jsdelivr.net/gh/Mojang/bedrock-samples@<ref>/resource_pack/textures/blocks/brick.png

<ref> は main または v1.26.50.4 などのリリースタグです。結果を再現可能にする必要がある場合は、タグを指定してください。名前は Bedrock のものですが、ほとんどのブロックでピクセルアートは Java Edition と一致するため、必要に応じて名前を変更すれば、Java や汎用モデルでもファイルを使えます。

プロジェクトを変更する前に blockbench-use を読み込み、UV の詳細については blockbench-texturing を読み込んでください。

ライセンス: ファイルの著作権は Mojang AB に帰属し、Minecraft EULA の対象です。Minecraft コンテンツ、アドオン、リソースパック、個人制作物には問題なく使用できます。ユーザーが Minecraft 以外でモデルを販売する予定がある場合や、テクスチャを Minecraft 以外のアセットパックに同梱する予定がある場合は、その旨を一度伝え、判断はユーザーに委ねてください。マニフェストに記録された帰属表示は削除しないでください。

1. リクエストをバニラブロックに対応付ける

題材をブロック ID に置き換えます。レンガの壁なら brick_block、丸太小屋なら oak_log と oak_planks、城なら stone_bricks と cobblestone です。名前が本当に曖昧で(「石」や「木」など)、選択によって見た目が変わる場合に限って確認してください。それ以外の場合は、明らかなブロックを選んで、そのブロック名を伝えてください。ブロック ID によって、丸太の上面、草ブロックの上面、作業台の正面など、面ごとのテクスチャが解決されます。Java の ID はほとんどそのまま使えます。例外(bricks → brick_block、grass_block → grass、…)については、名前、色合い、アニメーションを参照してください。

2. 取得する

同梱のリゾルバーを実行します(Node 18 以降または Bun が必要です。依存関係はありません)。スクリプトのパスは、このスキルフォルダーからの相対パスです。

node scripts/vanilla_texture.mjs search brick                                   # find IDs/keys
node scripts/vanilla_texture.mjs fetch brick_block oak_log grass --out <workspace>/textures/vanilla
node scripts/vanilla_texture.mjs fetch grass oak_leaves --carried --out <dir>   # pre-tinted inventory art
node scripts/vanilla_texture.mjs fetch brick_block --pbr --out <dir>            # + texture_set.json, MERS, normal
node scripts/vanilla_texture.mjs fetch entity/pig/pig --out <dir>               # any path under textures/
node scripts/vanilla_texture.mjs search zombie --tree --out <dir>               # entities/UI: one GitHub API call, cached

<out>/vanilla_manifest.json が出力・保存されます。次のフィールドを使ってください:

  • requests[].faces:Blockbench の面 → アトラスキー。
  • requests[].atlas_keys[key].path:各キーに対応するファイル。
  • textures[]:ローカルの file(絶対パス)、width/height、format(png または tga)、frames、ticks_per_frame、tint、variants、texture_set レイヤー。

ファイル名を推測せず、マニフェストを読んでください。

既知のファイルを 1 つだけ取得する場合は、スクリプトは不要です:

curl -fsSLo brick.png https://cdn.jsdelivr.net/gh/Mojang/bedrock-samples@main/resource_pack/textures/blocks/brick.png
iwr https://cdn.jsdelivr.net/gh/Mojang/bedrock-samples@main/resource_pack/textures/blocks/brick.png -OutFile brick.png

葉、grass_side、サボテン、シダなど、色付きテクスチャの中には .tga 形式でしか存在しないものがあります。.png が 404 になった場合は .tga を試してください。スクリプトはこれを自動で行います。jsDelivr のパッケージ一覧 API は、このリポジトリのサイズが大きすぎるため利用できません。そのため、blocks.json、terrain_texture.json、item_texture.json、または GitHub のツリー(--tree)を使って検索します。

保存先: モデルで使い続けるファイルは、一時フォルダーではなく、たとえば textures/vanilla/ のようにユーザーのアセット作業領域に保存してください。Blockbench はインポートしたファイルのパスを記憶し、プロジェクトの保存時にテクスチャをそのパスへ書き戻すことがあります。インポート後にダウンロードしたファイルを直接編集しないでください。色合いやタイルなどの編集内容は、新しいファイル名で保存してください。

3. 準備:色付け、タイル化、アニメーション

インポートする前に、各マニフェスト項目を確認してください。

  • tint が設定されている場合: テクスチャはグレースケールで、Minecraft がバイオームに応じて色付けします(草の上面、葉、ツタ、水)。色付け済みのバージョンを取得するには --carried を指定するか、python scripts/tint_texture.py <in> <out> --color "#91BD59" を実行してください。バイオームに合わせるには、--colormap <colormap/grass.png> --temperature T --downfall D を使用します。Pillow が必要です。
  • grass_side.tga のアルファ値は透明度ではなく、色付けマスクです。 土のピクセルのアルファ値は 0 です。代わりに blocks/grass_side_carried をインポートするか、tint_texture.py ... --overlay を実行してください。
  • 大きな面: バニラのスケールはブロックあたり 16 px で、これは Blockbench の 1 単位あたり 1 px に相当します。48 単位の面に 16×16 のタイルを 1 枚引き伸ばさないでください。レンガが巨大になってしまいます。ブロックごとに 16 単位の要素を 1 つ使うか、テクスチャをあらかじめタイル化してください。tint_texture.py brick.png brick_3x2.png --tile 3x2 を実行すると、48×32 単位の面用に 48×32 px の画像が作成されます。事前のタイル化は、汎用、Bedrock エンティティ、glTF の各ターゲットに適しています。Java のブロックおよびアイテムモデルでは 16×16 の正方形テクスチャが必要です(高さのある画像はフリップブックとして扱われます)。そのため、該当する場合はブロックごとに 1 つの要素を使い、元のファイルをそのまま使用してください。
  • frames が 1 より大きい場合: 水、溶岩、シーランタンのような縦型フリップブックです。UV を 1 フレームに割り当て、再生とエクスポートのメタデータについてはフリップブックテクスチャに従ってください。

色付けの色、バイオームのパラメーター、フリップブックの全一覧は、名前、色付け、アニメーションを参照してください。

4. インポートと割り当て

  1. 各ファイルをインポートするには、 create_texture: name="brick", data="<absolute file path>" を指定します。ファイルパスを使用するには Blockbench デスクトップ版が必要です。PNG と TGA を読み込めます。Blockbench ウェブ版を使う場合、またはファイルにアクセスできない場合は、代わりに data:image/png;base64,... URL を渡してください。データ URL はブラウザーでデコードできる必要があるため、たとえば Pillow を使って先に TGA を PNG に変換してください。すでに読み込まれているパスのインポートは拒否されます。そのテクスチャを再利用してください。per_texture_uv_size を使用する形式では、UV 座標がピクセル単位になるように、ピクセルサイズと同じ値を uv_width/uv_height に渡してください。
  2. 要素全体に 1 つのテクスチャを使う場合: apply_texture: id=<element>, texture=<name>, applyTo="all" を使用します。
  3. 面ごとに異なるテクスチャを使う場合(原木、草、かまど、作業台など):requests[].faces に従って、faces: { up: { uv: [0,0,16,16], texture: "log_oak_top" }, north: { …, texture: "log_oak" }, … } を指定した set_cube_uv を使用します。メッシュには set_mesh_uv を使用します。blocks.json では、かまど、カボチャなどの南面が正面として指定されています。正面が見る側を向くように、要素を回転させるか面を入れ替えてください。
  4. ボックス UV 形式(Bedrock エンティティ、Java エンティティ)では、立方体ごとに 1 枚のテクスチャをボックス状に配置するため、個別の 16×16 ブロックタイルをそのまま使用することはできません。形式が対応していれば、要素を面ごとの UV に切り替えてください。または、タイルをアトラスにまとめ、各面を対応する矩形に割り当ててください。
  5. 透明テクスチャ(ガラス、葉、ドア)には、ターゲットに応じたカットアウトまたはブレンド設定が必要です。テクスチャリングスキルを参照してください。

Blockbench 内での取得。 jsDelivr は Access-Control-Allow-Origin: * を送信するため、エージェントにシェルがない場合や、シェルから Blockbench のファイルシステムにアクセスできない場合でも、Blockbench 自身で PNG をダウンロードできます。risky_eval は式の評価が完了するまで待機するため、コードをデータ URL を返す非同期 IIFE でラップし、その URL を create_texture に渡してください。risky_eval については、リポジトリの認可ルールに従ってください。

(async () => {
  const response = await fetch("https://cdn.jsdelivr.net/gh/Mojang/bedrock-samples@main/resource_pack/textures/blocks/brick.png");
  if (!response.ok) throw new Error(`HTTP ${response.status}`);
  const blob = await response.blob();
  return await new Promise(resolve => { const reader = new FileReader(); reader.onload = () => resolve(reader.result); reader.readAsDataURL(blob); });
})()

バニラのブロックテクスチャは数百バイト程度なので、返されるデータ URL は小さいものです。大きなエンティティシートや TGA ファイルには、ファイルパスを使う方法を優先してください。

5. PBR(任意)

バニラの各ブロックには、<name>_mers.tga(メタリック、発光、粗さ、サブサーフェス)を含む<name>.texture_set.jsonが付属しており、一部には_normal.tgaまたは_heightmap.tgaも付属しています。--pbrを指定して取得し、ファイルを同じフォルダーにまとめてから、デスクトップでimport_texture_set: path="<out>/blocks/brick.texture_set.json"を呼び出します。割り当てとエクスポートについては、PBR materialsを参照してください。色調が適用されたカラーマップには、引き続き色調の適用が必要です。カラー画像に色調を適用し、マテリアルのカラー チャンネルがその画像を参照するように変更してください。

6. 対象エディション向けに用意する

対象作業内容
BedrockBedrock の名前とパスを維持します。たとえば、textures/blocks/brickです。カスタムブロックでは、バニラのテクスチャを同梱する代わりに、そのテレインキーを参照できます。マテリアルインスタンスを参照してください
Javaassets/minecraft/textures/block/の下で、Java のファイル名に変更します(brick.png → bricks.png、planks_oak → oak_planks)。または、モデル JSON でminecraft:block/bricksを参照して、ゲーム独自のテクスチャを使用します。フリップブックには.png.mcmetaを追加します
汎用/glTFピクセルサイズを維持し、ニアレストネイバー法でフィルタリングします。実行時に適用されないため、色調とタイリングを画像に焼き込んでください

7. 検証する

  • list_texturesを実行し、各テクスチャのサイズと UV サイズを確認します。
  • get_cube_uvまたはget_mesh_infoを実行し、各面に意図したテクスチャが設定され、texture_status: "resolved"と表示されることを確認します。
  • スクリーンショットを撮影します。レンガや板材のスケールを16ユニットの基準と比較し、色調が適用されたテクスチャが灰色になっていないこと、意図した箇所だけが透過していること、原木の上面が端面に配置されていることを確認します。

作業例:レンガの壁

「レンガの壁をモデリングする」(汎用モデル。ブロック3×2個分の壁、厚さ4ユニット):

  1. node scripts/vanilla_texture.mjs fetch brick_block --out ./textures/vanillaを実行します。マニフェストには、色調なしのblocks/brick.png、16×16と表示されます。
  2. python scripts/tint_texture.py ./textures/vanilla/blocks/brick.png ./textures/vanilla/brick_wall_3x2.png --tile 3x2を実行して、48×32の画像を生成します。
  3. インポートします:create_texture name="brick_wall_3x2" data="<abs>/textures/vanilla/brick_wall_3x2.png"。形式がテクスチャごとの UV サイズを使用する場合は、uv_width=48, uv_height=32を追加します。
  4. キューブを配置します:from [0,0,0]、to [48,32,4]。
  5. set_cube_uvを使い、各面を1ユニットあたり1 pxでマッピングします。すべてbrick_wall_3x2を使用します:
    • northとsouth:[0,0,48,32]。
    • upとdown:[0,0,48,4]。
    • eastとwest:[0,0,4,32]。
  6. get_cube_uvを実行し、すべての面が解決されることを確認します。スクリーンショットを撮影し、レンガ一段分がバニラの16ユニットブロックと同じ大きさであることを確認します。

Java のブロックモデルでは、同じ壁を16×16×4の要素6個で作成します。加工していないbrickテクスチャをそれぞれにマッピングします。大きな面には[0,0,16,16]、端の面には[0,0,16,4]/[0,0,4,16]を指定します。

コメント