mcpField
B
blockbench-texturing

blockbench-texturing

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

blockbench-texturing について

Blockbench MCP ツールを使う 3D モデル制作者向けに、UV の計画やテクスチャの作成・描画を案内するスキルです。形式ごとの寸法、マッピング、納品時の確認事項も扱います。

主な機能

  1. 01UV とテクセル密度の計画
  2. 02テクスチャの作成と管理
  3. 03ブラシ、図形、グラデーションで描画
  4. 04レイヤーと選択範囲の管理
  5. 05モデル UV の確認と編集

活用シーン

  1. 01モデル用の新しいテクスチャアトラスを作成
  2. 02モデルのテクスチャを描画してレイヤーを調整
  3. 03UV の伸びや継ぎ目を確認
  4. 04繰り返し形状をテクスチャ付きパネルに置換

MCP 対応

Blockbench MCP ツールによるテクスチャの作成、確認、描画と、リソースを使ったテクスチャ情報の読み取りを案内します。

インストール

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

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

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

同梱ファイルreferences/uv-scale-and-distortion.md

詳細

Blockbench テクスチャリング

Blockbench MCP ツールを使用して、3D モデルのテクスチャを作成し、ペイントします。

モデルに Minecraft 独自のテクスチャ(「vanilla」または「default」テクスチャ、あるいはレンガやオークの板材などの名前付きブロック)を使用する場合は、vanilla textures を使用してください。ペイントや生成を行う前に、Mojang のオリジナルを CDN からダウンロードします。

アニメーションテクスチャシートには、flipbook textures を使用してください。GPT Image 2.5 texture スキルを通じてアートワークを生成し、測定したスプライトセルを縦長のストリップに変換して、1 フレーム分の UV 寸法と再生メタデータを設定します。

テクスチャの細部を加える前に UV を計画する

ユーザーの見た目/パフォーマンスの優先事項を引き継いでください。パフォーマンス重視またはバランス重視のデザインでは、ジオメトリを追加する前に、繰り返し使う補強材/詰め物、シートのリブ、継ぎ目、取り付け部の細部に共有 UV タイルを割り当てます。小さな留め具は既存の支持面にペイントし、ターゲットが対応している場合は、位置を合わせたPBR マップを追加します。UV を再利用しても、すでに存在するジオメトリが減るわけではありません。

テクスチャのサイズを決める前に、テクセル密度を調整してください。タイル張りの面と固有のアトラスから選択します。ローポリの glTF では、面の UV をパレットアトラスに集約してください。ターゲットが正方形以外、または 2 の累乗ではない画像を受け入れるか確認してください。Minecraft は対応していませんが、Hytale と Babylon.js は対応しています。Minecraft の面 UV はラップしないため、タイルを繰り返すには面を分割します。リアルタイムアセットの計画のセクション 7~9 を参照してください。

ペイントする前に、ターゲットのボックス/面ごとの UV モードと、実効 UV 寸法を確認してください。UV 単位は画像のピクセル単位と異なる場合があります。per_texture_uv_size を使用する形式では、各面のテクスチャ寸法が使われます。意図的なミラー UV/重複 UV の重なりを維持し、非対称の細部には固有のスペースを確保してください。チェッカーまたは方向を示すマークをプレビューして、伸び、向き、継ぎ目を確認します。ピクセル密度は、ユーザーのスタイルと視距離に合わせてください。Minecraft のピクセルアートのルールがすべての形式に当てはまるわけではありません。形式と納品に関するガイダンスを参照してください。

Blockbench のネイティブなテクスチャテンプレートのワークフローでは UV を配置できますが、create_texture は画像の作成/インポートを行うだけで、そのレイアウトは生成しません。auto_uv_mesh は面をマッピングしますが、アイランドのパッキングは行いません。パッキングされたレイアウトには、実行中のバンドルで実際に提供されているツール、またはネイティブのテンプレート/UV ワークフローを使用してください。既存のペイント済みアトラスを並べ替える前に、必ず保持してください。

UV の比率とマテリアルのスケールを維持する

細部のあるマテリアルを適用する前、異なる面サイズ間で色見本を共有する前、または伸びたテクスチャを修正する前に、UV スケールと歪みに関するガイダンスを読んでください。実効テクスチャのフレーム寸法と論理 UV 寸法を使い、面の両方向について、モデル単位あたりにサンプリングされる画像ピクセル数を計算します。共有マテリアルでは通常、すべての面で同じ全体の矩形を使うのではなく、比率に合った UV の占有範囲が必要です。

