1. ArmorPaint 1.0 到底是个什么东西
ArmorPaint 这个名字,在 3D 纹理绘制圈子里其实已经不算新面孔了。它最早是以“开源版 Substance Painter”的定位进入大家视野的,核心卖点很直接:让你在 3D 模型表面直接画画,就像在纸上涂鸦一样自然,但画出来的东西是带 PBR 材质的、能直接进游戏引擎或渲染器的贴图。1.0 版本之所以让不少人等了又等,是因为它从最早的实验性工具,一路迭代到如今终于把节点系统、笔刷引擎、图层管理和导出管线都打磨到了能正经干活的程度。
简单说,ArmorPaint 解决的是“3D 模型表面纹理绘制”这件事。传统流程里,你要么在 Photoshop 里对着 UV 展开图盲画,要么花大价钱买商业软件。ArmorPaint 给了一条新路:实时 3D 视图下直接绘制,笔刷落点所见即所得,支持 PBR 通道分离,还能用节点系统做程序化纹理。它适合谁?独立游戏开发者、3D 爱好者、想从零学纹理绘制的新手,以及那些预算有限但不想在质量上妥协的小团队。
我最早接触它是在 0.8 版本,那时候笔刷延迟还比较明显,节点系统也经常崩。1.0 出来后我第一时间拉下来跑了几个项目,变化确实大。这篇文章我会从整体设计思路、核心功能拆解、实操流程、常见问题几个角度,把 ArmorPaint 1.0 的里里外外讲清楚。不管你是刚听说这个名字,还是已经用过旧版本,都能找到对你有用的东西。
2. 整体设计思路与核心架构拆解
2.1 为什么选择“实时绘制 + 节点程序化”这条路线
ArmorPaint 的底层逻辑其实不复杂:它把 3D 模型表面当成一块画布,你每画一笔,系统就实时计算这笔落在哪个 UV 坐标上,然后更新对应纹理像素。听起来简单,但要做到流畅,背后涉及 GPU 加速、笔刷投影算法、图层混合模式等一系列工程问题。
它选择“实时绘制 + 节点程序化”双轨并行,是有明确考量的。纯手绘纹理灵活但费时,纯程序化纹理高效但缺乏个性。ArmorPaint 让两者共存:你可以用笔刷画细节,也可以用节点生成基础纹理,再用手绘去叠加变化。这种混合工作流在商业软件里也有,但 ArmorPaint 把它做成了开源方案,而且 1.0 版本的节点系统已经支持自定义节点组,可复用性大大提升。
另一个关键设计是“非破坏性图层”。每个笔刷笔触、每个填充、每个节点输出都作为独立图层存在,你可以随时调整透明度、混合模式、遮罩,甚至回头改节点参数。这意味着你不需要一次性画对,可以反复试错。对于纹理绘制这种高度依赖视觉反馈的工作来说,非破坏性几乎是刚需。
2.2 核心模块与数据流转
ArmorPaint 1.0 的架构可以粗略分成四层:输入层、绘制层、节点层、输出层。输入层负责导入模型和贴图,绘制层处理笔刷和图层,节点层做程序化生成和滤镜,输出层负责烘焙和导出。
数据流转是这样的:你导入一个带 UV 的模型,系统为每个材质通道(基础色、粗糙度、金属度、法线等)创建独立的纹理缓冲区。你在 3D 视图里画一笔,笔刷根据当前视角和模型法线计算出投影区域,然后写入对应缓冲区。节点层可以读取这些缓冲区,也可以生成新的纹理,再写回缓冲区。最后导出时,所有缓冲区按通道打包成贴图文件。
这个流程里最容易被忽视的是“UV 接缝处理”。ArmorPaint 1.0 在笔刷投影时做了接缝补偿,但如果你模型 UV 分得特别碎,接缝处还是可能出现笔触断裂。我的经验是,导入模型前先在 Blender 里检查 UV 岛分布,尽量把接缝藏在视觉不敏感的区域,比如角色腋下、物体底面。
2.3 与同类工具的差异化定位
市面上做纹理绘制的工具不少,ArmorPaint 的差异化主要体现在三点:开源、轻量、节点系统。开源意味着你可以自己改代码,社区也在持续贡献笔刷和节点预设。轻量体现在安装包只有几十兆,启动速度快,对硬件要求相对友好。节点系统则是它区别于普通绘画软件的核心,让你能用程序化方式生成复杂纹理。
不过它也有明显短板。比如笔刷引擎的细腻程度还比不上商业软件,尤其是需要模拟传统媒介质感的时候。再比如导出管线虽然够用,但批量处理能力较弱。我的建议是,如果你做的是风格化项目或者独立游戏,ArmorPaint 完全能胜任;如果追求影视级写实纹理,可能需要配合其他工具一起用。
3. 核心功能细节与实操要点
3.1 笔刷引擎:从基础设置到进阶技巧
ArmorPaint 1.0 的笔刷系统比旧版丰富了很多。基础参数包括半径、硬度、强度、间距,这些和大多数绘画软件类似。但有几个参数值得特别关注:法线衰减控制笔刷在模型曲面上的投影范围,视角补偿决定笔刷是否随视角倾斜而拉伸,抖动可以给笔触增加随机偏移。
我实测下来,画硬表面细节时,把法线衰减调到 0.3 左右,视角补偿关掉,笔触会更精准。画有机体表面时,法线衰减调到 0.7,视角补偿打开,笔触过渡更自然。抖动参数建议不要超过 0.15,否则笔触会显得太散。
笔刷导入方面,ArmorPaint 支持 PNG 和 EXR 格式的笔刷贴图。你可以把自己在 Photoshop 里做的笔刷导进来,但要注意 alpha 通道要干净,否则边缘会有灰边。我一般会在导入前用 GIMP 把笔刷贴图的边缘羽化一下,效果会好很多。
注意:ArmorPaint 的笔刷贴图默认按灰度读取,如果你导入的是彩色笔刷,它会自动转灰度。想要保留颜色信息,需要在笔刷设置里勾选“使用颜色贴图”。
3.2 图层与遮罩:非破坏性工作流的核心
图层系统是 ArmorPaint 1.0 最让我满意的部分。每个图层可以独立设置混合模式、透明度、遮罩,而且支持图层组和剪贴蒙版。混合模式有常见的正片叠底、滤色、叠加、柔光等,基本够用。
遮罩的用法很灵活。你可以用笔刷在遮罩上画,也可以用节点生成遮罩,还可以导入外部贴图作为遮罩。我常用的一招是:先用节点生成一个噪波遮罩,然后用笔刷在遮罩上局部擦除,这样能做出既有程序化规律又有手工变化的磨损效果。
图层组和剪贴蒙版配合使用,可以做出很复杂的材质叠加。比如做一个生锈的金属:底层是金属基础色,上面加一个锈迹图层,锈迹图层用剪贴蒙版限制在金属图层范围内,再给锈迹图层加一个噪波遮罩控制分布。这样改金属颜色时,锈迹会自动跟着变,不用重新画。
3.3 节点系统:程序化纹理的威力
节点系统是 ArmorPaint 1.0 的杀手锏。它支持输入节点、生成节点、滤镜节点、混合节点、输出节点五大类。输入节点可以读取模型信息(如法线、位置、UV)或外部贴图;生成节点包括噪波、渐变、棋盘格、砖块等;滤镜节点有模糊、锐化、扭曲、色彩校正等;混合节点负责把多个纹理按不同模式合并。
我常用的一套节点组合是:位置节点 + 噪波节点 + 色彩渐变节点 + 混合节点。位置节点输出模型表面坐标,噪波节点基于坐标生成随机图案,色彩渐变节点把噪波值映射到颜色,混合节点把结果叠加到基础色上。这套组合能快速做出岩石、土壤、锈迹等自然纹理。
节点组功能允许你把常用节点组合打包成一个自定义节点,下次直接调用。我建议新手先从修改预设节点组开始,熟悉了再自己搭建。ArmorPaint 社区里有很多现成的节点组,比如“智能材质”“磨损生成器”,可以直接下载使用。
提示:节点系统的计算是实时的,但复杂节点组会拖慢预览速度。如果觉得卡顿,可以在节点设置里降低预览分辨率,或者把不常用的节点暂时禁用。
3.4 导出与烘焙:从 ArmorPaint 到游戏引擎
导出环节是很多新手容易踩坑的地方。ArmorPaint 1.0 支持导出 PNG、TGA、EXR 等格式,可以按通道导出,也可以打包成一张贴图。导出前需要确认几件事:模型 UV 是否正确、贴图分辨率是否匹配项目需求、颜色空间是否设置正确。
颜色空间这块特别容易出问题。基础色贴图通常用 sRGB,粗糙度、金属度、法线贴图用 Linear。如果搞反了,贴图进引擎后颜色会明显不对。ArmorPaint 在导出时可以分别设置每个通道的颜色空间,我一般会建一个导出预设,把常用配置存下来,下次直接调用。
烘焙功能在 1.0 里也有增强。你可以把高模细节烘焙到低模的法线贴图、环境光遮蔽贴图、曲率贴图上。烘焙质量取决于模型匹配度和采样数。我的经验是,采样数至少开到 128,模型匹配度要尽量高,否则烘焙结果会有瑕疵。烘焙完成后,建议在 ArmorPaint 里直接预览一下,确认没问题再导出。
4. 完整实操流程:从零做一个写实金属材质
4.1 模型准备与导入检查
先准备一个带 UV 的模型。我用 Blender 做一个简单的金属圆盘,UV 展开后用 ArmorPaint 导入。导入时注意检查模型缩放,ArmorPaint 默认按米为单位,如果模型尺寸不对,笔刷大小会显得很奇怪。导入后先转一圈视角,看看有没有明显的 UV 接缝或法线错误。
如果模型有多个材质槽,ArmorPaint 会为每个材质槽创建独立的纹理集。我一般会把相同材质的部件合并到一个材质槽里,减少纹理集数量,方便管理。导入完成后,先保存一个项目文件,后面所有操作都会自动保存。
4.2 基础色与粗糙度绘制
新建一个填充图层,给基础色一个深灰色,粗糙度给 0.4 左右。然后新建一个绘制图层,选一个带噪波的笔刷,把粗糙度调到 0.6,在模型表面随机画一些划痕。划痕不要画得太均匀,要有疏有密,这样才自然。
接着用节点系统生成一个锈迹遮罩。位置节点接噪波节点,噪波节点接色彩渐变节点,调整渐变曲线让锈迹集中在模型边缘和凹陷处。把锈迹遮罩应用到基础色图层上,基础色会变成锈红色。再复制一份锈迹遮罩,稍微模糊一下,应用到粗糙度图层上,让锈迹区域的粗糙度变高。
4.3 法线细节与磨损叠加
法线细节可以用笔刷直接画,也可以用节点生成。我习惯用笔刷画一些大的凹痕,再用节点生成细密的划痕。笔刷画凹痕时,把笔刷模式改成“法线”,强度调到 0.3 左右,轻轻画几笔就行。节点生成划痕时,用噪波节点加方向模糊,再通过法线混合节点叠加到现有法线上。
磨损叠加是让材质变真实的关键。新建一个图层,混合模式改成“叠加”,用白色笔刷在模型边缘画一圈,模拟边缘磨损。然后把图层透明度降到 0.5,再用遮罩限制一下范围,避免磨损太均匀。我还会在磨损区域加一点金属度变化,让磨损处露出底层金属。
4.4 导出设置与引擎导入验证
导出前先确认所有通道都正确。基础色用 sRGB,粗糙度、金属度、法线用 Linear。分辨率根据项目需求选,一般 2K 够用,4K 更精细但文件更大。导出格式选 PNG,法线贴图选 16 位,其他 8 位就行。
导出后导入游戏引擎验证。我用的最多的是 Godot 和 Unity。导入后检查贴图连接是否正确,特别是法线贴图的绿色通道方向,不同引擎要求可能不一样。如果发现颜色偏差,先检查颜色空间设置,再检查引擎的材质设置。确认没问题后,这个材质就可以复用到其他模型上了。
5. 常见问题与排查技巧实录
5.1 笔刷延迟与卡顿排查
笔刷延迟是 ArmorPaint 用户反馈最多的问题。原因通常有三个:模型面数太高、纹理分辨率太大、显卡驱动太旧。排查时先看模型面数,超过 50 万面的模型建议在 Blender 里减面后再导入。纹理分辨率建议从 2K 开始,确认流畅后再升 4K。显卡驱动去官网更新到最新版,尤其是 N 卡用户,Studio 驱动比 Game Ready 驱动更稳定。
如果以上都没问题,检查 ArmorPaint 的设置。把“实时预览”分辨率调低,关闭“抗锯齿”,减少“撤销步数”。我实测下来,撤销步数从 50 降到 20,流畅度提升很明显。另外,项目文件不要放在机械硬盘上,SSD 能显著减少加载和保存时间。
5.2 贴图接缝与颜色偏差处理
贴图接缝问题多半出在 UV 上。ArmorPaint 的笔刷投影算法虽然做了接缝补偿,但 UV 岛之间距离太近或角度太刁钻时还是会出问题。解决办法是在 Blender 里重新排布 UV 岛,让接缝尽量藏在视觉死角。如果接缝已经存在,可以用“克隆笔刷”跨接缝修补,或者导出后在 Photoshop 里用“偏移”滤镜处理。
颜色偏差通常和颜色空间有关。ArmorPaint 默认按 sRGB 显示,但导出时如果通道颜色空间设错,进引擎就会偏色。我的排查顺序是:先确认 ArmorPaint 导出设置,再确认引擎导入设置,最后检查显示器色彩配置。如果三者都正确,颜色基本不会有大问题。
5.3 节点系统报错与性能优化
节点系统报错常见于节点连接循环或参数超出范围。排查时先看节点图有没有形成闭环,再看每个节点的参数是否在合理区间。比如噪波节点的“缩放”参数如果设为 0,就会导致计算异常。遇到报错时,可以逐个禁用节点,定位问题节点。
性能优化方面,复杂节点组建议拆分成多个简单节点组,分步计算。预览时可以把节点组的“预览分辨率”调低,导出时再调高。如果节点组里用了大量模糊或扭曲滤镜,考虑用烘焙代替实时计算,把结果烘焙成贴图后再使用。
5.4 导出失败与文件损坏预防
导出失败通常是因为磁盘空间不足或文件路径包含特殊字符。导出前确认目标磁盘至少有 2 倍贴图大小的剩余空间,文件路径尽量用英文和数字,避免中文和空格。如果导出 EXR 格式失败,可能是显卡不支持某些压缩方式,换成 PNG 或 TGA 试试。
文件损坏预防方面,建议开启 ArmorPaint 的自动保存功能,保存间隔设为 5 分钟。项目文件不要直接放在同步盘里,同步过程中可能造成文件锁冲突。我一般会在本地建一个项目文件夹,定期手动备份到移动硬盘。如果项目文件已经损坏,可以尝试用 ArmorPaint 的“恢复”功能,它会从临时文件里重建项目。
6. 我个人的使用体会与后续扩展思路
ArmorPaint 1.0 给我的感觉是“终于能干活了”。旧版本那些让人抓狂的崩溃和延迟,在 1.0 里基本消失了。节点系统的成熟让它从“玩具”变成了“工具”,尤其是节点组功能,让我可以把常用材质逻辑封装起来,下次直接调用,效率提升很明显。
如果你刚开始用,我的建议是先别急着做复杂材质。找一个简单的模型,把笔刷、图层、节点、导出这四个环节各跑一遍,熟悉基本操作。然后找一个现成的节点组,拆开看它是怎么连接的,试着改参数看效果变化。最后再自己从零搭一个材质,遇到问题就查社区文档或论坛。
后续扩展方面,ArmorPaint 支持脚本插件,你可以用 JavaScript 写自定义节点或自动化流程。我最近在写一个批量导出脚本,把项目里所有材质集自动导出成引擎可用的格式。另外,ArmorPaint 的社区一直在更新笔刷和节点预设,定期去逛逛能发现不少好东西。
这个工具后续还可以和 Blender 的几何节点结合,用几何节点生成模型细节,再用 ArmorPaint 画纹理,整个流程都在开源工具链里完成。对于独立开发者来说,这套组合的性价比很高。我目前正在尝试把 ArmorPaint 集成到我的游戏资产管线里,等跑通几个项目后再来分享完整流程。