关于 blender-geometry-nodes
面向 Blender Geometry Nodes 的技能,通过简洁的 JSON 规格构建和评估节点树,并指导节点查询、程序化建模、修改器输入及属性与实例的性能管理。
主要功能
- 01通过 JSON 规格构建节点树
- 02查询节点插槽与选项
- 03配置字段、域和属性
- 04创建模拟区与重复区
- 05评估几何体和节点警告
适用场景
- 01创建程序化散布设置
- 02制作可复用的修改器驱动资产
- 03生成迭代或模拟几何体
- 04为导出准备几何体
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ el4cteo/ blender-skills --skill blender-geometry-nodes安装后在 Claude Code 中输入/blender-geometry-nodes确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/recipes.mdscripts/_bpyx.pygn_builder.py详细介绍
几何节点
执行模型位于 blender-core 中。使用 scripts/gn_builder.py 构建节点树;它采用紧凑的 JSON 规格,开销远低于原始 bpy。请先查明准确的插口名称,因为它们会随版本变化:
scripts/gn_builder.py -- --describe GeometryNodeDistributePointsOnFaces GeometryNodeInstanceOnPoints
scripts/gn_builder.py -- --spec scatter.json --apply Ground --set Density=20 Seed=3 Mask=@paint_mask
--set Name=@attr 会将命名属性作为修改器输入。结果会报告计算后的顶点/面数量和节点警告。规格格式见脚本文档字符串;完整示例见 references/recipes.md。
核心概念(务必掌握,否则一切都无法运行)
- 几何体通过具有圆形形状的插口从左向右流动。字段(菱形插口)是函数,会在使用它们的节点上按元素计算,并遵循该节点的域/上下文。
- 域:点、边、面、面角、样条线、实例、图层。
Capture Attribute会在图表中的某个位置冻结字段(在拓扑变化之前),而Evaluate on Domain会在不同域之间转换。 - 属性:内置属性(
position、normal、sharp_face、material_index、UVMap……),以及通过Store Named Attribute存储的命名属性。命名属性会在修改器运行后保留。这是 GN 数据传递到着色器(Attribute 节点)和导出器(glTFexport_attributes会导出名称以_开头的属性)的方式。 - 实例开销很低(一个网格、多个变换)。只有在必须编辑每个实例的几何体或导出单个网格时,才使用 Realize Instances。尽可能晚地实现实例化。
- 节点组接口中公开的输入会成为修改器输入(5.2:
mod.properties.inputs.<identifier>.value)。面板可将输入分组,菜单插口则提供枚举选项。
区域与高级类型
| 功能 | 节点 | 用途 |
|---|---|---|
| 仿真区域 | GeometryNodeSimulationInput/Output(成对使用) | 逐帧状态:生长、粒子、侵蚀;烘焙后可保留 |
| 重复区域 | GeometryNodeRepeatInput/Output | 迭代 N 次(L 系统、松弛、递归细分) |
| 对每个元素执行 | GeometryNodeForeachGeometryElementInput/Output | 对每个元素运行子图(例如每个建筑地块、每个岛) |
| 闭包/Bundle(5.0+) | NodeClosureInput/Output、NodeCombineBundle/NodeSeparateBundle、Evaluate Closure | 传递函数/结构化数据;创建可复用的“策略”节点组 |
| 列表(5.2) | GeometryNodeFieldToList、ListGetItem、ListLength、SortList、FilterList | 真正的数组,而非字段 |
| 网格/SDF(4.x–5.x) | MeshToSDFGrid、SDFGridBoolean、SDFGridFillet、SDFGridOffset、GridToMesh | 平滑布尔运算、重网格化、圆角、体素效果 |
| 物理(5.2,实验性) | GeometryNodeXPBDSolver + bundles | 基于节点的布料/毛发,见 blender-simulation |
| 操纵器 | GizmoLinear/Dial/Transform | 用于输入的视口手柄 |
区域需要调用 input.pair_with_output(output)(规格键 pairs),并在输出节点上添加条目(repeat_items、state_items 等;规格中的第 4 个节点字段)。 |
操作步骤
- 勾勒数据流:源几何体 → 选择/遮罩(字段)→ 生成/实例化 → 变换/随机化 → 实现实例/合并 → 设置材质/着色 → 输出。
- 对要使用的每种节点类型运行
--describe,然后编写规格并构建。检查node_warnings和计算后的数量。 - 只公开有意义的输入(密度、种子、缩放范围、材质),并设置最小值/最大值。
- 查看效果(
look);如果结果将要导出(已实现的几何体),请检查blender-asset-qa;对于实例数量和三角形数,请检查blender-game-optimization。 - 交付:要么保持程序化形式(.blend/资产库),要么应用修改器/使用
visual_geometry_to_objects供导出器使用。
规则
- 随机性:始终公开一个
Seed,并将Random Value与 ID/Index 字段配合使用,以便计数变化时结果仍保持稳定。 - 与比例无关的设置使用
Object Info(Relative)和实际单位。应用对象缩放,或明确读取缩放值。 - 材质:在节点树中使用
Set Material。材质必须存在于文件中,实例会保留各自的材质。 - 着色:GN 输出会丢失自动平滑设置,除非添加
Set Shade Smooth+(5.x)Smooth by Angle基础节点组,或存储sharp_edge。 - UV:基元通过其 UV 输出生成
UVMap。使用Store Named Attribute(Face Corner、2D Vector,名称为UVMap)存储,否则它会被丢弃。 - 性能:避免实现数百万个实例;散布时优先使用点 + 实例;谨慎使用
Merge by Distance;模拟区域需要烘焙才能播放/导出(object.geometry_node_bake_single或修改器bakes)。 - 节点工具(
ng.is_tool = True、is_mode_edit等)会将节点组转换为 3D 视图菜单中的操作符,用于编辑工作流。
易错点
- 5.2:
mod["Socket_2"]不再可用。请使用getattr(mod.properties.inputs, ident).value;对于属性输入,使用.type = "ATTRIBUTE"+.attribute_name。Compare 和 Random Value 插槽已更改:Random Value 现在有由data_type决定类型的单组动态Min/Max/Value插槽。按名称连接;不确定时使用--describe。 - 当前模式/数据类型下被禁用的插槽仍会以相同名称保留在
node.inputs中。构建器会选择已启用的插槽。请先设置data_type/mode属性(构建器会在连接前设置属性)。 nt.interface.new_socket(...)是 4.0+ API(ng.inputs.new已移除)。- 导出器会读取求值后的网格。实例会成为 glTF 实例(
export_gpu_instances),或在导出时被实现。
评论
支持 Markdown