可逆的なチェッカーを使って、局所的な伸びとパーツ間のスケール差の両方を確認し、その後、実際の木目/パターンを調べてください。比率に合った部分領域、適切なトリムストリップ、またはターゲットでの対応を確認済みのタイル設定を優先します。UV の矩形が範囲内にあることや、画像が大きいことだけでは、正しいスケールの証明にはなりません。均一なマテリアルや意図した効果には、意図的な伸びを維持してください。細部のある PBR チャンネルを使用する場合も、プレーンなアルベドにはスケールの確認が必要です。

繰り返しのジオメトリを UV タイルに置き換える

繰り返しの手すりの隙間や X 字の補強材には、選択した視距離で平面的なディテールが許容される場合、フォーマットがサポートする少数のパネルを使用します。パターンをそれらのパネルにマッピングし、穴は透明に保ちます。不透明な領域はソリッドな面にのみ使用し、意図的な穴を塗りつぶさずにアトラスのアイランドにパディングを加えます。置き換えるジオメトリを削除する前に、真横からの表示、両面、フィルタリング/ミップマップ、遠距離からの表示を確認し、バーの消失、ハロー、テクスチャのにじみがないか調べます。透明なレイヤーのオーバードローをテストしてください。バーごとに 1 枚のくり抜きパネルを使うと、削減の効果がなくなります。

対象のアルファテスト/カリング動作を明示的に選択します。両面レンダリングと半透明ブレンディングにはコストがかかります。フォーマットがサポートしていれば複数のテクスチャを使用できますが、画像をインポートしただけでは、実行時のマテリアルの設定は完了しません。Bedrock のカスタムブロックでは、マテリアルインスタンスとテクスチャの配信に従ってください。エンティティのバインディングには別のワークフローを使用します。

ネイティブのテクスチャテンプレートを生成する

新しいアトラスでは、サポートされている編集モードに入り、意図したアウトライナーの選択状態を設定してから、デフォルトを確定せずにネイティブアクションを開きます。

trigger_action: action="create_texture", confirmDialog=false

fill_dialog を使う前に、返されたアプリのスクリーンショット/ダイアログを確認してください。現在のネイティブダイアログには通常、name、type="template"、resolution(ピクセル密度)、rearrange_uv、double_use(一致する面を再利用)、power、padding があります。そのホストのダイアログに存在するフィールドだけを送信してください。デフォルトを確認した後の例:

fill_dialog: values="{\"name\":\"atlas\",\"type\":\"template\",\"rearrange_uv\":true}", confirm=true

対象に合わせて密度、重なりの再利用、パディングを選択します。テンプレートの resolution は、アトラスの最終的な幅を指定するものではありません。アウトライナーの選択が空の場合、モデル全体が選択されることがあります。また、単一テクスチャ形式では、選択範囲が一部でも、条件を満たす表示要素がすべて処理される場合があります。特にペイント済みのコンテンツでは、確定する前に操作の対象範囲を確認してください。生成は非同期で続く場合があります。完了後、ペイントする前に list_textures、実際の UV、get_texture で確認してください。fill_dialog: confirm=false はダイアログをキャンセルします。フィールドを入力してダイアログを開いたままにする方法ではありません。ネイティブのテクスチャジェネレーターと公式テンプレートワークフローを参照してください。

ペイント座標は画像のピクセル単位です。テクスチャが複数ある場合は、各ペイントツールに明示的な texture_id を渡してください。ネイティブのペイント操作にはレイヤーと選択範囲が影響します。ペイントする前に、選択中のレイヤーと既存の選択範囲を確認してください。layer_name は新規または名前変更後のレイヤー名を指定します。ほとんどのレイヤー操作では任意の名前でレイヤーを検索するのではなく、現在選択中のレイヤーが操作対象になります。

利用可能なツール

テクスチャ管理
ツール目的
create_textureサイズと塗りつぶし色を指定して新しいテクスチャを作成
list_texturesプロジェクト内のすべてのテクスチャを一覧表示
get_textureテクスチャ画像データを取得
activate_texture既存のテクスチャを選択
apply_textureテクスチャを要素に適用
ペイントツール
ツール目的
paint_with_brushカスタマイズ可能なブラシでペイント
paint_fill_tool領域をバケツで塗りつぶす
draw_shape_tool長方形/楕円を描画
gradient_toolグラデーションを適用
eraser_toolブラシ設定を使って消去
color_picker_toolテクスチャから色を取得
copy_brush_toolテクスチャ領域を複製/コピー
ブラシ管理
ツール目的
create_brush_presetブラシ設定を保存
load_brush_preset保存したブラシを読み込み
paint_settingsペイントモードを設定
レイヤーと選択範囲
ツール目的
texture_layer_managementテクスチャレイヤーを管理
texture_selection選択範囲を作成/変更
UV ツール
ツール目的
set_mesh_uvUV 座標を設定します
auto_uv_meshUV を自動生成します
rotate_mesh_uvUV マッピングを回転します
get_mesh_infoinclude_uv=true を指定して、メッシュの面/頂点キーと既存の UV を読み取ります
get_cube_uvボックス/面ごとの UV、有効な面テクスチャ、UV 寸法、ビットマップ寸法を確認します
set_cube_uvボックスのオフセット/ミラーリング、または面ごとの矩形、回転、テクスチャ参照を編集します

