
桌面应用图形学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 纹理管线里的Smooth MinMaxTEX3D Smooth MinMax节点它接收两路 3D 灰度纹理输入执行平滑最小smooth minimum或平滑最大smooth maximum运算输出一张灰度 3D 纹理。读完本篇你将掌握该节点的全部输入/输出类型与五个参数运算类型、默认值、平滑度、钳制开关的取值含义并理解其底层 GLSL 生成机制——包括smin/smax函数如何通过includes机制复用、k参数如何决定过渡区宽窄从而在材质图中用它把多张 3D 灰度图柔和地混合或裁剪。一、节点定位3D 纹理管线中的数学混合器Material Maker 的 3D 纹理用于给“由高度图定义的对象”上色高度图可以来自普通灰度图像也可以来自用有符号距离函数SDF构建的 3D 场景。无论哪种来源都需要Apply节点来定义查询 3D 纹理所用的三维坐标而Select节点则可按颜色索引选择不同的 3D 纹理。3D textures 总览文档 列出的 3D 纹理节点族中Smooth MinMax 是承担“数学混合”角色的成员之一它与 Blend、Math、Tonality、Tones 等节点共同构成 3D 灰度纹理的加工链。节点定义文件位于 tex3d_smooth_minmax.mmg节点显示名为TEX3D Smooth MinMax其简短描述为“Performs a smooth minimum/maximum math operation between its inputs”。该节点在内置库 base.json 中注册tex3d_smooth_minmax条目因此打开节点搜索面板即可直接检索到它。二、输入与输出两路可选的 3D 灰度纹理输入节点接受两个3D 灰度纹理grayscale 3D texture输入端口分别标注为 AA 端口带组前缀2:与 B。两个输入都是可选的——当某个输入未连线时引擎会用对应的“默认值”参数代替该路输入参与运算。输出单一 3D 灰度纹理输出内容即运算结果。端口类型在 io_types.mmt 中统一定义。tex3d_gsGrayscale TEX3D类型的关键属性如下GLSL 底层类型为float求值参数为vec4 p即对每个体素坐标p求值区别于 2D 节点使用的vec2 uvslot_type为 3表示 3D 纹理端口的插槽类别与彩色tex3dvec3类型之间内置了自动转换tex3d_gs → tex3d为vec3($(value))灰度复制成三通道tex3d → tex3d_gs为(dot($(value), vec3(1.0))/3.0)三通道均值转灰度。这意味着即便上游输出的是彩色 3D 纹理连到该节点时引擎也会按通道均值自动降为灰度不需要手动插入转换节点。三、参数详解依据 tex3d_smooth_minmax.mmg 中的parameters定义节点共暴露 5 个参数参数类型取值范围默认值作用opOperationenumMin/Max对应smin/smaxMax枚举值 1.0选择执行平滑最小还是平滑最大运算default_in1Afloat0.0 ~ 1.0步进 0.010.0A 输入未连线时使用的默认灰度值default_in2Bfloat0.0 ~ 1.0步进 0.010.0B 输入未连线时使用的默认灰度值kSmoothnessfloat0.0 ~ 1.0步进 0.010.0平滑度决定 min/max 过渡区的宽窄clampClampbooleantrue / falsefalse勾选后把结果钳制到 [0, 1]三点使用提示默认值的作用域default_in1/default_in2只在对应输入端口“未连线”时生效一旦端口接上了纹理默认值即被忽略。枚举默认值op的声明默认值为 1.0对应枚举序中的第二项Max注意新建节点实例在 mmg 文件 顶部的parameters快照里记录为op: 0.0Min实际以参数面板的枚举声明为准。k 0 的边界行为从公式看见下节k是过渡区的“半径”k越小过渡越硬、结果越接近硬min/max。但公式中k出现在分母上k 0时除法行为取决于 GLSL 实现从源码结构看作者将其默认值设为 0实践中若需要“近似硬 min/max”的效果建议给k一个很小的非零值如 0.005以获得确定性结果。四、着色器生成机制代码模板 预定义函数复用该节点是type: shader类节点其shader_model.code只有两行模板float $(name_uv)_clamp_false $op($in1($uv), $in2($uv), $k); float $(name_uv)_clamp_true clamp($(name_uv)_clamp_false, 0.0, 1.0);各占位符的含义$(name_uv)由引擎为该节点生成的唯一变量前缀避免多个同类节点间的变量名冲突$op由op参数解析为smin或smax函数名$in1($uv)/$in2($uv)输入端口表达式若端口未连线则替换为对应的default_in*数值$k平滑度参数值。输出端口表达式为$(name_uv)_clamp_$clamp——引擎根据clamp布尔参数的当前取值把$clamp替换成false或true从而在“原始结果”和“钳制到 [0,1] 的结果”两个预计算变量之间选择切换钳制开关不需要重新编译不同的着色器变体逻辑只是换了引用名。smin/smax两个函数并不写在本节点内而是通过includes字段声明复用includes: [ smooth_minmax ]生成流程可在 gen_shader.gd 中确认遍历shader_model_preprocessed.includes对每一项调用mm_loader.get_predefined_global(i)取出预定义全局代码并注入最终着色器rv.add_global(g, i)。该预定义全局的源码位于 2D 同名节点的 smooth_minmax.mmg其global数组给出了两个核心函数float smin(float d1, float d2, float k) { float h clamp( 0.5 0.5*(d2-d1)/k, 0.0, 1.0 ); return mix( d2, d1, h ) - k*h*(1.0-h); } float smax(float d1, float d2, float k) { float h clamp( 0.5 - 0.5*(d2-d1)/k, 0.0, 1.0 ); return mix( d2, d1, h ) k*h*(1.0-h); }从源码结构看这正是 Inigo Quilez 经典的平滑 min/max 公式的变体h表示当前点位于“过渡区”内的位置mix(d2, d1, h)完成线性插值∓ k*h*(1.0-h)是二次修正项使过渡曲线在两端与原始 min/max 相切得到 C1 连续的平滑过渡。这也解释了参数面板把k限定在 0~1它直接控制过渡带宽且与灰度值域 [0,1] 同尺度。值得注意的一点这套smin/smax全局代码由 2D 的smooth_minmax节点smooth_minmax.mmg与 3D 的tex3d_smooth_minmax节点共享仅求值参数不同2D 用vec2 uv3D 用vec4 p。这体现了 Material Maker 节点引擎“代码模板 预定义函数库”的复用设计——engine 目录 下的gen_shader.gd、preprocessor.gd负责把这类 JSON 模型.mmg预处理并展开为最终 GLSL。五、典型用法柔和地融合多张 3D 灰度纹理结合 3D 纹理管线的工作方式见 node_3d_texture.rstSmooth MinMax 的典型用法包括柔和裁剪/取交集两张 3D 灰度图如两张噪声或两张由 tex3d_fbm 类 节点生成的分形图先经 Apply 节点采样为tex3d_gs再送入op Min的 Smooth MinMax。平滑最小会在两图交界处产生柔和的“下沉过渡”而不是硬 min 的锐利边界——适合做磨损、凹陷、边缘圆滑化的 3D 灰度混合。柔和叠加/取并集op Max则得到平滑最大把两个特征“柔和地并起来”过渡区内亮度被二次项抬高视觉上像两者的圆角合并。单输入 默认值只接一路纹理、把另一路留给默认值时节点等价于“与某个固定灰度阈值做平滑混合”可用于对 3D 灰度图做平滑的明度托底或封顶再配合clamp保证输出不越界。与 Select 节点配合Select 节点按颜色索引切换 3D 纹理切换边缘的硬切可以用 Smooth MinMax 的平滑过渡替代例如让两张纹理在索引边缘做 smin 过渡从源码结构看这是把“离散选择”软化为“连续混合”的常用手法此为基于管线结构的合理推断仓库未提供该组合的示例工程。示例图集 展示了该运算在不同平滑度下的结果差异与 2D 版 Smooth MinMax 节点共用同一张示例图。六、相关文档与延伸阅读node_3d_texture.rst3D 纹理节点族总览本文节点即列于其 toctree 中node_3d_texture_apply.rstApply 节点——查询 3D 纹理的坐标入口Smooth MinMax 的上游通常由它提供node_filter_smooth_minmax.rst2D 图像管线中同名的 Smooth MinMax 节点二者参数与公式一致差别仅在求值域vec2 uvvsvec4 p与端口类型tex3d_smooth_minmax.mmg / smooth_minmax.mmg两个节点的 JSON 着色器模型定义可直接查看端口、参数与代码模板gen_shader.gd着色器生成器负责includes全局函数注入与占位符展开io_types.mmt全部端口类型含tex3d_gs与跨类型自动转换表达式。小结TEX3D Smooth MinMax 节点是 Material Maker 3D 灰度纹理管线中的“平滑混合器”两个可选输入未连线时回落到default_in1/default_in2五个参数op选smin/smax、k控制过渡宽度、clamp控制是否钳制到 [0,1]底层由两行动态生成的 GLSL 加上共享的smin/smax预定义全局函数完成。理解其includes复用机制与$(name_uv)_clamp_$clamp的双变量输出技巧后你可以在材质图中用它替代硬min/max为 3D 纹理的融合与裁剪引入 C1 连续的柔和过渡。赞分享桌面应用图形学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 Shape Select 节点用 SDF 选择形状将多张 3D 纹理合并为一个纹理Material Maker 3D Shape Select 节点用 SDF 选择形状将多张 3D 纹理合并为一个纹理 本篇围绕 Material Maker桌面应用图形学3D渲染图像处理Material Maker节点库深度探索500预设纹理节点完全指南Material Maker节点库深度探索500预设纹理节点完全指南 Material Maker是一款基于Godot游戏引擎的开源程序化纹理创作和3D模型桌面应用图形学3D渲染图像处理Material Maker 3D 纹理选择节点Select Node完全指南基于颜色索引的多纹理合并与映射实战Material Maker 3D 纹理选择节点Select Node完全指南基于颜色索引的多纹理合并与映射实战 Select选择节点 是 Mater桌面应用图形学3D渲染图像处理上一篇百度网盘提取码自动获取3分钟快速解锁加密资源的终极指南下一篇百度网盘提取码终极指南3秒解锁加密资源的免费神器创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考