P03: MODIFIERS STACK
Построение не деструктивного стека модификаторов для процедурного моделирования
📝 Промпты ⭐⭐ 10 блоков кода обновлено 2026-10-01
ID: P03 | Кластер: Geometry Basics | Сложность: ⭐⭐ | Теги: #modifiers #non-destructive #stack #procedural
🎯 ЦЕЛЬ
Построение не-деструктивного стека модификаторов для процедурного моделирования
📝 ПРОМПТ (РУС)
Добавь к "[OBJECT_NAME]" стек модификаторов в порядке:
1. [MOD_1] с параметрами {...}
2. [MOD_2] с параметрами {...}
...
Порядок важен: модификаторы применяются сверху вниз.
📝 ПРОМПТ (ENG)
Add modifier stack to "[OBJECT_NAME]" in order:
1. [MOD_1] with params {...}
2. [MOD_2] with params {...}
...
Order matters: modifiers apply top-to-bottom.
🔧 MCP: execute_blender_code
import bpy
obj = bpy.data.objects.get("Base_Mesh")
if not obj:
raise ValueError("Object not found")
# Очистить существующие (опционально)
# obj.modifiers.clear()
# === ПРИМЕР СТЕКА: Procedural Building ===
# 1. BEVEL - сглаживание краёв
bevel = obj.modifiers.new("Bevel_Edges", 'BEVEL')
bevel.width = 0.02
bevel.segments = 3
bevel.profile = 0.5
bevel.limit_method = 'ANGLE'
bevel.angle_limit = 1.0472 # 60°
# 2. SUBSURF - подделение для гладкости
subsurf = obj.modifiers.new("Subdiv_Smooth", 'SUBSURF')
subsurf.levels = 2
subsurf.render_levels = 3
subsurf.subdivision_type = 'CATMULL_CLARK'
# 3. ARRAY - повторение по оси
array = obj.modifiers.new("Array_Floors", 'ARRAY')
array.count = 10
array.use_relative_offset = True
array.relative_offset_displace = (0, 0, 3.5) # высота этажа
# 4. MIRROR - симметрия
mirror = obj.modifiers.new("Mirror_X", 'MIRROR')
mirror.use_axis = (True, False, False)
mirror.use_bisect_axis = (True, False, False)
# 5. DECIMATE - оптимизация для игры
decimate = obj.modifiers.new("Decimate_LOD", 'DECIMATE')
decimate.ratio = 0.3
decimate.decimate_type = 'COLLAPSE'
# 6. BEVEL (второй) - на рёбрах после array
bevel2 = obj.modifiers.new("Bevel_Final", 'BEVEL')
bevel2.width = 0.01
bevel2.segments = 2
print(f"Stack built: {len(obj.modifiers)} modifiers on {obj.name}")
📊 ПОПУЛЯРНЫЕ СТЕКИ
Архитектура: Здание
1. BEVEL (sharp edges) → 2. ARRAY (floors) → 3. MIRROR (symmetry) → 4. SUBSURF (smooth)
Гейм-ассет: Prop
1. BEVEL → 2. WEIGHTED NORMAL (shading) → 3. DECIMATE (LOD) → 4. UV PROJECT (optional)
Персонаж: Cloth
1. SUBSURF → 2. CLOTH SIM → 3. SHRINKWRAP (to body) → 4. SOLIDIFY (thickness)
Хард-сёрфейс: Механизм
1. BEVEL (weight-based) → 2. BOOLEAN (details) → 3. EDGE SPLIT (sharp) → 4. WEIGHTED NORMAL
⚙️ КЛЮЧЕВЫЕ МОДИФИКАТОРЫ И ПАРАМЕТРЫ
| Модификатор | Главные параметры | Когда использовать |
|---|---|---|
| BEVEL | width, segments, profile, limit_method | Всегда для реализма |
| SUBSURF | levels, render_levels, subdivision_type | Органика, плавные формы |
| ARRAY | count, offset (relative/constant/object) | Повторяющиеся элементы |
| MIRROR | axis, bisect, mirror_object | Симметрия |
| BOOLEAN | operation, object, solver | Вычитание/объединение |
| DECIMATE | ratio, type (COLLAPSE/UNSUBDIV/PLANAR) | Оптимизация, LOD |
| SOLIDIFY | thickness, offset, even_thickness | Толщина, ткань |
| SHRINKWRAP | target, wrap_mode, offset | Надевание, проекция |
| DISPLACE | texture, strength, direction | Детализация, ландшафт |
| GEOMETRY_NODES | node_group | Полный процедурализм |
💡 ПРО ТИПЫ
Vertex Groups для контроля
# Ограничить BEVEL только острыми рёбрами
bevel.limit_method = 'WEIGHT'
bevel.vertex_group = "Bevel_Weight"
# Создать группу и назначить веса
vg = obj.vertex_groups.new(name="Bevel_Weight")
# Назначь веса через bmesh или vertex paint
Драйверы на модификаторах
# Анимировать count массива
driver = array.driver_add('count').driver
driver.type = 'SCRIPTED'
var = driver.variables.new()
var.name = "frame"
var.targets[0].id = bpy.data.scenes["Scene"]
var.targets[0].data_path = "frame_current"
driver.expression = "1 + frame / 10"
Применение по необходимости
# Применить только некоторые (для экспорта)
for mod in list(obj.modifiers):
if mod.name.startswith("Decimate") or mod.name.startswith("Bevel_Final"):
bpy.context.view_layer.objects.active = obj
bpy.ops.object.modifier_apply(modifier=mod.name)
⚠️ ПРАВИЛА ПОРЯДКА
| Порядок | Эффект |
|---|---|
| BEVEL → SUBSURF | Фаска поделится, мягкие края |
| SUBSURF → BEVEL | Фаска на уже гладком меше, острее |
| ARRAY → MIRROR | Зеркалится уже массив |
| MIRROR → ARRAY | Массив зеркалится целиком |
| BOOLEAN → SUBSURF | Гладкое результат булева |
| SUBSURF → BOOLEAN | Булев на высокополигональном (медленно) |
🔗 СВЯЗИ
- Прочие в категории «Промпты»: P02: BOOLEAN OPERATIONS, P04: MESH EDITING (BMESH), P07: INSTANCING & ARRAYS, P18: DRIVERS & CONSTRAINTS, P23: GEOMETRY NODES BASICS
- По темам: P25: PROCEDURAL BUILDING GENERATOR, P01: PRIMITIVE CREATION BASICS, P05: UV UNWRAPPING STRATEGIES
- Теги: #clothing, #modeling, #modifiers, #non, #non-destructive, #procedural, #prompt, #stack
Связанные материалы
Подобраны по тегам и категории.