リソース

リソースURI目的
テクスチャtextures://{id}テクスチャ情報を一覧表示/読み取ります

テクスチャの作成

新しい空のテクスチャ
create_texture: name="skin", width=64, height=64, fill_color="#808080", layer_name="base"
透明度のあるテクスチャ
create_texture: name="overlay", width=32, height=32, fill_color=[0, 0, 0, 0], layer_name="base"
UV 寸法とビットマップ解像度を分ける

per_texture_uv_size=true の形式では、create_texture で uv_width と uv_height を正の数として一緒に指定できます。どちらも省略すると、ネイティブのデフォルトが維持されます。このペアは画像の data をインポートするときにも使用でき、ビットマップのサイズを変更せず、画像のデコード後に論理 UV 寸法を設定します。

# For an intended Generic Model with per_texture_uv_size=true
create_texture: name="paint_detail", width=128, height=64,
  uv_width=32, uv_height=16, fill_color="#808080", layer_name="base"
list_textures
# Inspect uv_size=[32,16], bitmap_size=[128,64], frame_size=[128,64]

この静的画像は、各軸の UV 単位あたり 4 ピクセルです。同じプロジェクト内で異なる UV サイズのテクスチャを複数使用できるため、マッピングには面の有効なテクスチャ寸法を使用してください。現在のバンドルでは、list_textures によって uv_size、bitmap_size、frame_size を確認できます。プロジェクト全体で UV 寸法が決まる形式では、テクスチャごとの上書きは拒否されます。代わりに、ネイティブのプロジェクト UV サイズ設定を確認して編集してください。論理寸法を変更すると既存のマッピングが変わることがあるため、意図したピクセル密度を維持し、結果を確認してください。

エレメントに適用

fill_color を指定する場合、create_texture では layer_name が必須です。テクスチャの検索では名前または UUID を使用できます。名前が曖昧な場合は、list_textures の UUID を使用してください。

apply_texture: id="body", texture="skin", applyTo="all"

ペイント

基本的なブラシストローク
paint_with_brush: texture_id="skin", coordinates=[
  {x: 10, y: 10},
  {x: 15, y: 12},
  {x: 20, y: 10}
], brush_settings={color: "#FF0000", size: 3, shape: "circle"}
ソフトブラシ
paint_with_brush: texture_id="skin", coordinates=[{x: 32, y: 32}],
  brush_settings={color: "#FFFFFF", size: 10, softness: 50, opacity: 128}
領域を塗りつぶす
paint_fill_tool: texture_id="skin", x=16, y=16, color="#3366FF",
  fill_mode="color_connected", tolerance=0

ネイティブの塗りつぶし API がサポートするのは、色の完全一致のみです。0 以外の tolerance は拒否されます。

面/エレメントの塗りつぶしモードは、ネイティブのジオメトリ/UV コンテキストに依存します。テクスチャのピクセル座標だけでは、モデルの面を特定できません。既知の UV 矩形には明示的な矩形ペイントを使用するか、面を塗りつぶす前にネイティブの対象コンテキストを設定して確認してください。結果を確認してください。成功メッセージだけでは、意図した面だけが変更されたとは限りません。

図形とグラデーション

矩形を描画
draw_shape_tool: texture_id="skin", shape="rectangle",
  start={x: 0, y: 0}, end={x: 16, y: 16}, color="#FFCC00"
中抜きの楕円を描画
draw_shape_tool: texture_id="skin", shape="ellipse_h",
  start={x: 8, y: 8}, end={x: 24, y: 24}, color="#000000", line_width=2
グラデーションを適用
gradient_tool: texture_id="skin",
  start={x: 0, y: 0}, end={x: 0, y: 32},
  start_color="#87CEEB", end_color="#1E90FF"

消去

