mcpField
B
blender-modeling-modifiers

blender-modeling-modifiers

github.com/ra100クリエイティブ・メディア2444 回インストール26 週間前に更新
リポジトリ

blender-modeling-modifiers について

blender-modeling-modifiersは、Blender 5.xでのモデリングやモディファイア設定を支援するスキルです。bmesh、ブーリアン、ハードサーフェス、リトポロジーを扱い、利用可能な場合は公式 Blender MCP Server経由で実行中のセッションを操作します。

主な機能

  1. 01モディファイアスタックの設定
  2. 02bmeshによるメッシュ作成と編集
  3. 03ブーリアン処理とメッシュのクリーンアップ
  4. 04ハードサーフェスとリトポロジーの設定
  5. 05スカルプトワークフローの構築

活用シーン

  1. 01モデルへのモディファイア追加と調整
  2. 02メッシュのプロシージャルな作成や編集
  3. 03オブジェクトへのブーリアン処理
  4. 04スカルプトやリトポロジー向けのモデル準備

MCP 対応

利用可能な場合、公式 Blender MCP Serverを使って実行中の Blenderセッションでシーンを確認し、メッシュを編集して結果を検証します。接続されていない場合は Pythonスクリプトを使います。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/ra100/blender-claude-plugin --skill blender-modeling-modifiers

インストール後、Claude Code で/blender-modeling-modifiersを入力して読み込まれたか確認します。

同梱ファイルreferences/modifier_reference.mdreferences/python_api.md

詳細

Blender モデリング&モディファイアのエキスパート

概要

このスキルでは、Blender 5.x のモデリングとモディファイアについて、専門的なガイダンスを提供します。モディファイアスタックの設定、プロシージャルなメッシュの作成・編集に使う bmesh、メッシュオペレーターの実行、スカルプトのワークフローの設定、一般的なモデリングパターン(ハードサーフェス、リトポロジー、ブーリアン)を扱います。リファレンスファイルには、モディファイアの全カタログと Python API のパターンが含まれています。

MCP を優先するアプローチ

実行中の Blender セッションでモディファイアの追加、メッシュの編集、ブーリアンの適用、トランスフォームのベイクを直接行うには、公式の Blender MCP Server(Blender Lab、Blender 5.1 以降)を優先してください。MCP サーバーに接続されていない場合に限り、Python スクリプトの出力に切り替えてください。

検出: セッション開始時に、execute_blender_code、get_objects_summary、search_api_docs に一致する名前のツールを探してください。これらは公式の blender-mcp サーバーのツールです。いずれかが存在すれば、MCP を利用できます。

このスキルで使用するツール:

  • execute_blender_code — ライブセッションで bpy の Python を実行します(主な操作)
  • get_objects_summary、get_object_detail_summary — 変更を加える前にシーンの状態を確認します
  • get_blendfile_summary_datablocks / _missing_files / _of_linked_libraries / _path_info / _usage_guess — ファイルの内容を確認します
  • search_api_docs、get_python_api_docs、search_manual_docs — 呼び出す前に正しい API/オペレーター名を確認します
  • get_screenshot_of_window_as_image / _as_json、get_screenshot_of_area_as_image — スクリーンショットで視覚的な結果を確認します
  • jump_to_tab_by_name、jump_to_tab_by_space_type、jump_to_view3d_object_by_name、jump_to_view3d_object_data_by_name — 変更が見えるように UI を操作します
  • render_thumbnail_to_path、render_viewport_to_path — すばやく視覚的なフィードバックを取得します

ワークフロー: get_* / search_* ツールで確認 → execute_blender_code で変更 → スクリーンショットまたは概要ツールで検証します。失敗箇所を特定しやすいよう、コードブロックは小さく、冪等にしてください。

セットアップについては、docs/blender-mcp-setup.md を参照してください。

