Material Maker Runes 符文节点完全指南:原理、参数与实战用法
桌面应用图形学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点击查看免费下载Runes 是 Material Maker 内置程序化材质生成节点之一它能在极简的“零输入、单灰度输出”接口下通过 GLSL 签名距离函数与哈希随机数生成布满随机符文的网格图案。本文以 Runes 节点官方文档 为主线结合 runes.mmg 节点定义 的完整源码、种子序列化实现与内置 Shadertoy 算法逐层拆解帮助你彻底掌握该节点的参数语义、底层生成原理以及将其接入自定义材质图的实际方法。Runes 节点无输入端、单一灰度输出仅暴露 Size X / Size Y 两个参数Size X Size Y 4 时的符文网格效果每个格子内由 4 条受约束的随机笔画构成一个符文Runes 节点概述Runes符文节点位于 Material Maker 的 Pattern图案分类下节点类型标识为runes在官方材质库 base.json 中登记于Pattern/Runes树项默认参数为columns: 4.0、rows: 4.0。本地化翻译文件中见 zh.csv将其描述为“生成一个充满随机符文的网格Generates a grid filled with random runes”节点短描述为 “Simple runes”简易的符文。需要特别说明的是该节点的算法并非 Material Maker 原创其文档明确注明算法基于 Otavio Good 编写的 Shadertoy 作品https://www.shadertoy.com/view/MsXSRn。这意味着节点本身是一份对该公开着色器算法的移植封装Material Maker 在此基础上将其标准化为可拖拽、可参数化、可参与材质图数据流的 GraphNode。输入与输出从 runes.mmg 的定义看输入Inputs节点不接收任何输入端口。它是典型的过程化纹理源头节点与 Noise、Gradient 等节点一样位于材质图的数据源头。输出Outputs仅有一个类型为f标量浮点/灰度的输出端口短描述为 Output长描述为 A grayscale image showing random runes.显示随机符文的灰度图像。输出表达式为Rune(vec2($columns, $rows)*$uv, float($seed))其中$columns、$rows是用户设置的网格尺寸$uv为当前片元归一化坐标$seed由节点的随机种子决定。展开后vec2(columns, rows) * uv把每个片元映射到对应符文格子内的 0..1 局部坐标随后交给Rune()函数在格子内绘制笔画。由于输出是单通道灰度值它天然适合作为高度Height、凹凸Bump、Alpha 遮罩、发光强度等单通道输入也可通过后续的颜色节点如 Gradient、Colorize映射为彩色图案。参数详解文档指出 Runes 节点仅接受两个参数Size X与Size Y用于控制输出纹理中图案符文的数量。结合节点源码两者的真实语义如下参数名内部字段含义默认值取值范围步长Size Xcolumns网格列数每行横向排布的符文数42 321Size Yrows网格行数每列纵向堆叠的符文数42 321在 runes.mmg 的参数定义中columns与rows均为float类型、控件为None即由节点界面直接以数值框暴露最小值 2、最大值 32、步长 1。默认值 4 意味着默认输出一个 4×4 的符文阵列共 16 个符文。两个参数直接作用于输出表达式中的坐标缩放系数vec2($columns, $rows)*$uv取值越大单个符文在屏幕上的占比越小、网格越密集。min2的下限保证了每格至少能容纳完整的笔画约束逻辑max32的上限则避免单格过小而出现混叠。除两个可见参数外每个节点实例还拥有一个随机种子Seed它不显示为普通参数而是通过节点属性面板的种子控件可锁定/解锁控制对应.mmg文件中的seed_int字段。种子决定了每个格子中随机笔画的位置与形状分布。底层生成原理Rune 函数的实现剖析Runes 节点的核心逻辑全部封装在runes.mmg的shader_model.global代码块中由Rune()主函数与ThickLine()辅助函数组成并引用了sdline2内置模块提供线段距离函数。整个流程可分解为四层1. 网格划分与种子注入float Rune(vec2 uv, float s) { float finalLine 0.0; vec2 seed floor(uv)-rand2(vec2(s)); uv fract(uv);floor(uv)取出当前所在格子的整数坐标fract(uv)得到格子内的局部坐标rand2(vec2(s))定义于 glsl_defs.tmpl采用fract(cos(mod(dot(...))) * 43758.5)形式的哈希噪声将标量种子扩展为一个 2D 随机偏移使不同格子的随机采样互不重复。2. 四次随机笔画Stroke采样for (int i 0; i 4; i) { vec2 posA rand2(floor(seed0.5)); vec2 posB rand2(floor(seed1.5)); seed 2.0; posA fract(posA * 128.0); posB fract(posB * 128.0);每个符文固定由 4 条笔画构成。两端点posA、posB由递增的种子序列哈希得到再通过fract(pos * 128.0)把随机值扩散到 0..1 区间以获得分布更均匀的随机端点。3. 笔画端点约束四边触框if (i 0) posA.y 0.0; if (i 1) posA.x 0.999; if (i 2) posA.x 0.0; if (i 3) posA.y 0.999;这是让符文“像文字”的关键设计四条笔画的起点被分别钉在格子四条边的中点上下、右、左、上保证每个符文都与自身格子的四边相触从而形成具有结构感的符号形态而非随意散落的线段。4. 端点网格吸附与粗笔画绘制vec2 snaps vec2(2.0, 3.0); posA (floor(posA * snaps) 0.5) / snaps; posB (floor(posB * snaps) 0.5) / snaps; finalLine max(finalLine, ThickLine(uv, posA, posB 0.001, 20.0));随机端点被吸附到 2×3 的六宫格交点上0.5使落点居于格心避免出现过于凌乱的斜线ThickLine借助sdLine签名距离函数将线段扩展为粗笔画float ThickLine(vec2 uv, vec2 posA, vec2 posB, float radiusInv) { return clamp(1.1-20.0*sdLine(uv, posA, posB).x, 0.0, 1.0); }sdLine定义于 sdline2.mmg计算片元到线段的最短距离1.1 - 20.0 * dist经clamp(0.0, 1.0)后形成边缘平滑的粗笔画对 4 条笔画结果取max叠加posB 0.001的微小偏移则用于规避退化线段点在部分 GPU 上的除零错误。代码注释中亦指出退化线段纯点不进行跨 GPU 安全处理。最终所有格子的灰度值汇总输出形成整幅符文网格纹理。随机种子的持久化与可复现性符文的具体形态完全由种子决定理解其持久化机制有助于你保存、复制与复现同一图案。节点引擎基类 gen_base.gd 中定义了完整的序列化逻辑MAX_SEED 4294967296即 2³²见 gen_base.gd序列化时若节点种子值落在 0.01.0 区间则写入seed_int int(round(seed_value * MAX_SEED))反序列化时读取seed_int并换算回seed_value float(data.seed_int) / MAX_SEED。也就是说.mmg工程文件中的seed_int是一个 32 位整数种子与引擎内部的归一化浮点种子一一对应。当你复制、保存或分享包含 Runes 节点的材质工程时只要种子未锁定为随机生成的符文图案即可完全复现。在 runes.mmg 中默认的seed_int: 0对应种子值 0即所有新建节点共享同一套“零号”符文布局若希望每个节点产生不同图案可在节点属性中解锁并随机化种子。实战用法与材质图接入Runes 节点“零输入 单灰度输出”的特性使其非常适合作为材质图的前端源头。以下是几个可直接套用的组合思路均可依据上述源码机制验证其可行性凹凸细节Bump/Height将 Runes 输出接入 Displacement、Normal Map 或 Bevel 等需要高度场输入的节点可为表面注入规则的符文纹理凹凸。彩色化把灰度输出接入 Gradient渐变或 Colorize着色节点将黑白符文映射为任意配色配合 Tonality 节点可进一步拉伸对比度、分离明暗区域。遮罩/选区作为 Mask 输入参与 Blend 或 Select 混合让符文图案以半透明遮罩的形式叠加在其它材质之上。与变换类节点组合通过 Scale、Rotate、Tile 等变换节点调整符文网格的疏密、朝向再结合 Warp、Slope 等节点做二次扰动即可从固定网格演变为风格化扭曲的符文肌理。由于输出是逐格独立的随机图案当columns、rows取较小值如 2×2时符文形体清晰可辨适合做主体图案取较大值如 16×16时则趋向于高密度装饰性纹理适合做远景细节。相关变体I Ching 节点与 Runes 同属 Pattern/Runes 分类的还有I Ching易经节点类型iching见 base.json其官方文档 node_pattern_runes_i_ching.rst 结构与 Runes 完全一致同样无输入、输出单一灰度纹理仅提供 Size X / Size Y 两个参数控制卦象数量默认 2×2。从代码结构看它是 Runes 算法的姊妹实现——将随机笔画替换为易经六爻卦象符号的绘制逻辑。两节点常被归入同一树项目录在材质库面板的Pattern/Runes下相邻展示见 nodes_pattern.rst。小结Runes 节点用不到 50 行 GLSL 实现了兼具随机性与结构感的符文生成rand2哈希保证分布随机、四边触框与 2×3 网格吸附保证字形规整、sdLine签名距离保证笔画平滑。掌握其columns/rows参数语义、种子持久化机制2³² 整数种子 ↔ 归一化浮点种子以及灰度输出在材质图中的接入方式即可在 Material Maker 中自由构建从墙面雕纹、法阵纹理到异界符号肌理等各类符文风格材质。延伸阅读Runes 官方文档 · 节点源码 runes.mmg · 线段距离函数 sdline2.mmg · 种子序列化实现 gen_base.gd · Pattern 节点索引赞分享桌面应用图形学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 3D 纹理量化TEX3D Quantize节点完全指南原理、参数与实战Material Maker 3D 纹理量化TEX3D Quantize节点完全指南原理、参数与实战 Quantize量化节点 是 Material桌面应用图形学3D渲染图像处理Material Maker 3D SDF 链环节点Link Node完全指南原理、参数与实战Material Maker 3D SDF 链环节点Link Node完全指南原理、参数与实战 Link链环节点 是 Material Maker 中桌面应用图形学3D渲染图像处理Material Maker 的 Octahedron八面体SDF 节点原理、参数与实战用法Material Maker 的 Octahedron八面体SDF 节点原理、参数与实战用法 本篇技术指南以 Material Maker 官方文档中 O桌面应用图形学3D渲染图像处理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考