eraser_tool: texture_id="skin", coordinates=[{x: 10, y: 10}, {x: 12, y: 12}],
  brush_size=5, shape="circle", opacity=255

色の取得

color_picker_tool: texture_id="skin", x=16, y=16
# Returns picked color, sets as active

クローン/コピーブラシ

copy_brush_tool: texture_id="skin",
  source={x: 0, y: 0}, target={x: 32, y: 0},
  brush_size=8, mode="copy"

ブラシプリセット

プリセットを作成
create_brush_preset: name="soft_round", size=8, shape="circle",
  softness=30, opacity=200, color="#FFFFFF"
プリセットを読み込む
load_brush_preset: preset_name="soft_round"

テクスチャレイヤー

レイヤーを作成
texture_layer_management: texture_id="skin", action="create_layer",
  layer_name="details"
レイヤーの不透明度を設定
texture_layer_management: texture_id="skin", action="set_opacity",
  opacity=75  # Operates on the selected layer; layer opacity is 0–100 percent
下のレイヤーと統合
texture_layer_management: texture_id="skin", action="merge_down"  # Selected layer

選択範囲

矩形選択
texture_selection: texture_id="skin", action="select_rectangle",
  coordinates={x1: 0, y1: 0, x2: 16, y2: 16}
選択範囲に追加
texture_selection: texture_id="skin", action="select_ellipse",
  coordinates={x1: 8, y1: 8, x2: 24, y2: 24}, mode="add"
選択範囲を反転
texture_selection: texture_id="skin", action="invert_selection"
境界をぼかす
texture_selection: texture_id="skin", action="feather_selection", radius=2

UV マッピング

Cube UV

get_capabilities: include_tools=trueでget_cube_uvとset_cube_uvが公開されていることを確認してください。これらのツールを利用するには、以前に読み込んだバンドルを再読み込みする必要があります。グループと同じ名前のキューブでは、idにキューブの実際のUUIDを指定してください。

get_cube_uv: id="body_geo"
# → {uuid, name, box_uv, autouv, uv_offset, mirror_uv, faces}
# Each face: uv, rotation, texture, texture_status, effective_texture, uv_size, bitmap_size, frame_size

# Move the atlas origin of an existing box-UV cube
set_cube_uv: id="body_geo", uv_offset=[16, 8], mirror_uv=false

# In an existing per-face-UV cube, edit one rectangle (UV units)
set_cube_uv: id="panel_geo", faces={north: {uv: [0, 0, 8, 4]}}

調査したキューブのモードに合った例を選んでください。ボックスオフセットと各面の矩形では、ワークフローが異なります。モードを変更するには、明示的なbox_uv引数と、それを許可するフォーマットが必要です。ネイティブ変換では回転がリセットされ、無効な面が有効になる場合があります。このツールは変換の成功を検証し、変換が拒否された場合はロールバックします。ゼロ以外の面の回転には、フォーマットでuv_rotationがサポートされている必要があります。明示的な矩形を指定すると、通常は自動リマッピングが無効になります。Hytaleではautouv=1が維持され、矩形の範囲が各面の絶対的な基準寸法と一致している必要があります。UV回転が90度または270度の場合は、幅と高さを入れ替えてください。一致するオフセットとミラーは許可されますが、範囲が変更されている場合はUndoの前に拒否されます。Hytaleの四角形ではボックスUVを使用できません。HytaleのネイティブUVの動作を参照してください。

面ごとのtextureには、既存のテクスチャ名またはUUID、割り当てなしを示すfalse、または面を無効にするnullを指定できます。単一テクスチャ形式とグループごとのテクスチャ形式では、面ごとの割り当てが制限されます。それぞれの既存のグローバルまたはグループのワークフローを使用してください。Hytaleではsingle_texture=falseの場合も、アタッチメントコレクションまたはプロジェクトのデフォルトを通じてテクスチャが解決されます。この場合、ツールはnull以外の面ごとの割り当てを拒否します。編集後は、effective_texture、uv_size、bitmap_size、frame_sizeも含めて再調査してください。フレーム内のUVをピクセルに変換するには、各軸でframe_size / uv_sizeを使用します。bitmap_sizeにはアニメーションアトラス全体が含まれます。幅64ピクセル、UV単位で16のフレームでは、UV座標4はフレーム内のX=16です。

メッシュの自動UV
select_mesh_elements: mesh_id="ball", mode="face"  # Select the intended faces
auto_uv_mesh: mesh_id="ball", mode="project"  # project, unwrap, cylinder, sphere

