ブループリントメーカー
以下のいずれかから、完成したブループリントスタイルのシート(PNG、デフォルト1920x1080)を生成します:
- 3Dモデル → 実際の隠線処理された正投影ビュー:大きな3/4ビューと、測定された寸法線付きの側面図、上面図、正面図(3Dパイプライン)、または
- 2D画像 → シルエット輪郭、バウンディングボックス寸法、コールアウト付きのライン抽出(2Dパイプライン)。
両方のパイプラインは共通のレイアウトエンジン(フレーム、パネル、タイトルブロック、テキストフィッティング)を共有するため、結果は同じように見えます。
できることとできないこと(必要に応じてユーザーに伝えてください)
- ファイルがないとブループリントは作れません。 言葉だけで説明されたオブジェクトを正確な図面に変換することはできません。3Dモデルまたは画像を要求してください。幾何形状を捏造しないでください。
- 3Dでは実際の正投影ビューが得られますが、2Dではできません。 1枚の写真には1つの視点しかないため、2Dパイプラインは1つの線画ビューを生成し、正面/側面/上面図は生成しません。
- 線の品質はメッシュ/画像に依存します。 数十万の三角形を持つゲーム抽出メッシュは密集した線になります。自動的なベースとしては優れていますが、手作りのイラスト品質ではありません。
- ユーザーが指定しない限り、スケールは不明です。
scale_ref(実際の測定値)が提供されない限り、寸法はモデル単位(u)またはピクセル(px)で表示されます。推測した実世界のサイズを事実として提示しないでください。 - フォント: バンドルされているテキストレンダリングはDejaVu(ラテン語、ギリシャ語、キリル文字)を使用します。CJK/アラビア語/ヘブライ語のテキストは正しくレンダリングされません。
- レイアウトは16:9用に設計されています(1920x1080、2560x1440、1920x1200でテスト済み)。他のアスペクト比ではパネルレイアウトが伸びます。出力を確認してください。
- リッピングされたゲーム/映画アセットは誰かの知的財産です。 個人の壁紙としては問題ありませんが、再配布しないように注意してください。
ステップ0 - 入力の収集(一度だけ、不足しているもののみを質問)
- ファイル(モデルまたは画像)。
- オブジェクトの名前と説明。または下書きを提案します。説明はレンダリングに実際に表示されているものと一致している必要があります(最初に確認してください)。車輪付き車両の説明を四足のクリーチャーにすると、シートの信頼性が損なわれます。ユーザーのテキストがジオメトリと一致しない場合は、その旨を伝えて書き直してください。
- 出力解像度と、壁紙の場合は上部安全ゾーン(デスクトップバーが上部を覆うため)。デフォルトの
top_safe= 76(フレームは1080pで76ピクセル下から開始、ノートパソコンで約1cmのバーのスペース)。ユーザーがセンチメートルを指定した場合は変換します:px_per_cm = screen_width_px / screen_width_cm(24インチ1080pモニターで約36 px/cm、15.6インチノートパソコンで約56 px/cm)。バーの高さ(px)+約12を使用します。 - スタイル:
blueprint(デフォルト、青)、graphite(暗色にオレンジの線)、paper(明るい、印刷可能)。 - テキストの言語(デフォルトは英語;その言語で仕様テキストを記述します)。
ユーザーに詰問しないでください:すでに十分な情報を提供している場合は、デフォルトで進め、前提条件を述べてください。
ステップ1 - セットアップ
pip install trimesh numpy scipy networkx pillow opencv-python-headless matplotlib --break-system-packages -q
# オプション、700k面以上のメッシュのみ:pip install fast-simplification --break-system-packages
すべてのスクリプトはこのファイルの隣の scripts/ にあります。SKILL_DIR をスキルフォルダに置き換えてください。
ステップ2A - 3Dモデル
検査(常に最初にこれを行う - 1つの画像、1つのコマンド)
python3 SKILL_DIR/scripts/blueprint3d.py inspect MODEL.glb --out /home/claude/insp
inspect.png を view で開き(1枚のコンタクトシートです)、印刷されたテキストを読みます:
- 上段 = 生の軸投影:どの生の軸が上で、オブジェクトがどの方向を向いているかを特定します。
- 下段 = 番号付きアンカー候補(黄色)のある3/4ビュー。コンソールには各
cand Nとそのピクセル位置および正準位置がリストされます。薄いグリッドは1500x860の参照ピクセル単位です(pickとして使用可能)。
方向フラグ(正準フレーム:+yが上、オブジェクトの前面は-x方向):
--up +Y(GLB/glTFのデフォルト;他の形式では +Z)と --front -X|+X|+Z|-Z|...。印刷されたヒントは最も長い水平軸を指定します。前面は側面図の左側にある必要があるため、頭/前面が反対側にある場合は符号を反転させます。方向が間違っていた場合は、他の値で inspect を一度再実行します。最終的な値を仕様に "up" および "front" として記述します。
inspect は --az、--el(デフォルト58 / 20)および --k(候補数、デフォルト16)も受け付けます。仕様でも同じ view az/el を使用してください。そうしないと候補番号が一致しません。
仕様を記述する
spec.json を作成します(スキーマは以下、動作例は assets/example_spec_3d.json)。各コールアウトにタイトル、短い説明、そして1つのアンカーを指定します:
"cand": N-inspect.pngからの番号付き候補(最も安価:ピクセルの推測不要)。候補は可視表面全体に分散しているため、ドットが実際に指定したパーツ上にあることを確認します。近くに候補がない場合はpickを使用します。"pick": [px, py]- 1500x860参照ビュー内のピクセル(inspect.pngのグリッド)"extreme": "+x" | "-x" | "+y" | "-y" | "+z" | "-z"- 正準フレーム内の極値点(前面は-x;ジオメトリの背後に隠れている可能性あり)"point": [x, y, z]- 正確な正準座標
必要な場合以外は "label" を設定しないでください:ラベル位置は自動的に選択されます(テキストはモデルのシルエットや他のラベルから離して配置され、パネル側面に整然とした列を形成し、短く交差しない引き出し線が使用されます)。"label": [x, y](1920x1080参照座標、メインパネルのx 40-1290、y 96-826)は手動位置を強制し、以下の監査でチェックされます。
ビルド
python3 SKILL_DIR/scripts/blueprint3d.py build MODEL.glb spec.json --out /mnt/user-data/outputs/blueprint.png
ペイントされたビューはディスクにキャッシュされます(~/.cache/blueprint-maker、または $BP_CACHE)、キーはモデル+ビュー+スタイル。テキスト、ラベル、コールアウト、またはパレットに依存しないコンテンツを変更しても、再ペイントの代わりに約2秒で再構築されます。--no-cache または "cache": false で無効化できます。
レイアウト:"layout": "multi"(デフォルト:大きな3/4ビュー+側面/上面/正面+寸法)または "single"(3/4ビューのみ、より広い)。
仕様ロック(仕様とモデルのバインディング)
cand、pick、または extreme として記述されたアンカーは、それらが選択されたモデル、方向、ビューに対してのみ意味を持ちます。最初のビルドで、仕様の隣に <spec>.lock.json が書き込まれます:各アンカーが解決された3Dポイント、モデルのジオメトリックフィンガープリント、およびアンカーに影響を与える設定(up、front、ビューaz/el、candidates、max_faces)。以降のビルドでは毎回アンカーが再解決され、比較が行われます:
- アンカーが移動した(モデル、方向、またはビューが異なる)→ ビルドは失敗し、
error: spec is not bound to this model ...となり、各コールアウトと変更内容が示されます。仕様の設定でinspectを再実行し、アンカーを再選択してから--relockでビルドするか(元のモデル/設定を復元します)、修正します。 - モデルは異なるが、すべてのアンカーが同じ場所に着地する場合(例:ロスレス再エクスポート)→
WARNING: binding: ...として表示。確認後、--relockを使用します。 - 意図的にアンカーを編集した場合(同じモデル/設定)→ ロックエントリは静かに更新されます。
--no-lock はチェックをスキップします(推奨しません)。ロックファイルは仕様と一緒に保管してください(コミットします)。バインディングエラーを無視して「修正」しないでください。ラベルが間違った部分を指すことになります。
ステップ2B - 2D画像
python3 SKILL_DIR/scripts/blueprint2d.py inspect IMAGE.png --out /home/claude/insp
印刷されたマスクカバレッジを読みます(背景除去は単色背景または透明PNGで機能します。それ以外の場合は「none」と報告されます)。次に view で inspect.png を確認します:左側 = ソース画像にソースピクセル単位のグリッド(point_px 用)、右側 = ライン抽出器が見ているもの。コールアウトラベルもここでは自動的に配置されます("label" は省略します)。
spec.json を記述し(assets/example_spec_2d.json を参照)、ビルドします:
python3 SKILL_DIR/scripts/blueprint2d.py build IMAGE.png spec.json --out /mnt/user-data/outputs/blueprint.png
チューニング:"detail" 0.3(クリーンで太い)から0.8(込み入ったもの)まで;"mode": "edges"(Canny、写真/レンダリング用)または "sketch"(XDoG、ソフト/低コントラストのアート用);"bg": "none" でフレーム全体を保持、または "mask": "path.png" で手作りのシルエット;"crop": [x0,y0,x1,y1] で被写体を分離;"fill" 0-1 で半透明のボディティント。
ステップ3 - 結果の確認(スキップしないでください。ただし、手間をかけすぎないように)
ビルダーは WARNING: 行を出力します。最初にそれらを読んでください - これらは自動監査であるため、通常は最後にPNGを view で確認するだけで済みます:
error: spec is not bound to this model- 上記の「仕様ロック」を参照。これは警告ではなく、重大な失敗です。layout: ...- コールアウトテキストがモデルと重なっている、2つのラベルが重なっている、引き出し線が別のラベルのテキスト/別の引き出し線/自身のテキストと交差している、テキストがパネルの外にある、テキストが軸トライアド上にある。手動の"label"を削除する(配置プログラムに決定させる)、アンカーを変更する、またはテキストを短くして修正します。description / specs / notes: shrunk to Npxまたはdoes NOT fit- 読み取れないテキストを受け入れるのではなく、テキストを短くするか行を削除します。
次に、最終的なPNGを一度 view で確認し、監査ではわからないことを検証します:
- モデルがすべてのビューで正しく直立し、意図した方向を向いていること。寸法が妥当であること。
- 各コールアウトのドットが、そのテキストが指定するパーツに実際に着地していること。
- 上部安全ゾーンが空であること(壁紙使用時)。
何か問題がある場合は、仕様(アンカー、view.az/view.el、テキストの長さ、feature_deg)を編集して再構築します。キャッシュがあるため、これには数秒かかります。典型的な合計:1回のinspect + 1-2回のビルド、2-3回の画像表示。
ステップ4 - 納品
/mnt/user-data/outputs/ に保存し、present_files を呼び出してから、簡潔に返信します。返信では、常に次のことを明記してください:
- あなたが作成したテキスト(説明、仕様、備考、コールアウト機能)とファイルから測定されたものを区別すること。ユーザーは、気になる発明された技術的主張を置き換える必要があります。
- 単位/スケールの前提。
- すべての
WARNINGまたは目に見える制限(密集した線、隠れたアンカー、アスペクト比)。
トークン使用量を抑えるために
inspect画像1枚、最終確認のview1回。各調整後に再表示する代わりに、印刷された監査に依存します。candアンカーを使用し、labelは省略します。ピクセル座標を手動で調整しないでください。- 仕様は一度に完全に(アンカー、テキスト)記述し、その後ビルドします。監査または最終表示でフラグが立てられたフィールドのみを編集します。
注釈テキストの記述
- レンダリングで表示されているもののみを説明します。機能的主張はもっともらしく一般的に保ちます。オブジェクトがフランチャイズからのものである場合、確実でない設定の詳細は述べないでください。
- コールアウトタイトル:2~4語。コールアウトテキスト:1つの短い文(約70文字)。注意事項:3~5つの短い項目。説明文:約600~700文字。仕様行:値は約45文字以下。
- 表現は技術的かつ一貫性を保ちます:名称、仕様番号、改訂、単位。
仕様リファレンス
共通キー(両パイプライン):
| キー | 意味 | デフォルト |
|---|---|---|
title | タイトルブロックの大きなタイトル | "UNTITLED" |
subtitle | タイトルの下の行 | "" |
designation | 説明ボックス上部の太字行 | "" |
description | 説明ボックス用の段落 | (ボックス省略) |
specs | 仕様テーブル用の [["ラベル","値"], ...] | (省略) |
notes | 備考ボックス用の文字列リスト(A、B、C...) | (省略) |
notes_title | そのボックスの見出し | "DESIGN REMARKS" / "NOTES" |
callouts | コールアウトオブジェクトのリスト(以下) | なし |
spec_no, class, rev, sheet, scale | タイトルブロックフィールド(空白はスキップ) | sheet "01 / 01"、scale "AS SHOWN" |
fields | タイトルブロックフィールドの完全オーバーライド:[["KEY","value"], ...] | 自動 |
width, height | 出力サイズ(px) | 1920, 1080 |
top_safe | フレームが開始するy位置(1080p時)。デスクトップバーを避ける | 76 |
palette | blueprint、graphite、paper | blueprint |
scale_ref | `{"axis": "length | height |
3Dのみ:up、front、layout(multi/single)、view {"az": 58, "el": 20, "margin": 0.045}、candidates(cand に使用するk、デフォルト16。inspect の --k と一致する必要があります)、feature_deg(エッジ角度閾値、デフォルト38。線を減らすには50~60に上げます)、feature_deg_small(デフォルト44、側面/上面/正面ビュー用)、max_faces(デフォルト700000)、cache(デフォルトtrue)。
2Dのみ:mode、detail、bg、mask、crop、fill、fit_subject(被写体にクロップ、デフォルトtrue)、view_title、view_sub。
コールアウトオブジェクト:{"title": "...", "desc": "..."} に加えてアンカー - 3D:cand / pick / extreme / point;2D:point_px: [x, y](ソース画像のピクセル単位) - およびオプションで "label": [x, y] により手動位置を強制。
トラブルシューティング
- モデルが横向き/上下逆/後ろ向き:
--up/--frontを指定してinspectを再実行。inspect.pngの上段を確認します。 - 線の灰色の塊だけ:
feature_degを上げます(50~65)。非常に密なメッシュの場合はmax_facesも低く設定します(fast-simplificationが必要)。 - パーツが欠落している、または透けて見える穴がある: メッシュが水密でないか、面が反転しています。ペインターズアルゴリズムレンダラーはそれを許容しますが、ゲームアセットの内部パーツが透けて見えることがあります。
view.marginを下げるか、別のazを試してみてください。 - 非常に遅い: 約700k面以上のメッシュは、
fast-simplificationがインストールされている場合は自動的に間引かれます。そうでない場合、ビルドに数分かかることがあります。 - 2Dマスクが間違っている、または断片化している: 被写体の色が背景に近すぎます。
"bg": "none"、cropを使用するか、maskPNG(白=被写体)を提供します。 - テキスト警告: テキストを短くします。手動でフォントサイズを小さくしないでください。
- 候補番号が画像と一致しない /
spec is not bound to this model: モデルファイル、up/front、仕様のviewaz/el、またはcandidatesが、仕様が作成されたときのものと異なります。仕様の設定でinspectを再実行し、アンカーを再選択して、--relockでビルドします。 - 自動ラベル配置が失敗し続ける(「衝突のない位置がありません」): パネルに対してコールアウトが多すぎるか、長すぎます。説明を短くするか、コールアウトを削除するか、より広いパネル用に
"layout": "single"を使用します。 - スクリプト編集後に出力が古く見える: キャッシュキーにはレンダラーコードが含まれていますが、不明な場合は
--no-cacheを付けて一度実行します。
ファイル
scripts/binding.py- 仕様ロックファイル(... [以降切り詰められていますが、元のドキュメントの構造を維持しています] )