图像与设计
在 Blender 中用 Python 脚本创建和编辑…
当需要通过自然语言或代码在 Blender 中生成/编辑几何体(图元、挤出、倒角、细分、布尔、镜像、阵列等)时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
在 Blender 中用 Python 通用
解决思路
- 每次调用 execute_blender_code 都是全新的 Python 命名空间,必须重新 import 所有模块,并通过 bpy.data.objects['name'] 按名称引用对象。
- 始终用 GEO- 前缀命名对象,绝不要留下 Cube.027 这类默认名;打印结构化输出便于解析结果;把长序列拆成多次调用。
- 对细长/非对称物体(剑刃、刀、瓶子、木板等)区分三个轴:长轴(长度)、宽轴(可见的宽面)、薄轴(窄截面);始终让宽轴朝向相机,例如剑直立、相机在 -Y 方向时,把剑刃绕 Z 旋转 90°,使局部 Y(宽轴)指向世界 X。
- 多部件拼接时让相邻图元在接缝处深度重叠 5–15mm(例如剑柄向护手内延伸 1.5cm、向剑首内延伸 1cm),使接缝线隐藏在较大部件内部,避免可见缝隙。
- 对圆柱、球体等圆润部件调用 bpy.ops.object.shade_smooth() 平滑着色;立方体和倒角硬表面可保持平面着色(Blender 5.x 已移除 Mesh.use_auto_smooth,改用基于修改器或逐面标记的平滑)。
- 对同材质部件做真正无缝拼接时,用 Boolean Union 合并为一个网格(仅当两部件材质相同时可行)。
- 剑尖等收尖处理:不要只把顶部顶点缩放到零,而要把顶部所有顶点先压到中心线(v.co.x=0, v.co.y=0),再用 bpy.ops.mesh.remove_doubles(threshold=0.001) 合并为真正的单点,否则会留下退化拓扑。
- 添加图元:用 bpy.ops.mesh.primitive_cube_add(size=2.0, location=(0,0,1)) 等,然后 obj = bpy.context.active_object; obj.name = 'GEO-base_box',可替换为 _plane_、_uv_sphere_、_ico_sphere_、_cylinder_、_cone_、_torus_、_monkey_。
- 硬表面堆栈:先加 Bevel 修改器(width=0.02、segments=3、limit_method='ANGLE'、angle_limit=0.523599),再加 Subdivision Surface(levels=2、render_levels=3),最后 shade_smooth();Bevel 必须在 SubSurf 之前,否则出现夹紧伪影。
- 编辑模式操作:bpy.ops.object.mode_set(mode='EDIT') 后,用 bpy.ops.mesh.select_all(action='SELECT')、bpy.ops.mesh.extrude_region_move(TRANSFORM_OT_translate={'value':(0,0,1.0)})、bpy.ops.mesh.inset(thickness=0.1, depth=0)、bpy.ops.mesh.loopcut_slide(MESH_OT_loopcut={'number_cuts':1,'edge_index':0}, TRANSFORM_OT_edge_slide={'value':0.0}),完成后切回 OBJECT 模式。
- 布尔切割:给目标对象加 Boolean 修改器,operation='DIFFERENCE'、object=cutter、solver='EXACT',然后 bpy.ops.object.modifier_apply(modifier=mod.name),并把 cutter 的 hide_viewport 和 hide_render 设为 True。
- 镜像建模:加 Mirror 修改器,use_axis[0]=True、use_clip=True、use_mirror_merge=True、merge_threshold=0.001,并把 Mirror 放在堆栈最前面(Bevel/SubSurf 之前)。
- 沿曲线阵列:创建基础单元(如 GEO-bead),加 Array 修改器(fit_type='FIT_CURVE'、curve=path、relative_offset_displace=(1.0,0,0)),再加 Curve 修改器(object=path、deform_axis='POS_X')。
- 快速 block-out:连续调用多个 primitive_*_add 创建地板、主体、背景道具等,并分别命名(如 GEO-floor、GEO-subject、GEO-prop_pillar)。
- 曲线转网格或布尔后清理:进入编辑模式,select_all(action='SELECT'),执行 bpy.ops.mesh.remove_doubles(threshold=0.0001) 和 bpy.ops.mesh.normals_make_consistent(inside=False),回到对象模式后 shade_smooth()。
- 牢记修改器堆栈顺序:Mirror → Array → Solidify → Bevel → Subdivision Surface →(必要时 Boolean);顺序错误会产生伪影,最常见错误是把 SubSurf 放在 Bevel 之前。
- 常见问题修复:默认立方体感→加 Bevel(0.02m,3段)+SubSurf;圆形状尖角→Bevel 在 SubSurf 之前;渲染黑面→重算法线 normals_make_consistent;布尔产生 n-gon→应用布尔后进编辑模式修成四边形再 SubSurf;对称破坏→用 Mirror 修改器而非复制翻转;隐藏内部面→Mesh → Clean Up → Delete Loose。
- 当配方不匹配需求(需要 bmesh 级精度、自定义操作)、拓扑要求更严(动画就绪、游戏 LOD)、性能敏感(foreach_set、批量操作)或用户引用配方外操作符时,加载 references/overview.md。
适用边界 · 注意事项
- 线框绘图转 3D 模型:应使用 wireframe-to-3d 技能。
- 雕刻笔触:Blender 雕刻模式是手势驱动的,无法很好地由文本驱动。
- 沿路径扫掠/放样/曲线驱动形状:见 wireframe-to-3d/references/blender-patterns.md。
- 材质、灯光、渲染:应转向相应技能。