projectはアクティブなプレビューカメラを使用します。unwrapは面ごとに独立した平面マッピングを作成し、UVアイランドをパッキングしません。cylinderとsphereはメッシュローカルの原点と、マッピングする各面の実効UV寸法を使用するため、先にテクスチャの割り当てを調べてください。メッシュの一部だけを対象にするには、返された面キーを明示的にfacesに渡してください。

カスタムUVを設定

メッシュの面キーと頂点キーは実行時に生成されます。キューブの方向名はメッシュの面IDではありません。モデリングスキルに示すように、place_meshから返されたmeshes[]エントリを保持するか、既存のメッシュをinclude_uv=trueを指定したget_mesh_infoで調査してください。

このクライアントオーケストレーションの例では、モデリングスキルで作成した四角形panelを引き続き使用します。callは指定されたMCPツールを呼び出し、isErrorを確認してJSON結果をデコードします。ツール引数を送信する前に、変数式を実際に返された値にバインドする必要があります。

const uvCorners = [[0, 0], [16, 0], [16, 16], [0, 16]];
await call("set_mesh_uv", {
  mesh_id: panel.uuid,
  face_key: panel.face_keys[0],
  uv_mapping: Object.fromEntries(panel.vertex_keys.map((key, index) => [key, uvCorners[index]])),
});

UV値には、正規化された0~1の座標ではなく、Blockbenchのテクスチャ単位を使用します。既存の面では、faces.items[].keyと、調査で得たその面のverticesの周回順序を使用してください。UVマップのキーには、これらと完全に一致する頂点IDを指定します。各ページは、それぞれ独立したnext_offsetを使い、値がnullになるまで読み取ってください。ページ間でジオメトリを編集しないでください。モデリングスキルのreadMeshPagesヘルパーを参照してください。既存のUVを読み取る際は、include_uv: trueを追加します。トポロジを変更した後は再調査してください。

UVを回転
await call("rotate_mesh_uv", {mesh_id: panel.uuid, angle: "90", faces: [panel.face_keys[0]]});

ペイント設定

paint_settings: pixel_perfect=true, mirror_painting={enabled: true, axis: ["x"]},
  lock_alpha=true

一般的なワークフロー

既存のスキンレイアウトにペイント

対象となるスキンの実際のUVテンプレートを使用してください。以下の座標は、そのテンプレート上で確認済みの領域の例にすぎません。空白の画像とこれらのストロークだけでは、有効なプレイヤースキンは自動的に作成されません。

# Create texture
create_texture: name="player_skin", width=64, height=64, fill_color="#C4A484", layer_name="base"

# Base colors
draw_shape_tool: texture_id="player_skin", shape="rectangle",
  start={x: 20, y: 20}, end={x: 27, y: 31}, color="#3366CC"

# Details with brush
paint_with_brush: texture_id="player_skin", coordinates=[{x: 10, y: 10}, {x: 12, y: 10}],
  brush_settings={color: "#000000", size: 1}, connect_strokes=false  # Separate eye pixels

# Apply
apply_texture: id="head", texture="player_skin"
プロシージャルパターン
# Create base
create_texture: name="pattern", width=32, height=32, fill_color="#FFFFFF", layer_name="base"

# Draw grid
draw_shape_tool: texture_id="pattern", shape="rectangle_h", start={x: 0, y: 0}, end={x: 31, y: 31},
  color="#CCCCCC", line_width=1
draw_shape_tool: texture_id="pattern", shape="rectangle_h", start={x: 8, y: 8}, end={x: 24, y: 24},
  color="#999999", line_width=1

ヒント

  • きれいなピクセルアートを作成するには、paint_settings で pixel_perfect=true を使用します
  • 意図した対称性とネイティブのターゲットコンテキストを確認してから mirror_painting を有効にします。非対称の細部を描く場合は無効にしてください
  • 非破壊編集にはレイヤーを使用します
  • lock_alpha を使うと、既存のピクセルの外側に描画できなくなります
  • 接している同じ色のピクセルだけを塗りつぶすには、fill_mode="color_connected" を使用します
  • 頻繁に使用する設定のブラシプリセットを作成します
  • paint_with_brush はデフォルトで点をつなぎます。目や斑点のように個別にスタンプする場合は、connect_strokes=false を設定します
  • 意味のある描画変更を行った後は、get_texture とレンダリングされたモデルの両方を確認します。タイル状に並べるブロックでは、早い段階で繰り返し配置した状態を確認します。アニメーションアセットでは、ポーズによって見えるようになる表面を確認します。これらの方法は、Minecraft スタイルガイドとBedrock テクスチャガイドに沿ったものです。

コメント