タスクの判断ツリー

  • 「X 用のモディファイアを追加する」 -> 正しいモディファイアタイプとプロパティについては、references/modifier_reference.md を参照してください
  • 「メッシュ形状をプロシージャルに作成する」 -> 以下の bmesh ワークフローと references/python_api.md を参照してください
  • 「オブジェクト間でブーリアン演算を行う」 -> ブーリアンのワークフローを参照してください
  • 「ハードサーフェスモデリングを設定する」 -> ハードサーフェスのパターンを参照してください
  • 「メッシュをリトポロジーする」 -> リトポロジーのワークフローを参照してください
  • 「メッシュをクリーンアップする」 -> メッシュのクリーンアップを参照してください
  • 「スカルプトを設定する」 -> スカルプトのセットアップを参照してください
  • 「すべてのモディファイアを適用する」 -> references/python_api.md のモディファイア API を参照してください

Blender 5.1 の変更点

ブーリアンモディファイアの速度向上
  1. Blender 5.1 では、ブーリアンモディファイアの処理が大幅に高速化されています
  2. FAST と EXACT の両ソルバーで、内部アルゴリズムの改善による効果が得られます
  3. 高密度メッシュに対する複雑なブーリアン演算で、最も大きな速度向上が見られます
法線の補正反転
  1. 新しいオペレーター:bpy.ops.mesh.corrective_flip_normals()
  2. 周囲のジオメトリのコンテキストに基づいて、正しい法線の向きを計算します
  3. 非多様体メッシュでは、単純な normals_make_consistent よりも信頼性が高くなります
面の中心にスナップ
  1. 面の中心にスナップする新しいスナップオプション
  2. Python:bpy.context.tool_settings.snap_elements に 'FACE_CENTER' を含めます
ループ選択の区切り
  1. エッジループ選択が改善され、区切り角度の設定に従うようになりました
  2. どのエッジをループの一部とみなすか、より細かく制御できます

モディファイアースタックの原則

  1. 順序が重要です:モディファイアーは上から下へ適用されます。サブディビジョンより前にミラーを適用する場合と、ミラーより前にサブディビジョンを適用する場合では結果が異なります。
  2. ビューポートとレンダー:多くのモディファイアーには、ビューポート用とレンダー用の個別の設定があります(例:Subdivision Surface の levels_viewport と render_levels)。
  3. 適用は慎重に:モディファイアーの適用は破壊的な操作です。可能な限り未適用のままにしておきます。
  4. 非破壊ワークフロー:反復的なモデリングではモディファイアースタックを使います。エクスポートやさらなる編集が必要な場合にのみ適用します。
一般的なモディファイアーの積み重ね順序
  1. ミラー(対称の場合)
  2. 配列(反復する場合)
  3. ブーリアン(切り取り/結合操作)
  4. ソリッド化(厚みを追加)
  5. ベベル(エッジにベベルを追加)
  6. 加重法線(シェーディングを修正)
  7. サブディビジョンサーフェス(最終結果を滑らかにする)

ブーリアンのワークフロー

非破壊ブーリアン(モディファイアー)
import bpy

obj = bpy.context.active_object
cutter = bpy.data.objects["Cutter"]

mod = obj.modifiers.new(name="Boolean", type='BOOLEAN')
mod.operation = 'DIFFERENCE'  # DIFFERENCE, UNION, INTERSECT
mod.object = cutter
mod.solver = 'FAST'  # FAST or EXACT
# EXACT is slower but handles more edge cases

# Hide cutter in viewport
cutter.hide_viewport = True
cutter.display_type = 'WIRE'
Exact ソルバーのオプション
mod.solver = 'EXACT'
mod.use_self = False          # Self-intersection handling
mod.use_hole_tolerant = True  # Better handling of non-manifold meshes

ハードサーフェスのパターン

  1. ベース形状(Cube、Cylinder など)から始めます
  2. 対称にするためにミラーモディファイアーを追加します
  3. ジオメトリを絞って主要な形状を定義しながらモデリングします
  4. サブディビジョンを制御するため、エッジ付近にサポートエッジループを追加します
  5. ベベルモディファイアーを追加します(制限方法:Weight。Ctrl+Shift+E を使ってエッジウェイトを設定します)
  6. シェーディングのアーティファクトを修正するため、加重法線モディファイアーを追加します
  7. サブディビジョンサーフェスモディファイアーを追加します(ビューポート:2、レンダー:3)
