什么是程序化贴图?
程序化贴图意味着描述表面是如何生成的,而不是画出它看起来的样子。你构建的不是像素,而是一小组规则——某个尺度上的噪波、扭曲的程度、在模型凹陷处变暗——材质由这些规则生成。改动一条规则,整个表面就会重新推导出来。
简短回答
程序化材质由一张节点图搭建而成:生成器节点产生图案,滤镜节点对其塑形,混合节点将它们组合,输出结果成为表面的 PBR 通道。由于每一步都保持实时可调,这样的材质与分辨率无关、可以无限调整,并且能在不同模型间复用——不像手绘贴图,像素一旦落下就固定了。

规则而非像素
手绘贴图是一张图片:一个像素网格,画了什么就是什么。程序化贴图则是一份配方。它说的是类似这样的话:「先用横向八块的细胞噪波作为起点,稍微扭曲一下让格子不那么规则,把它当作灰缝图案,再在模型环境光遮蔽较高的地方把灰缝调暗。」在被计算出来之前,没有任何东西是以图像的形式存储的。
这个区别带来了实际的好处。因为材质是一份描述,它可以在任意分辨率下渲染而不会变糊——同一张节点图,用同一套规则既能产生 512px 的预览,也能导出 4K 成品。因为它是参数化的,「把瓷砖做大一点」只是拖动一个滑块,而不必重新绘制。也因为它只是一份描述,它不与某一个模型绑定:同一张节点图应用到不同的网格上,也会为那个形状生成合适的结果。
节点图究竟是如何工作的
程序化材质几乎总是以节点图的形式来制作,因为一份配方天然就是一连串步骤。节点大致可以分成几类。生成器凭空创造出东西——分形噪波、细胞或 Voronoi 图案、渐变、条纹。滤镜接收一个输入并对其重新塑形——模糊、色阶、曲线、色相和饱和度调整,还有把图案推来推去、让它不再显得机械规整的扭曲。混合节点接收两个输入,通过某种模式或遮罩把它们组合起来。
节点图最终汇入一个输出节点,把结果映射到各个 PBR 通道:这条分支驱动基础色,这条驱动高度,这条驱动粗糙度。由于各个通道是由共享的上游节点一起制作出来的,它们能保持一致——让某处凸起的同一处噪波,也能在完全相同的位置让表面变粗糙、颜色变暗,这正是程序化材质读起来像一个统一的物理表面,而不是四张互不相关贴图的原因。
让节点图显得「聪明」的关键一步,是把网格自身的数据输入进去。从模型烘焙出环境光遮蔽、曲率、凹陷和坡度,这些贴图就会成为节点图的输入——于是「缝隙里的污渍」变成了一个由遮蔽贴图作遮罩的混合,「边缘掉漆」变成了一个由曲率贴图作遮罩的混合。材质就此能适应你应用它的任何形状。
程序化与手绘的对比
在表面具有内在逻辑的地方,程序化更有优势:砖块、瓷砖、织物纹理、划痕金属、在低洼处积聚的铁锈、每条边缘上的磨损。这些表面都是规则驱动的,需要覆盖大面积又不能有明显的重复感,而且事后仍可调整这一点对它们帮助巨大。
在表面承载着某种意图的地方,手绘更有优势:一处讲述故事的具体污渍、精确位置上的一个标志、主视觉资产上刻意安排的美术指导。没有哪张节点图能把一道划痕恰好放在故事需要的位置上。
实际操作中,几乎每一个出色的材质都同时具备两者。通常的做法是先用程序化的方式打好基础,让它能覆盖并自适应,再在上面手绘具体细节——这也是为什么程序化材质和手绘图层能共处同一个堆栈、而不必分属不同应用程序如此重要。
无需安装任何东西即可上手
过去,程序化制作意味着一个专门的桌面应用和一份许可证。Mixos 在浏览器中内置了一个节点式材质编辑器:添加一个节点材质图层,把生成器经由滤镜连接到混合节点,当节点图在你的 GPU 上计算时,结果会实时地在你的模型上解析出来。
由于节点图是一个图层,而不是一份独立文档,你可以给它加遮罩、和其他图层混合,也可以在上面继续绘制——程序化打底加手绘细节的工作流程,中间不需要任何导出步骤。
制作任何程序化内容的最后一步,都是决定哪些部分要保持可调。在 Mixos 中,这一步叫发布:点击参数旁的滑块图标,它就会变成材质上的一个变量,你可以重命名、分组,并给出合理的取值范围。这些已发布设置会出现在图层自己的面板上,因此即使在你早已不再考虑背后的节点图之后很久,完成的材质依然只剩下几个有意义的参数旋钮——瓷砖尺寸、磨损程度、颜色。
常见问题
用简单的话说,什么是程序化贴图?
简单来说,就是用规则而不是像素来制作材质。你描述表面是如何生成的——图案、扭曲、混合——由计算机生成图像。改动一条规则会重新生成整个材质,因此在导出之前,一切都没有被固定下来。
程序化贴图比手绘贴图更好吗?
两者并无高下之分,解决的是不同的问题。对于有规律、需要覆盖大面积并保持可调的表面,程序化更合适;对于刻意安排的具体细节,手绘更合适。大多数生产用的材质都是用程序化打底,再在上面手绘细节。
程序化贴图能无缝平铺吗?
一般来说是的——生成器节点通常都会在瓷砖边缘做环绕处理,因此输出结果从原理上就能无缝平铺。这也是程序化材质被广泛用于地形、墙面、地板等大面积表面的一个主要原因。
搭建节点图需要很懂技术吗?
比你想象的要少。它的思维模型是一串简单步骤,大多数材质只会用到少数几种节点类型。比起从空白画布开始搭建,更好的入门方式是先打开一个现成材质的节点图,改动一些东西看看会发生什么。
程序化材质能对模型的形状做出反应吗?
可以,而且这正是让它们看起来可信的关键技巧。从网格烘焙出环境光遮蔽、曲率等贴图,把它们作为遮罩输入节点图,污渍就会自动沉积在凹陷处,磨损也会自动出现在边缘,无论这些特征在具体模型上位于何处。
什么是暴露参数,或者说材质的变量?
一张节点图里可能有成百上千个数值,但对使用材质的人来说,真正重要的只有少数几个——瓷砖尺寸、磨损程度、颜色。暴露参数(Mixos 称之为发布)把这些数值从节点图中提取出来,变成材质本身上带有各自取值范围的命名变量,这样任何人都不需要阅读节点图就能重新调整材质。这正是可复用材质和一次性材质的区别所在。
在浏览器中用节点搭建程序化材质——免费,任何账户皆可使用,还能在你自己的模型上实时预览。