Material Maker 的 sdCircleRepeat 节点:用 SDF 实现圆周重复图案生成
发布时间:2026/10/12 8:23:11 锦皓数字建站

桌面应用图形学3D渲染图像处理【免费下载链接】material-makerA procedural textures authoring and 3D model painting tool based on the Godot game engine项目地址https://gitcode.com/gh_mirrors/ma/material-maker点击查看免费下载导读本文围绕 Material Maker 2D 有向距离函数SDF节点体系中的sdCircleRepeat圆周重复算子展开讲解它如何将任意输入 SDF 形状沿圆周等角复制从而快速生成花瓣、齿轮、轮辐、雪花与环形装饰等重复图案。读完本文你将掌握该节点的输入输出约定、Count 与 Variations 两个核心参数的行为与取值范围、它在编辑器中的位置与调用链以及底层 shader 的实现原理可直接在 Material Maker 中动手搭建可复用的循环图案节点图。节点定位Simple / SDF / Operators 家族中的循环算子sdCircleRepeat 是 Material Maker 的 2D SDF 算子之一官方文档描述为该节点通过沿圆周重复输入生成一张有向距离图像原始文档。它属于 Simple / SDF 节点体系 的 Operators算子分组与 sdBoolean、sdSmoothBoolean、sdRoundedShape、sdAnnularShape、sdMorph、sdRepeat、sdMaskToSDF 并列。SDF 节点的整体工作方式遵循基础形状 算子组合 sdShow 输出的流程用 sdCircle、sdBox、sdLine、sdPolygon 等基础形状节点定义几何用布尔、变形、重复类算子组合出复杂图案最后通过sdShow节点将 SDF 数值渲染为灰度图像节点体系说明。sdCircleRepeat 是其中的重复类算子其定位可从库文件 library/base.json 中确认它在节点树的Simple/SDF/Operators/sdCircle Repeat位置注册显示名为 sdCircle Repeat注册条目。同时仓库还提供了同名的 3D 版本 CircleRepeat 节点文档本文只讨论 2D 版本。节点核心元数据记录在 addons/material_maker/nodes/sdcirclerepeat.mmg 中这是一个 JSON 格式的节点定义文件包含 shader_modelshader 代码模板、输入、输出与参数描述是理解该节点的第一手依据。输入与输出约定输入单个 SDF 输入sdCircleRepeat 只接受一个输入类型为sdf2d2D 有向距离函数。节点定义中该输入的声明如下节点定义参数名in类型sdf2d说明输入形状定义为有向距离函数longdesc: The input shape, defined as a signed distance function默认值0.0任何能输出 sdf2d 的节点都可以直接连入例如 sdCircle、sdBox、sdLine、sdPolygon、sdStar5 等基础形状也可以连入其他算子节点的输出实现先组合、再圆周重复的嵌套图案。输出重复后的 SDF输出类型同样为sdf2d语义是重复操作生成的形状。在 shader 模型中输出值由输入值$(name_uv)_in直接承接节点定义也就是说输出的是一整圈重复后的新 SDF 值可直接继续接入下游的布尔、变形、平滑算子最终交给 sdShow 渲染。注意输出仍是 SDF不是图像。要看到实际图案必须再接一个 sdShow 节点或者经由后续 SDF 算子后再输出这与所有 2D SDF 节点一致体系说明。参数详解Count 与 Variations节点定义了两个参数参数声明参数内部名称类型默认值取值范围说明Count计数cfloat41 ~ 32步长 1输入形状沿圆周重复的次数Variations变体variationsbooleanfalsetrue / false是否对每个副本采样随机变体Count圆周上的副本数量Count控制输入形状在圆周上的重复份数。从节点定义看它声明为type: float、step: 1、min: 1、max: 32、default: 4即整数值 132默认 4。在 base.json 的默认实例 中该节点创建时的初始参数被设为c: 6.06 份副本而 sdcirclerepeat.mmg 内的默认 shader 参数同样是c: 6。也就是说实际在编辑器里拖入该节点时默认会出现 6 个副本与文档配图、库默认实例一致手动调整参数范围是 132。Count 在 shader 中直接参与角度切分计算6.28318530718/count把整圆2π均分为 count 份每一份的扇形角度为 2π/count。副本数越大每个副本的扇形越窄、图案越密集副本数越小如 1、2重复越少接近原始形状。Variations副本的随机变体Variations是一个布尔开关勾选后会对输入启用变体采样使圆周上每个副本的输入形状出现随机的形态差异例如随机缩放、旋转或形状变化从而让重复图案看起来更自然、更有手工感避免完全机械复制。在 shader 模型中变体开关对应的代码是shader 代码float $(name_uv)_ids $variations ? rand(vec2((floor(fract((0.15915494309*atan($uv.x - 0.5, $uv.y - 0.5) - 0.5 / $c)) * $c) / $c))) $seed : 0.0; float $(name_uv)_in $in.variation(circle_repeat_transform_2d($uv-vec2(0.5), $c)vec2(0.5), $(name_uv)_ids);当variations为 true 时会为每个扇区计算一个随机 id_ids并将该 id 作为变体种子传入输入函数$in.variation(...)。这依赖 Material Maker 引擎的变体机制所有节点的实例函数都会被注入float _seed_variation_, vec4 _controlled_variation_两个变体参数gen_shader.gd而对带.variation后缀的输入调用生成器会按参数个数决定是追加种子变体 受控变体还是只追加受控变体gen_shader.gd。此外节点还带有一个seed_int种子字段节点定义用于固定变体随机序列便于复现相同的变体效果。种子在引擎侧通过seed_int / MAX_SEED归一化参与随机采样gen_base.gd。提示只有当输入形状本身支持变体即其 shader 实现响应 variation 采样时Variations 开关才有实际效果。对于简单的基础形状变体主要体现为随机的缩放/形变组合而像 sdNgon 这类由多个子算子组合出的形状变体效果会通过其输入链逐级传递见下文原理小节。工作原理圆上均匀分布的坐标变换sdCircleRepeat 的实质是一个周期性的旋转-折叠坐标变换把 UV 坐标围绕圆心逐扇区折叠到基准扇区使得同一份输入形状在每个扇区中被重复渲染。其核心全局函数定义在节点 shader 的global段中全局函数vec2 circle_repeat_transform_2d(vec2 p, float count) { float r 6.28318530718/count; // 每份的角跨度2π / count float pa atan(p.x, p.y); // 当前像素的极角 float a mod(pa0.5*r, r)-0.5*r; // 折叠到以 0 为中心的基准角区间 [-r/2, r/2] vec2 rv; float c cos(a-pa); // 旋转补偿角 float s sin(a-pa); rv.x p.x*cp.y*s; // 旋转坐标 rv.y -p.x*sp.y*c; return rv; }该函数的计算过程可拆解为四步计算扇区角宽r 2π / count即每个副本占据的角度求像素极角pa atan(p.x, p.y)得到当前采样点相对圆心的角度折叠到基准扇区a mod(pa r/2, r) - r/2把任意角度映射到[-r/2, r/2]的基准区间内旋转补偿构造旋转矩阵[[cos(a-pa), sin(a-pa)], [-sin(a-pa), cos(a-pa)]]把采样点绕圆心旋转回基准扇区对应的位置。随后节点主代码执行坐标平移并对输入采样float $(name_uv)_in $in.variation(circle_repeat_transform_2d($uv-vec2(0.5), $c)vec2(0.5), $(name_uv)_ids);即先把 UV 平移到以圆心为原点减去(0.5, 0.5)经过折叠变换后再平移回纹理坐标空间加回(0.5, 0.5)最后对输入 SDF 采样。由于每个扇区的采样点都被折叠到同一基准扇区输入形状就在圆周上被等角复制 count 份。值得说明的是这一围绕圆心重复的思想并不仅用于此一个节点SDF 构建器中的sdNgon 正多边形形状正是旋转 sdcirclerepeat sdngon三个算子组合的产物ngon.gd可见圆重复是构建对称几何的基础能力。圆形重复相当于按角折叠与 sdRepeat 的按距离重复矩形网格重复形成互补两者分别适用于极坐标对称与直角网格两类图案。在编辑器中的使用方式在 Material Maker 中新建/打开一个 2D SDF 材质图后按以下步骤使用 sdCircleRepeat添加节点在节点树Library 面板中依次展开Simple / SDF / Operators双击sdCircle Repeat或使用 Add Node 弹窗搜索 sdCircle Repeat节点即以默认参数Count6、Variations 关闭加入画布库注册条目。连接输入把一个基础 SDF 形状节点如 sdCircle、sdBox、sdPolygon、sdStar5的输出连接到 sdCircleRepeat 的输入端口sdf2d。注意输入形状应位于靠近圆心的位置这样圆周重复后副本才会分布在圆周上形成环形图案若输入形状远离圆心副本会围成半径更大的环形。连接输出把 sdCircleRepeat 的输出接到sdShow节点的输入最终渲染为灰度图预览SDF 体系说明。也可继续接入 sdBoolean、sdSmoothBoolean 等其他算子后再输出。调整参数选中 sdCircleRepeat 节点在参数面板中修改Count改为 8、12、16 等观察副本密度变化最小 1不重复最大 32Variations勾选后每个副本将产生随机形态差异配合节点的种子seed可固定随机效果。预览与导出在 2D 预览面板查看结果满意后经输出节点导出为纹理。如果你希望拷贝一个与文档一致的参考实现可以在仓库 examples 目录 中搜索使用到该节点的示例材质如 doc_tools、skulls 等 ptex 工程文件用 Material Maker 打开即可查看完整节点图。与 3D CircleRepeat 的对照仓库还包含功能对等的 3D 版本CircleRepeat节点3D 文档其输入/输出均为sdf3d类型参数同样是 Count 与 Variations。两者唯一显著的差异是2D 版本直接对平面坐标做圆周折叠输入形状可位于任意半径处3D 版本要求源对象必须沿正 Y 方向偏离中心偏移The source object must be offset in the positive Y direction from the center因为 3D 场景中圆形重复是绕 Y 轴旋转复制输入对象需要先偏移到旋转半径上。因此在 3D 节点图中使用 CircleRepeat 时记得先用 Translate 类变换把形状沿 Y 偏移否则重复结果会挤在圆心处。小结与实战建议sdCircleRepeat 接受单个sdf2d输入输出圆周重复后的sdf2d必须经 sdShow 等节点渲染为可见图像Count内部名cfloat 型132默认 6节点定义默认 4库实例与 shader 默认 6控制圆周副本数量Variations布尔开关默认关闭开启后利用引擎的_seed_variation_变体机制为每个副本注入随机种子产生差异化副本节点自带seed_int可固定随机序列底层通过circle_repeat_transform_2d()把 UV 逐扇区折叠到基准角区间再采样输入实现一入多出的圆周复制与 sdRepeat直角网格重复配合几乎可以覆盖对称类程序化纹理的绝大多数重复需求想生成齿轮、轮辐、花瓣、雪花或环形装饰只需换用不同输入形状并调节 Count 与 Variations 即可。参考路径节点文档原文material_maker/doc/node_simple_sdf_operators_sdcirclerepeat.rstSDF 节点体系总览material_maker/doc/node_simple_sdf.rst节点实现定义addons/material_maker/nodes/sdcirclerepeat.mmg库注册与默认实例material_maker/library/base.json变体机制实现addons/material_maker/engine/nodes/gen_shader.gd种子处理addons/material_maker/engine/nodes/gen_base.gd3D 对应版本文档material_maker/doc/node_3d_sdf_operators_circlerepeat.rst赞分享桌面应用图形学3D渲染图像处理【免费下载链接】material-makerA procedural textures authoring and 3D model painting tool based on the Godot game engine项目地址https://gitcode.com/gh_mirrors/ma/material-maker点击查看免费下载相关推荐Material Maker 的 CircleRepeat 节点3D SDF 圆形重复运算完整解析Material Maker 的 CircleRepeat 节点3D SDF 圆形重复运算完整解析 CircleRepeat 是 Material Maker桌面应用图形学3D渲染图像处理Material Maker 3D SDF 节点实战Box 圆角盒子形状节点完全指南Material Maker 3D SDF 节点实战Box 圆角盒子形状节点完全指南 Box 节点是 Material Maker 中 3D 有符号距离函数桌面应用图形学3D渲染图像处理Material Maker Solid Angle 节点用 SDF 精确生成立体角几何体Material Maker Solid Angle 节点用 SDF 精确生成立体角几何体 Solid Angle立体角节点是 Material Make桌面应用图形学3D渲染图像处理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。