ゲージモデリング
bmesh / データ API で構築し(UI コンテキスト不要)、次に評価済みメッシュをゲートするため、モディファイアとジオメトリノードが反映されます。
ビルド
scripts/kit.py(同じ場所のスクリプトからインポート)
| 関数 | 作成するもの |
|---|---|
rounded_box(name, size, bevel, segments, loc, rot, collection) | メッシュにベベルが実装されたボックス(角度によるスムージング) |
cylinder(name, radius, depth, segments, bevel, ...) | ベベル付きキャップを持つシリンダー |
bolt_head(name, radius, height, sides, bevel, ...) | 六角(または丸)ボルト頭 |
cut_holes(target, [(u, v, r), ...]) | 最も薄い軸を通る丸穴(ブール、その後ベイク) |
bake_modifiers(ob) | bpy.ops を使わずにスタック全体を適用 |
assign(ob, material) | 単一マテリアルスロット |
ビルダーは同じ名前のオブジェクトを置き換えるため、スクリプトを再実行できます。scripts/build_prop.py は JSON パーツリスト(またはデモの木箱)からプロップ全体を自身のコレクションに構築し、ゲートします。
run_blender_script path=skills/gauge-modeling/scripts/build_prop.py args={"name": "crate", "spec": "parts.json"}
ゲート
scripts/mesh_gate.py → ゲート mesh-health。
| チェック | 失敗条件 | 一般的な修正 |
|---|---|---|
loose_verts, zero_area_faces, duplicate_verts | いずれか | fix_mesh.py |
non_manifold_edges | 3つ以上の面で共有されるエッジ | その領域を再構築 |
inverted_volume | 負のボリュームを持つ閉じたメッシュ | fix_mesh.py(normals) |
ngons | max_ngons を超過(オプトイン) | fix_mesh.py で triangulate_ngons、または再クアッド化 |
triangles | max_tris を超過(オプトイン) | デシメート、ベベルセグメントを減らす |
closed_meshes | require_closed かつ穴が存在 | 穴埋め |
has_uv, texel_density_cv | require_uv / 制限値を超過 | UV 展開、アイランドスケールを均一化 |
fix_mesh.py は apply=true になるまではドライランです。選択範囲外で使用されている共有メッシュデータに触れることはありません。
ルール
- 先に実世界のサイズ(メートル)、次にベベル:ベベルは最小寸法の 1~4% にします。ベベルがないハードエッジは光を受け止めません。
- スムージングの前にベベル:面フラグではなく角度(35度)によるスムージングを使用します。
- ブール演算は切断面に N-gon を残します:静止画には問題ありませんが、エンジンにエクスポートする前に三角化してください。
- 最後までパーツは個別の名前付きオブジェクトとして維持し、エクスポートのためだけに結合します。
- 変更後は毎回、ゲートし、次にクレイシェーディングで
anglesのlookを使用して形状を評価します。