# Hard surface modifier stack
obj = bpy.context.active_object

# Mirror
mirror = obj.modifiers.new("Mirror", 'MIRROR')
mirror.use_axis = (True, False, False)
mirror.use_clip = True

# Bevel
bevel = obj.modifiers.new("Bevel", 'BEVEL')
bevel.limit_method = 'WEIGHT'
bevel.width = 0.02
bevel.segments = 3
bevel.profile = 0.5

# Weighted Normal
wnormal = obj.modifiers.new("WeightedNormal", 'WEIGHTED_NORMAL')
wnormal.mode = 'FACE_AREA'
wnormal.keep_sharp = True

# Subdivision Surface
subsurf = obj.modifiers.new("Subdivision", 'SUBSURF')
subsurf.levels = 2
subsurf.render_levels = 3

リトポロジーのワークフロー

  1. ハイポリのスキャンデータ/スカルプトをインポートします
  2. 新しいローポリメッシュにシュリンクラップモディファイアーを追加します
  3. シュリンクラップを NEAREST_SURFACE または PROJECT に設定します
  4. 編集モードでローポリメッシュをモデリングします。メッシュはハイポリの表面に吸着します
  5. または、リメッシュモディファイアーを使って自動でリトポロジーを行います
# Remesh (automated)
mod = obj.modifiers.new("Remesh", 'REMESH')
mod.mode = 'VOXEL'        # VOXEL, BLOCKS, SMOOTH, SHARP
mod.voxel_size = 0.05     # Smaller = more detail
mod.use_smooth_shade = True

# Shrinkwrap (manual retopology helper)
mod = lowpoly.modifiers.new("Shrinkwrap", 'SHRINKWRAP')
mod.target = highpoly
mod.wrap_method = 'NEAREST_SURFACEPOINT'
mod.wrap_mode = 'ON_SURFACE'

メッシュのクリーンアップ

一般的なクリーンアップ操作
import bpy

obj = bpy.context.active_object
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.select_all(action='SELECT')

# Remove doubles (merge by distance)
bpy.ops.mesh.remove_doubles(threshold=0.0001)

# Recalculate normals
bpy.ops.mesh.normals_make_consistent(inside=False)

# Delete loose vertices/edges
bpy.ops.mesh.select_all(action='DESELECT')
bpy.ops.mesh.select_loose()
bpy.ops.mesh.delete(type='VERT')

# Fill holes
bpy.ops.mesh.select_non_manifold()
bpy.ops.mesh.fill()

# Triangulate (for export)
bpy.ops.mesh.select_all(action='SELECT')
bpy.ops.mesh.quads_convert_to_tris()

bpy.ops.object.mode_set(mode='OBJECT')
最適化のためのデシメート
mod = obj.modifiers.new("Decimate", 'DECIMATE')
mod.decimate_type = 'COLLAPSE'  # COLLAPSE, UNSUBDIV, DISSOLVE
mod.ratio = 0.5                 # 50% of original faces
# mod.use_symmetry = True
# mod.symmetry_axis = 'X'

スカルプトのセットアップ

import bpy

obj = bpy.context.active_object

# Add multires for sculpting (preserves base mesh)
multires = obj.modifiers.new("Multires", 'MULTIRES')
for _ in range(4):
    bpy.ops.object.multires_subdivide(modifier="Multires", mode='CATMULL_CLARK')

# Or use Dyntopo (dynamic topology) — requires sculpt mode
bpy.ops.object.mode_set(mode='SCULPT')
bpy.context.sculpt_object.use_dynamic_topology_sculpting = True

