blender-asset-qa について
blender-asset-qaは、納品前の3Dアセットを検査するBlenderスキルです。プロファイル別のメッシュ自動検査に必須の目視確認を組み合わせ、検出内容の解釈と修正方法も案内します。
主な機能
- 01プロファイル別のメッシュ検査
- 02ジオメトリとトポロジーの問題を検出
- 03複数の表示モードでアセットを確認
- 04検出内容と修正方法を説明
- 05三角ポリゴン数と許容した警告を報告
活用シーン
- 01納品前にゲームアセットを検査
- 02分離したパーツやメッシュの交差を発見
- 03トポロジーと表面のシェーディングを確認
- 04印刷やRobloxのメッシュ要件を検証
MCP 対応
ライブでの目視確認では、MCPのlook機能を使い、対象を角度別、マテリアルまたはソリッド、ワイヤーフレーム表示で確認します。ヘッドレス確認には付属の画像レンダリングスクリプトを使います。
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ el4cteo/ blender-skills --skill blender-asset-qaインストール後、Claude Code で/blender-asset-qaを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
scripts/_bpyx.pyqa_check.pyreview_shots.py詳細
アセット QA(レビューゲート)
生成または編集したメッシュが正しいと決めつけないでください。まず数値で確認し、その後、目視で確認します。
手順
- 自動チェック:1つのアセットに属するオブジェクトをまとめて渡します。
scripts/qa_check.py -- --objects Body Head Hat --profile gameプロファイル:game(デフォルト)、render(許容範囲が広い)、print(水密性が必須)、roblox(1メッシュあたり20kトライアングル、水密性、Nゴンなし、影響数≤4)。 errorsのすべての項目を修正(下表を参照)してから、"pass": trueになるまで再実行します。各警告は修正するか、理由をユーザーに伝えたうえで明示的に許容する必要があります。- 必ず目視で確認します。
- ライブ:対象に対して、MCP の
lookをmode="angles"で実行し、material/solidシェーディングとwireframeの両方で確認します。内部を見るにはxrayを使用します。 - ヘッドレス:
scripts/review_shots.py -- --objects ... --mode randomを実行します(オブジェクトごとに色が異なるため、分離したパーツが見つけやすくなります)。続けて、トポロジー確認のために--mode wireを実行します。返された PNG を開きます。
- ライブ:対象に対して、MCP の
- 報告する内容:オブジェクトごとのトライアングル数、修正した問題、残る許容済みの警告。
各検出項目の意味 → 修正方法
| 検出項目 | 原因 | 修正方法 |
|---|---|---|
zfighting A<->B | --eps(1 mm)以内で同じ方向を向いた2つの面が重なっている | 隠れた重複面を削除するか、法線方向に2~5 mm以上ずらすか、ブーリアン/結合を行います |
back_to_back | 反対向きの法線を持つ面が接触している(箱同士が面で接着している状態) | 隠れた面を削除します(無駄なトライアングルやベイク時のアーティファクトの原因になります) |
floating | --tol 以内に他のパーツと接触していない島/オブジェクト | 接触するように移動(スナップ)するか、ブリッジするか、結合してマージします。意図的に浮かせている場合(火花、UI)は、個別に確認します |
enclosed | 他のパーツの内部に完全に収まり、接触していないパーツ(目、内部機構) | 通常は問題ありません。意図したものか確認します |
inside_out_islands | 閉じたパーツの法線が内側を向いている | そのパーツに対して mesh.normals_make_consistent(inside=False) を実行します |
inconsistent_normals_edges | 隣接する面の向きが互いに逆になっている | 法線を再計算します。解消しない場合は、非多様体の継ぎ目を探します |
nonmanifold_edges / wire_edges | 1つのエッジに3面以上が接続されている、または孤立したエッジがある | 余分な面を溶解/削除し、delete_loose を実行します |
boundary_edges | 穴が開いている(プリント/Roblox/ベイクに不適) | 穴を埋める(fill_holes/edge_face_add)か、ふたをします |
degenerate_faces / zero_length_edges | ジオメトリが潰れている | dissolve_degenerate(threshold=1e-4) を実行します |
duplicate_verts | 継ぎ目が溶接されていない | remove_doubles(threshold=1e-4)(距離でマージ)を実行します。その後、UV の継ぎ目を確認します |
ngons | 5辺以上の面がある | 該当箇所を三角形化/四角形化します。変形しない平坦なハードサーフェス面に限り、Nゴンを使用できます |
| 未適用/負のスケール | オブジェクトのトランスフォーム | transform_apply(rotation=True, scale=True) を実行します。負のスケールはエクスポート時に法線を反転させます |
uv_maps: 0 / 面積ゼロの UV/重複 | UV 展開がない、または不適切 | blender-retopology-uv |
| ウェイトなし/影響数が4を超える | スキニング | blender-character-rigging(weights_check.py) |
ground_z ≠ 0 | アセットが浮いている、または沈んでいる | 原点を底面に移動し、z = 0 に設定します(小道具) |
スクリプトだけでは完全に判断できない手動チェック
- シルエットとプロポーション:目標のカメラ距離で確認します。参照画像や実際のサイズ(
ob.dimensions)と比較します。 - シェーディングのアーティファクト:ハードエッジでのスムージング(シャープエッジ/ウェイト付き法線が必要)や、曲面の極でのピンチングを確認します。
- 不自然に見える交差(脚が座面に食い込むなど):パーツ同士が「接続」されていても確認します。
- 内部/隠れたジオメトリ:トライアングルを無駄にしていないか確認します(
xrayを使用)。 - 変形:リグを極端なポーズ(肘140°、膝150°、肩を上げた状態)にし、ボリュームが潰れていないか確認します。
- マテリアルの割り当て:すべての面に意図したマテリアルが割り当てられ、デフォルトのグレーのスロットが残っていないことを確認します。
調整
--epsは Z ファイティングの距離です。大規模な環境シーンでは 0.005 まで上げ、小さなジュエリーでは 0.0002 まで下げてください。--tolは分離したパーツの接触許容値です。大きなキットバッシュでは上げてください。--no-modifiersはベースメッシュをチェックします。デフォルトでは、エクスポート対象となる評価済みの結果(モディファイア適用後)がチェックされます。--max-tris(300k)を超えると、Z ファイティングと浮遊のチェックはスキップされます。高ポリゴンのソースは、パーツごとにチェックしてください。
コメント
Markdown 対応