尧图精选

Material Maker 1.0 实战:节点式程序化 PBR 材质从入门到精通

🕒 发布时间:2026/10/1 6:56:30 📁 来源:尧图网络
1. 为什么我会盯上 Material Maker 这款工具第一次看到 Material Maker 1.0 发布的消息时我正在给一个独立游戏项目做场景资产。当时团队里讨论最多的就是材质怎么办——买 Substance 订阅吧一年下来小几千块对独立开发者来说不算小数目自己手写 GLSL 吧美术同学又不太愿意碰代码。就在这个节骨眼上有人甩了个 GitHub 链接过来说这玩意儿免费开源还带中文界面能像 Substance Designer 那样用节点连出 PBR 材质。我当时的第一反应是又一个玩具但实际用下来两周之后我把它列进了团队的标准工具链。Material Maker 本质上是一个基于节点的程序化纹理创作工具用 Godot 引擎的着色器语言作为底层渲染支撑跑在 Windows、Linux、macOS 上都能用。它的核心工作方式和 Substance Designer 非常接近你在画布上拖出一堆节点每个节点代表一种操作——噪声、渐变、混合、模糊、法线转换等等节点之间连线最终输出一张或者一组 PBR 贴图。所谓 PBR就是 Physically Based Rendering基于物理的渲染需要 Albedo基础色、Roughness粗糙度、Metallic金属度、Normal法线、Height高度、AO环境光遮蔽这一整套贴图配合使用。Material Maker 能一次性把这些通道全部生成出来而且因为是程序化的改一个参数整组贴图跟着变不用像手绘那样一张张重画。这款工具适合谁我梳理了一下独立游戏开发者、技术美术、做 3D 可视化的工程师、学图形学的学生甚至一些做电商产品渲染的设计师都能用得上。它不需要你会写代码但需要你理解 PBR 的基本概念和节点式思维。如果你之前用过 Substance Designer、Blender 的着色器节点、或者 Houdini 的 VOP上手会非常快。完全零基础的话大概花一个周末看几个教程也能跑起来。1.0 版本相比之前的 beta 版最大的变化是节点库稳定了、导出流程理顺了、中文翻译覆盖度也上来了这也是我愿意写这篇东西的原因——它终于到了可以正经干活的阶段。2. 节点式程序化纹理到底是怎么一回事2.1 从画一张图到描述一套规则传统纹理制作是像素级的你在 Photoshop 或者 Substance Painter 里拿笔刷一笔一笔画画完导出 PNG。这种方式直观但有个致命问题——不可复用、不可参数化。你想要同一块石头材质但裂缝多一点对不起重画。程序化纹理的思路完全不同你不是在画图而是在描述这块材质是怎么生成的。比如一块生锈的金属底层是金属噪声上面叠加一层锈迹噪声锈迹的分布由另一个大尺度噪声控制边缘用梯度做过渡最后把高度信息转成法线。这一整套逻辑用节点连起来就是一个可复用的材质生成器。Material Maker 里每个节点本质上是一个函数输入若干张灰度图或彩色图输出若干张图。节点之间的连线传递的是纹理数据不是数值。这一点很关键很多新手一开始会以为连线传的是参数其实传的是整张图。比如你把一个 Perlin 噪声节点连到一个 Blur 节点的输入Blur 会对整张噪声图做模糊而不是对某个数值做模糊。理解这一点后面搭复杂网络才不会懵。2.2 PBR 通道之间的内在联系很多人做 PBR 材质时容易犯一个错把各个通道当成独立的图去处理。实际上 Albedo、Roughness、Metallic、Normal、Height、AO 之间是有物理关联的。举个最典型的例子一块砖墙砖缝是凹进去的那么砖缝处的高度值低、AO 值低因为凹进去的地方环境光进不去、Roughness 通常偏高积灰、Albedo 偏暗。如果你只改了 Height 而没同步改 AO 和 Albedo渲染出来就会很假。Material Maker 的一个优势就是它内置了很多多通道节点比如有一个叫Bricks的节点它同时输出 Color、Grayscale、Normal、AO 等多个端口。你连一个节点下去六个通道全有了而且它们之间的一致性是由节点内部算法保证的。这就是程序化的威力——物理一致性不用你手动维护算法帮你兜底。我在实际项目里凡是能用多通道节点搞定的绝不拆成单通道手动拼省下来的时间够我多调三轮参数。2.3 为什么选 Godot 着色器而不是自己写渲染管线Material Maker 底层用的是 Godot 的着色器语言这个选择挺有意思。Godot 的着色器语法接近 GLSL但更简洁而且跨平台支持好。作者没有自己造一套渲染管线而是直接复用 Godot 的成熟能力这样开发成本低、bug 少、性能也稳。对我们用户来说最直接的好处是Material Maker 里预览的效果和你把贴图导进 Godot 引擎后的效果几乎一致。如果你用 Unity 或 Unreal可能需要微调一下但整体偏差不大。这里有个实操细节Material Maker 的预览窗口有 2D 和 3D 两种模式。2D 模式看的是贴图本身3D 模式看的是贴图贴在一个球体或平面上的效果。我强烈建议新手多用 3D 模式因为很多在 2D 下看着没问题的图贴到 3D 模型上就露馅了——比如法线方向反了、粗糙度对比太强导致高光炸掉。3D 预览能帮你提前发现这些问题省得导进引擎再返工。3. 核心节点体系与实操要点拆解3.1 噪声类节点一切的起点程序化纹理的根基是噪声。Material Maker 里的噪声节点主要有这几类Perlin 噪声、Simplex 噪声、Worley 噪声也叫细胞噪声、Value 噪声、FBM分形布朗运动。每种噪声的视觉特征不一样用途也不同。Perlin 噪声是最常用的生成的是平滑的、连续的随机图案适合做云、烟雾、石材的底纹。Simplex 噪声是 Perlin 的改进版计算更快高维表现更好Material Maker 里默认的很多噪声节点底层用的就是 Simplex。Worley 噪声生成的是细胞状图案每个细胞中心有一个亮点适合做鹅卵石、鳞片、泡沫、皮革。FBM 则是把多个频率的噪声叠加起来低频提供大结构高频提供细节做地形、岩石、木纹特别顺手。我踩过的一个坑是直接用单层 Perlin 噪声做材质出来的东西特别糊没有层次感。后来才明白真实世界的材质都是多尺度叠加的。正确做法是用 FBM或者手动把两三层不同频率的噪声用 Blend 节点混起来。比如做一块岩石低频噪声定大块起伏中频噪声加裂纹高频噪声加表面颗粒三层一叠质感立刻就出来了。提示Material Maker 的噪声节点都有一个Seed参数改这个值可以换一张完全不同的随机图但整体统计特征不变。做变体的时候特别有用不用重新搭网络。3.2 变换与混合节点把简单拼成复杂有了噪声下一步是把它们组合起来。Material Maker 的变换节点包括Transform平移、旋转、缩放、Warp用一张图去扭曲另一张图、Blur模糊、Sharpen锐化、Threshold阈值化、Gradient渐变。混合节点包括Blend按权重混合两张图、Mix线性插值、Multiply、Add、Subtract、Max、Min、Overlay 等等。这里面最值得说的是 Warp 节点。它的作用是用一张图作为位移场去扭曲另一张图。举个例子你先用 Worley 噪声生成一堆细胞然后用 Perlin 噪声去 Warp 这些细胞出来的图案就不再是规整的细胞而是像被水流冲刷过的鹅卵石自然多了。Warp 是让程序化纹理摆脱机械感的关键节点我几乎每个材质网络里都会用。Blend 节点的混合模式也很有讲究。默认的 Blend 是按灰度值做线性插值但你可以切换到 Multiply、Overlay、Screen 等模式。做锈迹的时候我通常用 Multiply 把锈迹图叠到金属底图上因为锈是覆盖在金属上的Multiply 能保留底层的明暗关系。做发光效果的时候用 Screen 或者 Add因为光是叠加上去的。3.3 法线与高度3D 质感的来源PBR 材质看起来有没有立体感法线贴图起了决定性作用。Material Maker 里生成法线的标准流程是先做一张 Height高度灰度图然后用 Normal 节点把高度转成法线。Normal 节点有一个Strength参数控制法线的强度。这个值调太大渲染出来会像塑料玩具调太小又看不出凹凸。我的经验值是 1.0 到 2.0 之间具体看材质尺度——大块岩石可以到 2.5细腻的布料 0.8 就够了。高度图本身怎么做最简单的办法是拿噪声直接当高度。但更好的做法是分层底层用低频噪声做大起伏中层用中频噪声做中等细节顶层用高频噪声做微观颗粒然后用 Blend 节点按不同权重叠起来。这里有个技巧叠加的时候不要用简单的 Add因为 Add 会让整体亮度越来越高最后高度图全白。用 Blend 的 Overlay 模式或者用 Max 节点取最大值能保持高度范围在合理区间。还有一个容易被忽略的点高度图和法线图的方向要一致。Material Maker 默认的坐标系是 Y 向上但有些引擎比如 Unreal用的是 Y 向下。导出的时候要注意选对法线格式否则贴上去凹凸是反的。我在第一次导出到 Unreal 时就吃了这个亏石头看起来像被从里面顶出来的特别诡异。3.4 多通道输出与导出配置Material Maker 的最终输出是通过 Output 节点完成的。你可以放多个 Output 节点每个对应一个 PBR 通道。1.0 版本的导出界面比之前清爽很多支持 PNG、JPG、EXR 等格式还能批量导出所有通道。导出时几个关键参数分辨率一般 1024 或 2048移动端可以 512、位深法线和高度建议 16 位其他 8 位够用、色彩空间Albedo 用 sRGB其他用 Linear。这几个参数如果设错导进引擎后颜色会偏、法线会错。我建议在 Material Maker 里建一个导出预设把常用配置存下来以后一键导出不用每次重新设。注意Material Maker 的工程文件是 .ptex 格式本质是个压缩包里面存的是节点图和参数。这个文件不大适合放进版本控制。但如果你引用了外部图片资源那些图片不会被打包进去换台机器打开可能会丢引用。所以尽量用纯程序化节点少依赖外部贴图。4. 从零搭一套生锈金属材质的完整流程4.1 需求拆解与节点规划光讲理论没意思我拿一个实际案例走一遍做一套生锈的钢铁PBR 材质用于游戏里的废弃工厂场景。需求是基础是深灰色金属表面有斑驳的锈迹锈迹集中在凹陷处整体粗糙度偏高有轻微的凹凸感。先规划节点结构。我习惯从输出倒推需要 Albedo、Roughness、Metallic、Normal、Height、AO 六个通道。Albedo 由金属底色和锈迹色混合而成Roughness 由金属的低粗糙和锈迹的高粗糙混合Metallic 在锈迹处要降低锈不是金属Height 由锈迹的厚度决定Normal 从 Height 转换AO 从 Height 和锈迹分布推导。核心逻辑是先生成一张锈迹遮罩Mask这张遮罩决定了哪里是锈、哪里是金属。然后所有通道都基于这张遮罩去混合两套参数。这样改锈迹分布的时候所有通道同步更新一致性有保证。4.2 锈迹遮罩的生成锈迹遮罩怎么来我用三层噪声叠加。第一层是低频 Worley 噪声生成大块的锈斑区域第二层是中频 Perlin 噪声打散锈斑边缘让它不那么规整第三层是高频噪声加一些细小的锈点。三层用 Blend 节点按 0.5、0.3、0.2 的权重叠起来然后用 Threshold 节点做二值化阈值设在 0.45 左右这样大约 40% 的面积是锈。Threshold 之后边缘会很硬像剪纸一样。这时候接一个 Blur 节点半径设 3 到 5 像素让边缘柔和过渡。然后再接一个 Gradient 节点做对比度调整把中间调压掉让锈迹和金属的边界更清晰但不生硬。这一套下来锈迹遮罩就自然多了。这里有个细节Worley 噪声的细胞大小要调对。默认的细胞太小锈斑会像麻子一样碎。我把 Worley 节点的 Scale 参数从默认的 8 调到 3细胞变大锈斑就有了块状感。这个参数没有标准值得根据你的材质尺度去试我的经验是如果最终贴图是 2048Worley 的 Scale 在 2 到 5 之间比较合适。4.3 各通道的混合与调参有了锈迹遮罩接下来逐个通道处理。Albedo金属底色用 RGB 节点设成 (0.35, 0.36, 0.38)偏冷的深灰。锈迹色用 (0.45, 0.22, 0.08)偏暖的橙褐。用 Blend 节点遮罩作为权重把两色混起来。混合模式用 Normal 就行。混完之后接一个轻微的 Noise 节点叠加给颜色加一点不均匀感避免死板。Roughness金属的粗糙度设 0.25锈迹的粗糙度设 0.85。同样用遮罩混合。混完之后我再叠一层高频噪声幅度很小±0.05模拟表面的微观粗糙变化。这一步很多人会省但加上之后渲染出来的高光会活很多。Metallic金属处设 1.0锈迹处设 0.0。用遮罩混合。注意 Metallic 通道只有 0 和 1 两个极端值在物理上是准确的中间值只用于过渡区域。所以混合完之后我用一个 Contrast 节点把中间调压窄让大部分区域要么是 0 要么是 1。Height锈迹处高度略高因为锈是堆积上去的金属处高度低。我用遮罩乘以 0.3 作为高度偏移再叠加上前面说的多层噪声作为表面细节。最后用 Normal 节点转成法线Strength 设 1.5。AO从 Height 图用 AO 节点生成半径设 16 像素强度 0.8。AO 节点会模拟环境光在凹陷处的遮蔽效果让砖缝、锈斑边缘变暗立体感立刻就出来了。4.4 3D 预览与迭代调整所有通道连好之后切到 3D 预览模式把材质贴到一个球体上。第一版出来我发现锈迹太浮了像是贴在金属表面的贴纸没有融入感。问题出在 Height 上——锈迹的高度偏移太小而且没有和金属底层的噪声产生交互。调整方案把锈迹的高度偏移从 0.3 提到 0.5同时在锈迹遮罩上再 Warp 一次用金属底层的噪声去扭曲锈迹边缘让锈迹咬进金属里。改完之后再预览锈迹就有了从金属内部长出来的感觉自然多了。这个过程我反复调了大概七八轮每轮改一两个参数预览、对比、再改。程序化材质的好处就在这里改一个参数六个通道同步更新不用手动重画任何东西。如果是手绘流程这种级别的调整至少得重画两三张图。5. 实操中容易踩的坑与排查手册5.1 性能问题节点太多导致卡顿Material Maker 的节点图是实时计算的每改一个参数整张图重新算一遍。如果你的网络里有几十个节点分辨率又开到 2048预览会明显卡顿。我一开始搭复杂材质时节点数飙到 80 多个每拖一下滑块要等两三秒体验极差。解决办法有几个。第一把不常改的部分烘焙成图片用 Image 节点替代。Material Maker 支持把某个节点的输出导出成图片再重新导入这样那部分就不再实时计算了。第二降低预览分辨率最终导出时再调高。第三把一些可以合并的节点合并比如连续几个 Blur 可以合成一个大的 Blur。第四关掉不需要的通道预览只显示当前在调的那个通道。我现在的习惯是搭建阶段用 512 分辨率预览节点随便加调参阶段升到 1024最终导出前才切 2048。这样整个流程流畅很多。5.2 接缝问题平铺纹理的边界处理游戏里的材质通常是平铺的也就是贴图在 UV 上重复。如果噪声不是无缝的平铺之后会看到明显的接缝。Material Maker 的大部分噪声节点都支持无缝模式但需要你手动开启。在噪声节点的参数里找Tile或者Seamless选项勾上之后生成的噪声就是无缝的。但即使噪声无缝经过 Warp、Transform 等操作之后接缝可能又出现了。这时候需要在最后加一个Make Tileable节点它会自动处理边界让整张图无缝。这个节点会稍微损失一点细节但比起接缝来说这点损失完全值得。提示做平铺材质时尽量让所有变换操作都是整数倍的平移或 90 度旋转这样不容易破坏无缝性。非整数倍的缩放和任意角度旋转是接缝的重灾区。5.3 导出后引擎里效果不对的排查导出的贴图在引擎里显示不正常是最常见的问题。我整理了一个排查表按出现频率排序现象可能原因排查方法颜色偏暗或偏亮Albedo 色彩空间设错检查导出时 Albedo 是否设为 sRGB凹凸方向反了法线 Y 轴方向不匹配在导出设置里切换 Normal 的 Y 方向高光过曝Roughness 值太低检查 Roughness 是否被误设为 0金属看起来像塑料Metallic 通道没接或全 0确认 Metallic 贴图已正确导入表面有奇怪条纹法线贴图位深不够法线导出为 16 位 PNG平铺处有接缝噪声未开无缝模式检查所有噪声节点的 Tile 选项这张表是我踩了无数次坑之后总结的基本上覆盖了 90% 的导出问题。遇到问题先查表比盲目试错快得多。5.4 中文界面的小毛病与应对Material Maker 1.0 的中文翻译整体不错但有些专业术语翻译得不太准比如Roughness被译成粗糙度没问题但Metallic译成金属性就有点别扭行业里一般叫金属度。还有些节点的参数名翻译后和英文原版对不上看教程的时候容易懵。我的建议是如果你英文还过得去可以在设置里把界面切成英文对照着看。如果坚持用中文遇到看不懂的术语去节点上右键看它的英文原名然后搜英文教程资料会多很多。另外中文界面下有些字体渲染会糊可以在设置里换个字体我用的是思源黑体清晰度好很多。6. 它和 Substance Designer 到底差在哪6.1 功能覆盖度对比公平地说Material Maker 在功能深度上和 Substance Designer 还有差距。Substance Designer 有更丰富的节点库、更成熟的滤镜系统、更强大的脚本支持还有和 Substance Painter、Substance Stager 的生态联动。Material Maker 的节点数量大概是 Substance 的六七成一些高级功能比如自定义函数节点、GPU 加速计算、复杂的曲线编辑器要么没有要么比较简陋。但反过来看Material Maker 覆盖了 80% 的日常需求。做游戏材质、做建筑可视化、做产品渲染常用的那些操作——噪声、混合、Warp、法线转换、导出——它全都有而且用起来不别扭。真正需要 Substance 高级功能的场景其实没那么多。我个人的判断是如果你是专业材质师天天做复杂材质Substance 的订阅费值得花如果你是独立开发者、学生、或者偶尔做材质的工程师Material Maker 完全够用。6.2 成本与授权开源带来的实际好处Material Maker 用的是 MIT 许可证这意味着你可以免费用于商业项目可以修改源码可以打包进自己的工具里分发。这一点对独立开发者特别友好。Substance 是订阅制一个月几十美元一年下来几百美元对个人开发者是不小的负担。而且 Substance 的许可证条款比较复杂有些版本对商业收入有门槛限制。开源还有一个隐性好处你可以看到它是怎么实现的。Material Maker 的源码在 GitHub 上节点算法的实现都是公开的。我有时候遇到一个效果不知道怎么实现直接去看源码里对应节点的着色器代码比看文档还快。这种透明度是闭源工具给不了的。6.3 社区生态与学习资源Substance 的教程资源铺天盖地B 站、YouTube 上随便搜都是。Material Maker 的教程相对少但 1.0 发布之后明显多了起来。官方文档写得还算清楚GitHub 的 issue 区也很活跃作者回复挺勤快的。我的学习路径是先看官方文档把节点过一遍然后去 YouTube 搜Material Maker tutorial跟着做两三个案例基本就上手了。遇到具体问题去 GitHub 的 Discussions 区搜大概率有人问过。中文资源方面B 站有几个 UP 主做了系列教程虽然不多但质量还行。提示Material Maker 的官方示例库里有几十个现成的 .ptex 文件涵盖金属、木材、石材、布料等常见材质。把这些文件打开看别人是怎么连节点的是上手最快的方式。我当初就是拆了五个示例文件然后自己就能搭了。7. 我在实际项目里的一些用法和体会7.1 批量生成材质变体程序化材质最大的优势是参数化。我做废弃工厂场景的时候需要十几种不同锈蚀程度的金属材质。如果用 Substance 或者手绘得做十几套。用 Material Maker我只搭了一套网络然后把锈迹遮罩的 Threshold 阈值做成一个参数从 0.3 到 0.7 拉出十几个变体每个变体导出一次。整个过程不到半小时而且所有变体的风格是统一的不会出现某一张特别突兀的情况。具体操作是在 Threshold 节点上右键选择Expose Parameter给它起个名字叫RustAmount。然后这个参数就会出现在工程的参数面板里你可以手动调也可以用脚本批量改。Material Maker 支持命令行调用写个简单的脚本就能批量导出所有变体。这个功能在需要大量材质变体的项目里简直是救命稻草。7.2 和 Blender 的配合流程我的主力 3D 工具是 BlenderMaterial Maker 和 Blender 的配合很顺。流程是在 Material Maker 里做好材质导出六张 PBR 贴图然后在 Blender 的 Principled BSDF 里对应接上。Blender 的 Principled BSDF 的输入端口和 PBR 通道是一一对应的Base Color 接 AlbedoRoughness 接 RoughnessMetallic 接 MetallicNormal 接 Normal需要加一个 Normal Map 节点完美匹配。有一个小技巧Blender 的 Normal Map 节点有一个Strength参数这个值和 Material Maker 里 Normal 节点的 Strength 是叠加的。如果两边都设 1.5最终效果会过强。我的做法是 Material Maker 里设 1.0Blender 里根据需要在 0.5 到 2.0 之间调这样调整更灵活。7.3 给团队新人的上手建议我带过几个新人总结下来学 Material Maker 最快的路径是第一天把官方文档的节点列表过一遍知道每个节点大概干什么第二天拆三个官方示例把每个节点的作用搞清楚第三天自己从零搭一个简单的材质比如木纹或者砖墙第四天尝试做一个带锈迹或者污渍的复杂材质。四天下来基本就能独立干活了。最容易卡住新人的地方是节点思维。习惯了图层和笔刷的人一开始很难理解用噪声去控制另一个噪声这种逻辑。我的建议是把每个节点想象成一个滤镜连线就是把图传给滤镜处理。先别管原理先连出来看效果效果对了再回头理解为什么。程序化材质这东西动手比看书重要得多。7.4 后续可以扩展的方向Material Maker 除了做静态贴图还能做动画材质。它的节点图支持时间参数你可以让噪声随时间流动做出火焰、水流、能量护盾之类的动态效果。导出成序列帧或者视频用在游戏特效或者视频制作里都行。我最近在试做一个流动的岩浆材质用时间参数驱动 Warp 节点让岩浆的纹理缓慢流动效果挺有意思的。另一个方向是和 AI 结合。现在有些工具可以用 AI 生成基础贴图然后导入 Material Maker 做程序化处理。比如用 AI 生成一张岩石的 Albedo然后在 Material Maker 里从这张图反推 Height 和 Normal再叠加程序化的细节。这种AI 打底 程序化精修的流程我觉得是未来的一个趋势效率比纯手工高很多质量又比纯 AI 可控。最后分享一个我个人的小习惯每做完一个材质我都会把 .ptex 文件按材质类型_版本号命名存档同时在文件里用 Comment 节点写上这个材质的关键参数和调整记录。过几个月回头看能快速想起来当时是怎么调的。这个习惯看起来麻烦但省下来的返工时间远超记录的成本。程序化材质是资产资产就需要管理这一点和写代码是一个道理。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →