blockbench-substance について
Blockbenchのテクスチャ作業でAdobe Substance 3Dのツールやアセットを使う上級者向けスキルです。プロシージャル素材、ベイク、Painterの出力、マップ整理と取り込みを扱います。
主な機能
- 01プロシージャルなSubstance素材のレンダリング
- 02AOや曲率などのモデルマスクをベイク
- 03HTTP経由でPainterの作業を実行
- 04テクスチャマップの変換とパック
- 05マップをBlockbenchに取り込み
活用シーン
- 01Blockbenchモデル用のプロシージャルテクスチャ作成
- 02モデル形状からのマスクベイク
- 03Painterの出力をBlockbench向けに準備
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jasonjgardner/ blockbench-mcp-project --skill blockbench-substanceインストール後、Claude Code で/blockbench-substanceを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/baker.mdpainter.mdsat-cli.mdscripts/painter_bedrock_export.pypainter_new_project.pypainter_remote.pyprep_maps.pysat_locate.pysat_render.py詳細
Blockbench + Adobe Substance 3D
任意の高度な機能です。 Blockbench での作業のほとんどでは必要ありません。blockbench-texturing でペイントし、blockbench-gpt-image-textures で生成し、blockbench-albedo-to-pbr でノーマル/MER を作成できます。このスキルは、ユーザーが Substance を求めている場合、または .sbsar/.sbs/Painter のアセットをすでに持っている場合にのみ使用してください。ライセンス済みの Adobe Substance 3D のインストールが必要です。最初に blockbench-use を読み込み、結果を割り当てるには blockbench-pbr-materials も読み込んでください。
Substance が生成するのは画像ファイルです。ジオメトリと UV のソースは引き続き Blockbench です。どの経路でも、最後に create_texture(data、pbr_channel)または import_texture_set でファイルをインポートします。
0. ツールを探す
python scripts/sat_locate.py
Designer には sbsrender、sbscooker、sbsupdater、substance3d_baker が同梱されており、PATH 外の C:\Program Files\Adobe\Adobe Substance 3D Designer\ にあります。sbsmutator と pysbs Python API は、単体の Substance Automation Toolkit にのみ含まれています。Painter は HTTP 経由で操作する GUI アプリです。何も見つからない場合は停止してユーザーに伝え、Adobe ソフトウェアをインストールしないでください。
経路を選ぶ
| 目的 | ツール | リファレンス |
|---|---|---|
| 手続き型マテリアル(レンガ、さび、葉)を Blockbench テクスチャとして使用する | sat_render.py → sbsrender | sat-cli.md |
.sbs グラフがあり、.sbsar が必要 | sbscooker(古い場合は最初に sbsupdater) | sat-cli.md |
.sbs をヘッドレスで編集/特化する | sbsmutator(SAT のみ) | sat-cli.md |
| モデルから AO/曲率/ID/位置マスクを作成する | substance3d_baker | baker.md |
| スマートマテリアルを使ってモデルに手作業でペイントする | Painter + painter_remote.py | painter.md |
| Bedrock MER のパック、ビット深度の変換、ノーマルの緑チャンネルの反転、縮小 | prep_maps.py | 以下 |
ワークフロー A:手続き型マテリアル → Blockbench
python scripts/sat_render.py material.sbsar --out out --size 16 --seed 7 \
--set Season=0.8 --normal-format directx
--sizeはピクセル単位です。スクリプトが log2 の$outputsizeに変換します(生のsbsrenderでは 16 px に'$outputsize@4,4'が必要です)。スクリプトは--outを作成します。フォルダーが存在しない場合、生のsbsrenderは終了コード 47 で終了します。- JSON レポートから
inputsを読み取り、識別子でパラメーターを設定します。不明な識別子はwarningsとして返されます。sbsrenderはそれらを黙って無視するためです。 usagesに基づいて出力をチャンネルに対応付けます。baseColor/diffuse→ カラー、normal、height、metallic+roughness(または反転したglossiness)+emissive→ MER。- デフォルトでは出力は 8-bit です。タイリングするブロックテクスチャは 16/32 px でそのままレンダリングします。アトラスの場合は、アトラスのサイズ以上でレンダリングしてから縮小します。
ワークフロー B:Blockbench モデルからマスクをベイクする
- UV を修正します:すべての面に独自の UV 長方形が必要です。ブロック形式のデフォルトの面ごとの Auto UV では、面が重なり、ベイクが台無しになります。baker.md § Prepare を参照してください。
export_model→codec_id: "gltf"、options: {"encoding": "binary"}、path: <abs>.glb(またはobj)。- アンダースコア形式のフラグを使って、密度を 8~16 倍にしてベイクします(オンラインドキュメントにあるハイフン形式は失敗します):
substance3d_baker AmbientOcclusion.Raytraced model.glb --use_lowdef_as_highdef true --output_size 512,512 --output_path bake python scripts/prep_maps.py convert bake/*.png --out bake/64 --size 64(16-bit → 8-bit、ボックスフィルターで縮小)。- マップをマスクとして使用します。AO をカラー テクスチャに乗算するか、
sbsrender --set-entry/Painter に渡します。
ワークフロー C:Painter でペイントし、マップを戻す
- UV を修正してから、
codec_id: "obj"を指定してexport_modelを実行します。Painter は glTF をインポートできません。 --enable-remote-scriptingを指定して Painter を起動します(アプリが開いてしまうため、--helpは使わないでください)。次に:python scripts/painter_remote.py --ping --wait 240 python scripts/painter_remote.py --python-file scripts/painter_new_project.py --result \ --set MESH=C:/work/model.obj --set NORMAL=DirectX --set RESOLUTION=1024 --set BAKE=1- ユーザーが Painter でペイントします(または、ローカルの API ドキュメントを読んだ後にレイヤーをスクリプトで作成します)。
- エクスポートしてサイズを縮小します:
python scripts/painter_remote.py --python-file scripts/painter_bedrock_export.py --result \ --set OUT=C:/work/painter_out --set NAME=model --set PRESET=bedrock --set SIZE_LOG2=9 python scripts/prep_maps.py convert C:/work/painter_out/model*.png --out final --size 64bedrockではNAME.png、NAME_mer.png、NAME_normal.png(DirectX)が生成されます。gltfでは ORM と OpenGL 法線マップが生成されます。Painter は 128 px 未満ではエクスポートせず、チャンネルがないマップは出力しません。結果のfilesリストを信頼してください。
パックとインポート
python scripts/prep_maps.py pack-mer --metallic out/m_metallic.png --emissive 0 --roughness out/m_roughness.png --out final/model_mer.png
python scripts/prep_maps.py texture-set --color model --mer model_mer --normal model_normal --out final/model.texture_set.json
定数は 0~255 です。--glossiness を指定すると --roughness が置き換えられ、値が反転されます。次に、JSON パスを指定して import_texture_set を実行するか、ファイルごとに create_texture(pbr_channel: color/normal/height/mer)と create_pbr_material を実行します。法線マップと高さマップは、どちらか一方のみを使い、両方は使わないでください。
規約と検証
- 法線マップ:Bedrock は DirectX(緑チャンネルが下向き)、glTF/Java labPBR は OpenGL です。ベイカーのデフォルトは
directxです。グラフの$normalformatはグラフごとに定義されています(テストしたグラフの 1 つでは、緑ではなく赤が反転していました)。そのため、レンダリングを比較するか、prep_maps.py convert --flip-greenを使ってください。インポート後、Blockbench のプレビューで盛り上がった部分が盛り上がって見えることを確認してください。 - 16 ビットの落とし穴:AO/曲率/高さの PNG は 16 ビットの場合がよくあります。
PIL.Image.convert("L")を使うと白にクリップされます。prep_maps.py convertまたは--output-bit-depth 8を使ってください。 - パス:実行ファイルには
C:/...パスを渡してください。Git Bash の/c/...は--aliasを壊します。'$outputsize@...'は引用符で囲んでください。 - Blockbench プロジェクトの安全性:エクスポートとインポートの前にプロジェクト UUID を記録し、テクスチャを書き戻す前に UUID を確認してください。
- インポートした各マップを
list_textures/get_textureとcapture_screenshotで確認してください。真っ白、または均一なグレーのマップは、ビット深度、UV の重なり、またはパラメーターに誤りがあることを意味します。これはスタイル上の結果ではありません。