blender-hardsurface-modeling について
Blender でのハードサーフェスモデリング向けスキルです。ゲームアセット、製品ビジュアライゼーション、映画用モデルの制作に向け、目的別の工程とモディファイア、トポロジー、シェーディング、QA の手順を示します。
主な機能
- 01アセットの目的に応じた工程選択
- 02実寸スケールでのブロックアウト
- 03ブーリアンとベベルの設定
- 04UV とモディファイアスタックの計画
- 05シェーディング・トポロジー・品質の確認
活用シーン
- 01クローズアップ用ゲーム小物の制作
- 02テクスチャベイク用ヒーローアセットの制作
- 03製品ビジュアライゼーションや映画用モデルの制作
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ el4cteo/ blender-skills --skill blender-hardsurface-modelingインストール後、Claude Code で/blender-hardsurface-modelingを入力して読み込まれたか確認します。
同梱ファイルscripts/_bpyx.pyscripts/apply_stack.py
詳細
ハードサーフェスモデリング
実行モデルは blender-core にあります。モデリングの各パス後に blender-asset-qa を実行してください。
まずワークフローを選ぶ
| ワークフロー | 使用する場面 | 出力 |
|---|---|---|
| ミッドポリ(ベベル+ウェイト付き法線、ベイクなし) | 現代的なゲーム、近くで見られるプロップ、迅速な反復作業 | ゲームメッシュを直接作成。タイリングマテリアル/トリムシートを使用 |
| ハイポリ → ローポリ(ブーリアン+ベベルまたはサブディビジョンでハイポリを作成し、ローポリにベイク) | 主役となるアセット、独自のテクスチャ、厳しい三角形数の予算 | _high + _low → blender-texture-baking |
| サブディビジョン(サポートループ/クリース+Subsurf) | レンダリング、製品ビジュアライゼーション、映画 | 滑らかなサーフェス。ループ/クリースでエッジを保持 |
手順
- プリミティブから実寸スケール(
ob.dimensions)でブロックアウトします。ディテールを加える前に、シルエットとプロポーションを確定します。参照画像と照らし合わせて確認します。 - ベベル、ブーリアン、またはソリッド化を行う前にスケールを適用(
transform_apply(scale=True))します。モディファイアーの距離はオブジェクト空間を基準にするためです。 - 形状は主要 → 二次 → 三次の順で作成します。カットやパネルにはブーリアンを使い、その後にベベルを加えます。小さな三次ディテールはノーマルマップ/デカールに含めるか、ベイク用の「フローター」としてハイポリに加えます。
- ベースメッシュを今すぐ UV 展開します(ミッドポリ)。ベベル/ブーリアンモディファイアーは UV を引き継ぎますが、ベベル後は自動シームを付けるのに十分な鋭いエッジがなくなります。次に
scripts/apply_stack.py -- --objects Body --preset midpoly --cutters Cut1 Cut2でスタックを構築します。順序は Mirror → Booleans → Bevel → Weighted Normal →(エクスポート時に Triangulate)です。 - シェーディングを確認します。スムーズシェーディング+Weighted Normal(シャープを保持)を設定します。平面にグラデーションがあってはいけません。
solidシェーディングでマットキャップまたはlookを使って確認します。 blender-asset-qaでQAを行い、編集可能なソースを保持したまま、エクスポート用コピーにのみスタックを適用(--apply)します。
スタックのルール
- ブーリアン:カッターは、表示設定を
WIRE、hide_render=TrueにしたCuttersコレクションに入れます。ソルバーはEXACT(堅牢なデフォルト)、MANIFOLD(大幅に高速ですが、入力が閉じた多様体である必要があります)、FLOAT(従来の高速方式ですが、共面フェースに弱い)を使います。カッターが多数ある場合はoperand_type="COLLECTION"を使います。 - 共面のブーリアンフェースは避けます。カッターをサーフェスより少し先まで伸ばしてください。共面フェースは Z ファイティングの原因にもなります。
- ベベル:
limit_method="ANGLE"(30°)、または手動で選択したエッジにbevel_weight_edge属性を設定して"WEIGHT"を指定します。use_clamp_overlap、harden_normals=True、miter_outer="MITER_ARC"を有効にします。幅はパーツのサイズの約 0.5~2%とし、アセット全体で統一します。 - ベベル後の Weighted Normal:
mode="FACE_AREA"、keep_sharp=True、ウェイトは 50 にします。フェースをスムーズにする必要があります(sharp_face属性を削除するか、shade_smoothを呼び出します)。 - Smooth by Angle(4.1 以降。auto smooth の代替):
bpy.ops.object.shade_auto_smooth(angle=rad)は GN モディファイアーを追加します。またはshade_smooth_by_angleを使うとsharp_edgeが破壊的に設定されます。 - Mirror:
use_clip=True、use_mirror_merge=Trueにします。x ≥ 0 の片側だけをモデリングします。 - Subdivision:サポートループ(エッジからフェース幅の 1~5%の位置にループを配置)または
crease_edge(0~1)でエッジを保持します。use_limit_surfaceを有効にします。アセットをゲームエンジンに渡す場合、クリースは使わないでください。 - Triangulate はエクスポート/ベイク時にのみ行います(
keep_custom_normals=True、BEAUTY)。ベイク用メッシュとエクスポート用メッシュを同じ方法で三角形化すると、ノーマルマップの同期を保てます。
トポロジーのルール
- N ゴン:ミッドポリ/ゲームメッシュの、変形しない平面には問題ありません。曲面やサブディバイドまたは変形するものには絶対に使わないでください。
- ポール(5 本以上のエッジ)は平面に配置し、曲率のピークやベベルには配置しないでください。
- 画面上のサイズに応じた円柱セグメント数:小型(ボルト)は 6~8、中型(ハンドル)は 12~16、大型(バレル)は 24~32、主役またはクローズアップ用は 48 以上です。ブーリアン/ミラーを既存のループに揃えられるよう、4 または 8 の倍数を使います。
- 目に見える曲面をまたぐ細長い三角形は避けてください(シェーディングや LOD のアーティファクトの原因になります)。
- パネルライン:内側に押し込み、ミッドポリではそのまま押し出します。ハイポリではブーリアンの溝を作ってからベイクします。
- フラットなフェースではなく、シルエットに必要な箇所に密度を割り当てます。
Python からエッジ/面の属性を取得(4.0 以降の名称)
me = ob.data
bw = me.attributes.get("bevel_weight_edge") or me.attributes.new("bevel_weight_edge", "FLOAT", "EDGE")
cr = me.attributes.get("crease_edge") or me.attributes.new("crease_edge", "FLOAT", "EDGE")
sh = me.attributes.get("sharp_edge") or me.attributes.new("sharp_edge", "BOOLEAN", "EDGE")
bw.data[edge_index].value = 1.0; sh.data[edge_index].value = True
me.edges[edge_index].use_seam = True # seams are still an edge property
bmesh で角度を指定してシャープなエッジを選択します:e.calc_face_angle(0) > math.radians(30)。
注意点
- ベベルがぼやけて見えたり、反転したりする場合は、スケールが未適用または不均一であるか、ジオメトリが重なっている可能性があります(クランプをオンにしてください)。
- ブーリアンの結果が何もない、または不正な場合:カッターが閉じていない/マニフォールドでない(Exact では処理できますが、Manifold では失敗します)か、法線が反転しています。
- Weighted Normal の効果がない場合:面がフラットシェーディングになっているか、先行するモディファイアーによってカスタム法線が失われています。
- 5.2:ノードツリー内でプロシージャルベベルを行うための GN
Mesh Bevelノードが存在します(blender-geometry-nodes)。 - トリムシート/ミッドポリのアセット:UV はトリムストリップに割り当て(
blender-retopology-uv)、マテリアルはタイリングします(blender-pbr-materials)。
コメント
Markdown 対応