Material Maker 3D 纹理节点完全指南:从 Apply 应用到 Select 选择的程序化三维纹理管线
桌面应用图形学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点击查看免费下载3D 纹理3D textures是 Material Maker 中一类以三维坐标而非平面 UV为采样空间的程序化纹理用于为地形高度图或由符号距离函数SDF构建的 3D 场景着色。本文以官方文档 node_3d_texture.rst 为骨架逐节点讲解 Apply、Select、Pattern、FBM、Blend、Warp 等 26 个 3D 纹理节点的输入输出、参数语义与底层 GLSL 实现帮助你掌握从“生成三维纹理”到“按高度/颜色索引贴到 3D 表面”的完整工作流。一、3D 纹理体系概述两种表面来源根据官方章节文档 node_3d_texture.rstMaterial Maker 中的 3D 纹理可以应用到由heightmap高度图定义的物体表面而高度图本身有两条生成路径常规灰度图像直接使用一张灰度纹理作为高度场SDF 3D 场景使用符号距离函数signed distance functions搭建 3D 场景再由 Render 节点渲染出高度图与颜色图。两条路径在节点层面汇合于两个关键节点Apply 节点负责定义查询 3D 纹理所需的 3D 坐标是把“3D 纹理”真正“贴”到表面上的入口Select 节点负责根据颜色索引color index在多个 3D 纹理之间切换实现“一张场景多种材质”的效果。从源码类型体系看3D 纹理对应 shader 模型中的tex3d与tex3d_gs两种输出类型前者为彩色三维纹理后者为灰度三维纹理。在 gen_sdf.gd 中可以看到SDF 场景节点会输出 Albedotex3d、Metallic、Roughness、Emissiontex3d_gs/tex3d四类三维纹理端口这些端口正是下游 Apply、Blend 等节点的输入来源。所有 3D 纹理节点的节点定义均以.mmgJSON格式存放于 addons/material_maker/nodes 目录命名统一为tex3d_*.mmg可直接打开查看其 shader_model 中的 GLSL 代码与参数枚举。二、入口与选择Apply、Select、Shape Select2.1 Apply 节点把 3D 纹理贴到高度图表面文档定义node_3d_texture_apply.rst输入3 个Height灰度纹理定义的高度图即 3D 表面Color灰度纹理定义的颜色索引图用于决定结果每个像素使用哪个 3D 纹理Texture3D 纹理本身也可以经 Select 节点接入多个 3D 纹理。输出一张彩色图像3D 纹理被应用到表面上。参数无。其底层实现定义于 tex3d_apply.mmg三个输入端口的type分别为fHeight、fColor和tex3dTexture输出表达式为$t(vec4($uv, $z($uv), $c($uv)))即把高度图采样值$z($uv)作为第 3 维坐标、颜色索引采样值$c($uv)作为第 4 维坐标构造四维向量后交给 3D 纹理函数$t查询。长描述“Applies 3D textures to a rendered 3D signed distance function scene.”把 3D 纹理应用到已渲染的 SDF 3D 场景表明该节点最常见的用法是接在 SDF Render 节点之后。2.2 Select 节点按颜色索引分配 3D 纹理文档定义node_3d_texture_select.rst输入两个或更多 3D 纹理——第一个为默认纹理不匹配时使用第二个为选中纹理匹配时使用该节点是变参variadic的可继续添加更多输入及其关联颜色索引。输出合并后的 3D 纹理。参数2 个Value颜色索引值与每个采样点的颜色索引比较Tolerance比较颜色索引时使用的容差。源码 tex3d_select.mmg 给出了精确语义。核心 GLSL 代码为float $(name_uv)_d ($uv.w-$v)/$t; ... mix($in1($uv), $in2($uv), clamp(1.0-$(name_uv)_d*$(name_uv)_d, 0.0, 1.0))其中$uv.w即 Apply 节点传入的颜色索引$vValue默认 0.5范围 0~1为目标索引$tTolerance默认 0.1范围 0.01~1为容差。1.0 - d²构成一个以目标值为中心的高斯状权重落在容差内的采样点取in1选中纹理否则取in2默认纹理从而实现多个 3D 纹理按索引平滑融合。2.3 Shape Select 节点按形状分配 3D 纹理文档定义node_3d_texture_shape_select.rst输入两个或更多 3D 纹理——默认纹理形状外、选中纹理形状内、以及一个决定第一个输入作用范围的Shape输入变参可添加更多纹理及其关联选择形状。输出合并后的 3D 纹理。参数smoothness决定纹理混合区域的宽度。源码 tex3d_select_shape.mmg 中Shape 输入的类型为sdf3d三维符号距离场输出为mix($in1($uv), $in2($uv), clamp($shape($uv.xyz)/max($d, 0.0001), 0.0, 1.0))$d即 smoothness 参数默认 0.5范围 0~1SDF 值除以d后经 clamp 得到 0~1 的混合权重d越大过渡带越宽。注意仓库中还存在变体 tex3d_select_shape_v.mmg用于支持更多输入。三、3D 纹理生成器From2D、Pattern、FBM、Uniform、UV3.1 From2D沿轴投影生成文档定义node_3d_texture_from2d.rst接受一个 2D 纹理沿指定轴投影生成 3D 纹理唯一的参数是投影Axis。源码 tex3d_from2d.mmg 中 Axis 为枚举X / Y / Z输出为$in($uv$axisvec2(0.5))即取三维坐标$uv中与投影轴对应的两个分量作为 2D 采样坐标vec2(0.5)将坐标从 [-0.5, 0.5] 映射到 [0, 1]实现无限拉伸的“贴花”式三维纹理。3.2 Pattern三维波形图案文档定义node_3d_texture_pattern.rst输入无。输出灰度 3D 纹理——沿 X、Y、Z 三个轴各生成一种图案后混合得到。参数X / Y / Z每轴各自选择波形与重复次数可选波形Sine正弦、Triangle三角波线性 0→1→0、Square方波先保持 0 再 1、Sawtooth锯齿波线性 0→1 后跳回 0、Constant恒为 1、Bounce半圆波形CombinerX/Y/Z 三轴图案的组合函数可选multiply、add、max、min、xor、pow。源码 tex3d_pattern.mmg 直接内嵌了六个mix3d_*组合函数mul为三值相乘、add为求和后min(..., 1.0)、xor为min(xy, 2-x-y)的对称折返运算等输出表达式为mix3d_$(mix)(wave_$(x_wave)($(x_scale)*$uv.x), wave_$(y_wave)($(y_scale)*$uv.y), wave_$(z_wave)($(z_scale)*$uv.z))其中x_scale/y_scale/z_scale为每轴重复次数默认 4范围 0~32步长 1。波形函数定义在共享的 pattern.mmg 中。文档特别提示“许多不同的图案都可以用该节点创建大胆尝试”例如三个轴用不同波形与不同重复次数组合即可生成砖块、编织、波纹等三维结构。3.3 FBM三维分形布朗运动噪声文档定义node_3d_texture_fbm.rst输入无。输出灰度 3D 纹理。参数噪声类型value noise、fractal noise 或 cellular noise以及各自的 non-repetitive 非重复变体、X/Y/Z 第一倍频octave的缩放、迭代次数、persistence每次迭代的强度衰减。源码 tex3d_fbm.mmg 展示了完整的三维噪声实现包括rand31/rand33基于sin(dot(...))*43758.5453123的伪随机函数tex3d_fbm_value三线性插值 value noise、tex3d_fbm_perlin梯度点积的 Perlin 噪声、tex3d_fbm_cellular遍历 3×3×3 邻域求最近特征点距离的 cellular 噪声以及对应的_nowrap变体不做mod(o, size)环绕纹理不平铺统一的倍频累加循环fbm3d_*每次迭代size * 2.0频率翻倍、scale * persistence幅度按 persistence 衰减最后除以normalize_factor归一化到 0~1。参数默认值scale_x/y/z默认 4范围 1~32、iterations默认 3范围 1~10、persistence默认 0.5范围 0~1。噪声类型枚举为Value、Perlin、Cellular 及各自 no-wrap 变体。仓库中另有 tex3d_fbm_2.mmg、tex3d_fbm_3.mmg 等变体。此外仓库还提供 tex3d_voronoi.mmg 三维 Voronoi 节点输出 Nodes、Borders 灰度纹理与 Random color 彩色纹理参数含三轴 scale、intensity、randomness可作为 FBM 之外的另一类程序化三维噪声来源。3.4 Uniform 与 UV常量与坐标可视化Uniformnode_3d_texture_uniform.rsttex3d_uniform.mmg无输入输出单一均匀彩色 3D 纹理唯一参数color默认白色(1,1,1,1)Uniform/Grayscale变体tex3d_uniform_grayscale.mmg只有一个float参数默认 0.5范围 0~1输出灰度三维纹理。UVnode_3d_texture_uv.rsttex3d_uv.mmg无输入、无参数输出$uv.xyz即把三维采样坐标本身作为颜色显示出来常用于调试坐标空间。四、3D 纹理变换Rotate、Scale、Translate、Distort、Warp这组节点通过修改查询坐标来“变换”3D 纹理均在片元着色器中对$uv做数学改写。4.1 Rotate / Scale / Translate文档定义node_3d_texture_rotate.rst、node_3d_texture_scale.rst、node_3d_texture_translate.rst三者均为变参节点可同时处理一个或多个 3D 纹理。当前仓库实现见 tex3d_rotate.mmg、tex3d_scale.mmg、tex3d_translate.mmg节点参数坐标变换核心表达式Rotateax/ay/az范围 -180~180度$in#(vec4(tex3d_rotate($uv.xyz, -vec3($ax,$ay,$az)*0.01745329251), $uv.w))即按欧拉角旋转采样坐标0.01745329251 ≈ π/180 弧度换算Scale文档描述为 X/Y/Z 三轴缩放当前仓库 tex3d_scale.mmg 实现为单一s因子默认 1范围 0.1~10$in#(vec4($uv.xyz/max($s, 0.00001), $uv.w))除以缩放因子放大纹理max防止除零Translatex/y/z范围 -5~5默认 0$in#(vec4($uv.xyz-vec3($x,$y,$z), $uv.w))沿三轴平移采样坐标4.2 Distort三通道驱动的扭曲文档定义node_3d_texture_distort.rst输入待扭曲的 3D 纹理与一个 3D 纹理后者的 R、G、B 通道分别定义沿三个轴的扭曲量参数Distort控制扭曲强度。源码 tex3d_distort.mmg$in1(vec4($uv.xyz($in2($uv)*$Distort*0.5-0.5), 0.0))$Distort默认 0.5、范围 0~1将第二输入的颜色值先乘强度再减 0.5 居中作为三轴偏移量叠加到采样坐标上。4.3 Warp按高度图导数变形文档定义node_3d_texture_warp.rst输入Source待变形纹理、Height map灰度 3D 纹理其导数用于驱动变形、可选Strength map与 strength 参数相乘。输出变形后的 3D 纹理。参数3 个mode定义偏移计算方式——Slope按斜率计算偏移距离Distance to top按斜率与到顶部距离共同计算偏移可让坡面上所有点都取顶部值从而生成马赛克状图案strength缩放变形效果epsilon用于数值微分求第二输入的导数。源码 tex3d_warp.mmgmode枚举Slope / Distance to topamount0~1、eps0.005~0.2输出表达式为$in#($uv.xyz$amount*$strength_map($uv)*$(name_uv)_warp)其中$(name_uv)_warp是节点生成的导数计算代码eps即数值微分的步长。Warp 是制作侵蚀、流动、马赛克类 3D 表面效果的关键工具。五、色调与色彩处理Colorize、Tones 系列、Tonality、Quantize、Invert5.1 Colorize渐变映射文档定义node_3d_texture_colorize.rst输入 3D 纹理并隐式转为灰度黑色取渐变最左端颜色、白色取最右端颜色唯一参数为gradient。源码 tex3d_colorize.mmg$g(dot($in($uv), vec3(1.0))/3.0).rgbdot($in($uv), vec3(1.0))/3.0即 RGB 三通道平均值亮度作为渐变曲线$g的采样位置输出彩色 3D 纹理。5.2 Tones Step / Tones Range / Tones Map三者构成“色调选区/重映射”家族参数均以 0~1 的色调空间操作Tones Stepnode_3d_texture_tones_step.rsttex3d_tones_step.mmg强调指定Value默认 0.5周围的明暗色调参数Value、Width默认 1.0黑白区域之间渐变宽度、Invert反转结果。Tones Rangenode_3d_texture_tones_range.rsttex3d_tones_range.mmg选择输入在Value周围的一段范围参数Value、Width默认 0.25、Contrast默认 0.5、Invert。Tones Mapnode_3d_texture_tones_map.rsttex3d_tones_map.mmg变参按输入色调区间in_min~in_max与输出色调区间out_min~out_max做线性重映射超出区间时线性外推。核心表达式vec3($out_min)($in#($uv).rgb-vec3($in_min))*vec3(($out_max-$out_min)/($in_max-$in_min))即经典的(x - in_min) / (in_max - in_min) * (out_max - out_min) out_min线性映射。5.3 Tonality自定义曲线文档定义node_3d_texture_tonality.rst变参对灰度 3D 纹理应用用户自定义曲线唯一参数为tonality curve。注彩色输入会被隐式转换为灰度处理。源码 tex3d_tonality.mmg 输出$curve($input#($uv))默认曲线为从 (0,0) 到 (1,1) 的线性映射。5.4 Quantize 与 InvertQuantizenode_3d_texture_quantize.rsttex3d_quantize.mmg变参按steps步数近似颜色默认 4范围 2~32表达式floor($in#($uv).rgb*$steps)/$steps可制造色阶/卡通化效果。Invertnode_3d_texture_invert.rsttex3d_invert.mmg无参数输出vec3(1.0)-$in($uv).rgb反转 R、G、B 三个通道。六、通道分解与数学运算Combine、Decompose、Math、Vec3 Math、Smooth MinMax6.1 Combine 与 DecomposeCombinenode_3d_texture_combine.rsttex3d_combine.mmg三个灰度 3D 纹理输入Red/Green/Blue输出vec3($r($uv), $g($uv), $b($uv))合成的彩色 3D 纹理。Decomposenode_3d_texture_decompose.rsttex3d_decompose.mmg单个彩色 3D 纹理输入输出 R、G、B 三个灰度 3D 纹理$i($uv).r/.g/.b。二者互为逆操作常用于把三张独立的高度/掩码图打包成一张彩色纹理或把彩色纹理拆开逐通道处理。6.2 Math 与 Vec3 Math文档定义node_3d_texture_math.rst、node_3d_texture_v3_math.rst两个输入均可选未连接时使用参数默认值参数含operation、default values、以及是否clamp到 0~1。区别在于 Math 处理两个灰度3D 纹理Vec3 Math 处理两个彩色3D 纹理。源码中的完整操作枚举Mathtex3d_math.mmg共 36 种标量运算AB、A-B、A*B、A/B、log(A)、log2(A)、pow(A,B)、abs(A)、round(A)、floor(A)、ceil(A)、trunc(A)、fract(A)、min(A,B)、max(A,B)、AB、cos(A*B)、sin(A*B)、tan(A*B)、sqrt(1-A²)、smoothstep(0.0, 1.0, A)、ping-pong(A,B)、sign(A)、mod(A,B)、atan2(A,B)、asin(A)、acos(A)、atan(A)、sinh(A)、cosh(A)、tanh(A)、exp(A)、snap(A,B)、radians(A)、degrees(A)、log(A,B)。Vec3 Mathtex3d_math_v3.mmg在前者基础上以矢量运算替换/补充共 34 种含length(A)、distance(A,B)、dot(A,B)、cross(A,B)、normalize(A)、rotate(A,B)等向量特有运算默认输入参数为d_in1_x/y/z、d_in2_x/y/z三通道各自的回退值。6.3 Smooth MinMax平滑极值文档定义node_3d_texture_smooth_minmax.rst在两个灰度 3D 纹理之间执行平滑最小/最大运算SDF 领域的常用操作可避免硬边缘。源码 tex3d_smooth_minmax.mmg 参数opMin/Max默认 Max、default_in1/default_in2未连接时的回退值、ksmoothness平滑半径默认 0范围 0~1、clamp结果是否钳制到 0~1。七、Blend 节点22 种混合模式详解文档定义node_3d_texture_blend.rst输入背景层background、前景层layer、可选mask灰度掩码连接时代替 opacity 参数变参可添加更多图层及关联掩码。输出混合结果 3D 纹理。参数blend mode混合模式与opacity不透明度默认 0.5范围 0~1。opacity 通道连接时先转灰度再与该参数相乘源码 tex3d_blend.mmg 输出blend3d_$blend_type($s1($uv).rgb, $s2($uv).rgb, $amount*dot($a($uv), vec3(1.0))/3.0)。文档给出了完整的 22 种混合模式对照表说明当前仓库 tex3d_blend.mmg 的枚举实现了其中 11 种核心模式其余模式在文档中定义、可通过该节点体系扩展混合模式效果描述Normal默认模式直接把顶层显示在底层之上不做任何混合Dissolve随机用底层像素替换顶层像素Multiply两层颜色相乘结果更暗Screen两层反转色相乘结果更亮Overlay暗色相乘、亮色屏幕化提升对比度Hard Light类似 Overlay但强度更高Soft Light暗乘亮屏但比 Overlay 更柔和Burn使底层变暗以反映顶层增大两层对比Dodge使底层变亮以反映顶层降低对比Lighten比较两层颜色保留较亮者Darken比较两层颜色保留较暗者Difference两层颜色相减Additive两层颜色相加AddSub根据前景层亮度决定加或减Linear LightLinear Dodge 与 Linear Burn 的组合Vivid Light类似 Color Dodge 与 Color Burn但更强烈Pin Light按顶层亮度用顶层颜色替换底层颜色Hard Mix两层相乘后映射到最接近的主色Exclusion类似 Difference但更柔和Hue取顶层色相结合底层饱和度与明度Saturation取顶层饱和度结合底层色相与明度Color取顶层色相与饱和度结合底层明度Value取顶层明度结合底层色相与饱和度八、完整工作流串联从 SDF 场景到多材质表面综合以上节点一条典型的 3D 纹理制作流程如下搭场景用 SDF 节点如sdf3d_*系列见 sdf3d_box.mmg、sdf3d_torus.mmg 等搭建 3D 几何体渲染高度图由 SDF Render 节点gen_sdf.gd输出 Height 与 Color 两张图——前者进入 Apply 的 Height 输入后者进入 Apply 的 Color 输入生成/选择纹理用 FBM、Pattern、From2D 等生成多张 3D 纹理经 Select按颜色索引或 Shape Select按 SDF 形状合并应用与细化Apply 将合并结果贴到表面之后可接 Colorize、Tones 系列调色Blend 混合多层Warp/Distort 做变形最终连接 3D 预览仓库 preview_tex3d.gdshader查看效果。仓库自带的 examples 目录中如3d_shapes.ptex、raymarching.ptex、planet.ptex等示例工程均大量使用了 3D 纹理管线可作为学习入口直接打开观察节点连线与参数配置。结语Material Maker 的 3D 纹理子系统以tex3d/tex3d_gs着色器类型为基石通过 node_3d_texture.rst 定义的一组节点把“三维噪声/图案生成—按索引或形状选择—坐标变换—色调处理—通道混合”这条完整管线组织得清晰而灵活。每个节点既是可视化的图编辑单元也是可直接阅读的 GLSL 片段见 addons/material_maker/nodes 下的tex3d_*.mmg定义这让设计师可以直观调参、也让开发者能够深入理解甚至改造底层算法。掌握 Apply 与 Select 两个枢纽节点再配合 FBM、Pattern、Warp、Blend 等工具即可在 Material Maker 中高效产出风格多样的程序化三维材质。赞分享桌面应用图形学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 3D 纹理选择节点Select Node完全指南基于颜色索引的多纹理合并与映射实战Material Maker 3D 纹理选择节点Select Node完全指南基于颜色索引的多纹理合并与映射实战 Select选择节点 是 Mater桌面应用图形学3D渲染图像处理如何把 AI Agent 接上真机Mobile MCP 移动自动化服务器实操指南含 30 控制工具如何把 AI Agent 接上真机Mobile MCP 移动自动化服务器实操指南含 30 控制工具 Mobile MCP 是一个面向移动自动化的开源 M桌面应用图形学3D渲染图像处理上一篇agentmemory handoff 技能实战基于 memory_sessions 与 memory_recall 的跨会话断点续作指南下一篇GDevelop 视觉猴子测试Visual Monkey Tests完全指南在真实浏览器中像用户一样操纵编辑器创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考