# Sculpt settings
sculpt = bpy.context.tool_settings.sculpt
sculpt.detail_size = 12         # Dyntopo detail (lower = more detail)
sculpt.detail_refine_method = 'RELATIVE'  # RELATIVE, CONSTANT, BRUSH
sculpt.detail_type_method = 'RELATIVE'    # RELATIVE, CONSTANT, MANUAL
sculpt.use_smooth_shading = True
sculpt.symmetrize_direction = 'NEGATIVE_X'

# Brush settings
brush = sculpt.brush
brush.strength = 0.5
brush.size = 50
brush.auto_smooth_factor = 0.0

bmesh のワークフロー

bmesh を使うと、bpy.ops を使わずにメッシュを直接かつ効率的に作成、操作できます:

ゼロからメッシュを作成する
import bpy
import bmesh

# Create empty mesh
mesh = bpy.data.meshes.new("ProcMesh")
bm = bmesh.new()

# Create geometry
v1 = bm.verts.new((0, 0, 0))
v2 = bm.verts.new((1, 0, 0))
v3 = bm.verts.new((1, 1, 0))
v4 = bm.verts.new((0, 1, 0))
bm.faces.new((v1, v2, v3, v4))

# Write to mesh and create object
bm.to_mesh(mesh)
bm.free()

obj = bpy.data.objects.new("ProcObj", mesh)
bpy.context.collection.objects.link(obj)
既存のメッシュを編集する
import bmesh

obj = bpy.context.active_object
bm = bmesh.new()
bm.from_mesh(obj.data)

# Operations
bmesh.ops.subdivide_edges(bm, edges=bm.edges[:], cuts=1)
bmesh.ops.translate(bm, vec=(0, 0, 1), verts=bm.verts[:])

# Write back
bm.to_mesh(obj.data)
bm.free()
obj.data.update()

bmesh のパターンとモディファイアー API の詳細については、references/python_api.md を参照してください。

デバッグと最適化

よくある問題
  • 法線が反転して見える:法線を再計算します(Mesh > Normals > Recalculate Outside)
  • 曲面にシェーディングのアーティファクトが発生する:加重法線モディファイアーを追加するか、Auto Smooth を使用します
  • ブーリアンが失敗する:メッシュが多様体(隙間のない状態)であることを確認します。Exact ソルバーを試します。共面の面がないか確認します。
  • モディファイアーが適用されない:オブジェクトモードでないと適用できないモディファイアーがあります。依存関係を確認します。
  • サブディビジョンが細かすぎる:ビューポートのレベルを下げます。Cycles のレンダーにはアダプティブサブディビジョンを使用します。
  • スカルプトのパフォーマンスが低い:マルチレゾのプレビュー レベルを下げます。不要であれば対称を無効にします。Dyntopo の一定ディテールを使用します。
パフォーマンスのヒント
  1. モディファイアースタックを短く保ちます。依存関係グラフの評価ごとに、各モディファイアーが計算されます
  2. Exact ブーリアンソルバーは必要な場合にのみ使用します。FAST のほうが大幅に高速です
  3. アニメーションでは、静的なモディファイアーをアニメーション対象のモディファイアーより前に適用します
  4. ハイポリオブジェクトを複製する代わりに、インスタンス化(Collection Instance)を使用します
  5. 三角形の数が多すぎる場合は、エクスポート前にデシメートします

モディファイアーリファレンス

約 50 種類のモディファイアーの完全なカタログ(型文字列、プロパティ、使用例を含む)については、references/modifier_reference.md を参照してください。

主なカテゴリ:

  • 生成:"Array"、"Boolean"、"Bevel"、"Mirror"、"Solidify"、"Subdivision" を grep します
  • 変形:"Lattice"、"Shrinkwrap"、"Simple Deform"、"Curve" を grep します
  • 物理:"Cloth"、"Fluid"、"Particle" を grep します(blender-physics-simulation スキルも参照してください)

Python API リファレンス

モディファイアーの管理、bmesh 操作、メッシュオペレーター、スカルプトの設定など、Python API の完全なパターンについては、references/python_api.md を参照してください。

コメント