ArmorPaint:开源PBR贴图绘制实战,替代Substance Painter的轻量工作流
2026/9/14 19:29:55 网站建设 项目流程

做 3D 美术或者独立游戏的朋友应该都有类似的体会:模型雕刻完、UV 展开好,最头疼的就是贴图绘制这一环。用 Substance Painter 确实舒服,但订阅价格摆在那里,个人项目或者刚入门的同学很难说服自己掏这个钱。我后来换到 armorpaint,一用就是两年多,现在手头正经项目的 PBR 贴图基本都是它出的。这款开源软件最打动我的地方,不是"免费"两个字这么简单,而是它把实时绘制、节点材质、图层遮罩这些核心功能完整地揉进了一个只有几十 MB 的工具里,启动快、操作顺手、不联网也能用,配合 Blender 的工作流特别舒服。这篇就从头到尾聊聊 armorpaint 怎么上手、核心玩法怎么理解、我踩过的那些坑,以及目前这套工作流能帮你省下多少事。

1. ArmorPaint 的设计思路:为什么我放弃 Substance Painter 转过来了

1.1 它走的不是"简化版"路线,而是另一套 GPU 实时方案

很多人第一次打开 armorpaint,会觉得界面简陋,跟 Substance Painter 那套密密麻麻的窗口比起来像个小玩具。但用过一阵就会发现,这个软件的核心思路是"实时优先"——所有绘制结果都基于 GPU 计算,你画每一笔,视口里立刻就能看到带光照的反馈,不是等烘焙、等预览,而是所见即所得。

它底层用的是自家 Armory 引擎的渲染管线,支持 Vulkan、OpenGL、Direct3D 等多种后端。我实测下来,在同样一张 4K 纹理上画笔刷,armorpaint 的响应速度明显比我在 Substance Painter 里的旧项目要轻快。原因在于它把笔刷的 Alpha、颜色的混合、法线扰动等操作都放在 GPU 的材质节点图里实时计算,而不是每画一笔就重新生成一整张图再传回显存。这种架构上的差异,决定了它给人的"手感"非常跟手,尤其用手绘板的时候,压感反馈很直接。

另外,armorpaint 的项目文件非常轻。.arm 格式保存的是节点树、图层操作记录和资源引用,不是把所有 8K 图层都原样打包。我做过一个完整场景角色的贴图,工程文件通常几十 MB 到一两百 MB,对比 Substance Painter 那些动辄几个 GB 的工程,省心太多了。

1.2 核心优势:节点材质+图层系统+智能材质,一个都不少

先别被"开源免费"四个字误导,这软件的核心功能完整度相当高。我归纳成三块:

第一是节点材质系统。它内置了一套类似 Blender 的 Shader Node 编辑器,可以从零搭建材质,支持纹理贴图、程序化噪波、颜色渐变、混合运算、UV 扰动等等。这意味着你不光能画贴图,还能用节点程序化地生成大量细节,比如金属边缘磨损、锈迹分布、划痕随机角度,都能用数学运算算出来,省掉无数手动笔刷时间。

第二是图层系统。armorpaint 的图层分几种类型:绘制图层、填充图层、遮罩图层、材质图层。用过 PS 的人对这套逻辑会非常亲切:下面是基础底色,上面叠加锈迹,再叠一层遮罩决定锈迹出现在哪些区域,整个流程非破坏性,随时可以回头调整每一层的透明度、混合模式、颜色。

第三是智能材质。这个类似 Substance Painter 里的 Smart Material,一套材质预设可以带多个图层和遮罩逻辑,一键铺到模型上,立刻得到一套很丰富的 PBR 效果。社区里有人分享各种智能材质预设,也可以自己存。对我来说,这几乎是日常出图最快的路径:导入模型 → 套智能材质 → 手动画细节 → 导出贴图,一个下午能出一套相当能看的材质。

2. 从下载到画出第一笔:ArmorPaint 的安装与基础实操

2.1 下载安装、界面语言与基本环境配置

armorpaint 有多个获取渠道。官方网站是 armorpaint.org,GitHub Releases 页面有各平台打包好的二进制,Windows 版直接解压就能用,不需要安装。Steam 上也有免费版可以下载,好处是能自动更新,省得自己关注 release。我推荐 Windows 用户优先从 GitHub 的 release 页面下载,因为版更及时,而且不会有商店层的额外损耗。

解压后直接运行 ArmorPaint.exe,第一次启动会要求选择图形 API。我试过 Vulkan 和 OpenGL 两个后端,N 卡和 A 卡下 Vulkan 的表现都更好,打开软件快、视口刷新稳;如果你用的是较老的内核显卡或者虚拟机,再切到 OpenGL 兼容模式。Linux 下需要确保系统安装了 Vulkan SDK 相关驱动,否则可能起不来,这个问题后面我在常见问题里还会细说。

armorpaint 支持中文界面,在 File > User Preferences 里切换 Language 为简体中文,重启就生效。这个对英文不太溜的朋友是友好,但我要说一句,很多菜单里保留的英文术语其实更接近行业通用叫法,比如 Fill Layer、Mask、Material Layer,中文界面后反而容易找不到,我建议第一次用可以保持英文,或者中英对照着看。

提示:软件启动时如果弹窗显示 "Missing Vulkan library" 或者 "OpenGL context failed",优先检查显卡驱动。把驱动更新到最新版,大多数问题都能解决,不用急着怀疑软件本身。

2.2 导入模型与项目创建,了解你的第一个工程

启动后默认会加载一个立方体场景。实际使用时,我们一般从 File > Import Mesh 或者直接把 glTF/OBJ/FBX 文件拖进视口来导入模型。我习惯用 glTF 格式,因为 armopaint 对 glTF 的材质槽、UV 集、顶点色支持都比较完整;如果模型是从 Blender 导出的,记得在导出面板勾选"应用修改器"和"UV 展开",免得进入 armorpaint 后修改器还没塌陷,导致布线不是最终形态。

模型导入后,视口里的操作很简单:中间鼠标滚轮是缩放,按住鼠标中键拖拽是旋转视角,Shift+中键拖拽是平移。手绘板用户在设置里开启 Pen Pressure,压感曲线也可以在 User Preferences 里调。项目创建这一步其实不像 Substance Painter 那样弹出一堆模板,armorpaint 的"项目"就是一块画布——你只要设置输出贴图的尺寸、格式和图片序列通道,然后往下走就行。

在导入模型的弹窗里,有一个很关键的 "Resolution" 选项,默认 2048。这个值决定绘制时每张贴图的像素大小。我的建议是模型精细度一般的话,先用 2048 或者 4096,不要一开始就上 8K——因为 armopaint 的实时笔刷虽然快,但 8K 图层一多,显存压力还是很大,而且后面导出也会慢。做场景道具 2048 完全够,主角或者展示级模型再开 4096。

2.3 第一次画一笔:创建图层、选笔刷、画上去

画之前我们先建一个基础的材质节点。右侧面板默认会有一个 Principled 之类的材质节点树,如果你导入的模型自带了材质,节点树会自动生成。我们要做的是在节点树里连接一个 2D 纹理贴图,让笔刷可以画到它上面。

实际操作步骤是这样的:

  1. 在右侧 Node Editor 里,确认材质树中有一个 Image Texture 节点,如果没有,按 Shift+A(或在节点编辑器的 Add 菜单里)新建 Image Texture,然后点击节点的"新建"按钮,设置尺寸(就是分辨率)。
  2. 把 Image Texture 的颜色输出连接到 Base Color 输入上,顺便把它的 Roughness、Metalness 输出连到对应通道,让节点树的基本 PBR 链路通起来。
  3. 在左侧工具栏选择 Paint 笔刷(快捷键 P),点击视口上方新建一个绘制图层。
  4. 在视口里按住左键拖拽,就能看到颜色画上去了。颜色可以在左下角的色轮面板选择,Alt 键可以快速吸取场景中已有颜色。

就这么简单。但这里有个新手最容易搞混的地方:绘制图层和直接画在 Image Texture 上有什么区别?答案是图层的存在让你可以随时回头调整。直接画在纹理上就像在 PS 里把背景图层涂花,改不回来;而绘制图层可以调透明度、换混合模式、删除,甚至用遮罩控制局部显示。所以我永远建议:哪怕只想快速试个色,也先建一个 Paint Layer 再动手。

3. 核心工作流拆解:图层、遮罩、智能材质与贴图导出

3.1 图层的类型与混合逻辑,别把它想成普通笔刷图层

armorpaint 的图层系统比 PS 更贴近材质表现。我把常用的类型做了一个表:

图层类型作用典型使用场景
Paint Layer手动绘制颜色/粗糙度/金属度,可以配合笔刷手动画划痕、污渍、局部颜色变化
Fill Layer对整个模型表面填充一个颜色或纹理铺底色、大面积底色替换
Material Layer覆盖一套独立材质节点,可以带自己的纹理给模型不同区域分配不同材质
Mask Layer作为遮罩控制上层显示的白色区域限制锈迹只出现在凹陷处、划痕只出现在边缘

混合模式上有 Normal、Multiply、Add、Screen 这些基础项,跟 PS 理一致。比如在底色上叠一层 Multiply 的脏污纹理,就会出现很自然的着色效果;在金属层上用 Add 画高光磨损,亮部更亮又不会弄脏底色。我经常用 Multiply 配合程序化噪波给木头添加木纹细节,完全不手动画纹理,全靠节点生成。

这里要特别说下 Fill Layer 的用法。在 Substance Painter 里叫填充层,armorpaint 里也一样:你建一个 Fill Layer,给它设置颜色或纹理,整个模型就全部填上了。这说明画布是模型的 UV 空间,而不是屏幕空间。填完后如果你想让它只出现在局部,就给它套一个遮罩——遮罩层是白色的,你画上黑色,那部分就隐藏,这与图层蒙版的逻辑完全一致。

3.2 遮罩实战:用曲率和环境光遮蔽让细节自动出现

遮罩最强大的玩法,是和纹理生成器结合。armorpaint 支持在遮罩里直接用节点程序化生成噪声、曲率、AO 等数据,用来控制图层显示范围。比如我想让金属边缘有磨损——在 Substance Painter 里需要生成曲率贴图,然后做 mask;armorpaint 里可以直接在 Mask Layer 的节点树里加一个 Curvature 结点,连到 opacity 或者作为遮罩的输入,粗糙金属边缘自动就凸显出来了,完全不用手动沿着边缘一笔一笔描。

我举一个我实际做过的例子。我做一个旧化铁桶:底层是深灰底色,Fill Layer 填一个暗金属材质;上面加一层锈迹 Fill Layer,颜色选橘褐色,混合模式 Normal。然后给锈迹图层套一个 Mask Layer,在这个遮罩的节点树里添加 Noise 和 Curvature,让锈迹集中在边缘和局部凹坑,最后手动在 Mask 上用黑色画笔擦掉不需要的部分。整个流程加起来不到五分钟,效果比我以前在 Substance Painter 手动画精细多了。

提示:遮罩上的黑色画笔就是"橡皮擦"逻辑,但它是非破坏性的。所以画坏了不要慌,直接用白色画笔重新刷回来就行。我建议平时养成一个好习惯:每次手动修改遮罩,都单独加一个 Paint Layer 来画,不要直接在原有的 Mask 节点上改,这样后续调节程序化噪声参数时,手动画的部分不会受影响。

3.3 智能材质:一套预设快速铺满整个模型

智能材质在 armorpaint 里的正式名称是 Material Library 里的预设,通过界面左下角的库里可以浏览。它本质上是一组图层、节点、纹理的打包组合。你可以从系统预设的内存里拖出比如 "锈蚀金属" "破损混凝土" "皮革" 等,直接拖到模型上应用。

我自己的使用习惯是:先用智能材质把大效果铺出来,然后在这个基础上,调整颜色、增加手绘细节、改遮罩分布。这样一个流程下来,哪怕建模本身一般,材质也能撑起整个视觉效果,这在做概念验证或快速出图时候特别有用。

我还会把自己调试好的材质存成智能材质。具体做法是选中材质树根节点,在节点编辑器工具栏点 "Add to library",给它起个名字,下次新项目就能直接在库里找到。我存了大概二十多个常用材质预设,覆盖金属、木头、塑料、石头类,遇到新项目直接"套模板",再针对性地改参数。这个效率提升是非常夸张的。

3.4 节点材质从零搭建:一个锈蚀金属的完整节点链

我想用一个实际的节点组来说明 armorpaint 的程序化能力。下面这个是我经常用的生锈铁板材质节点链:

  1. 基础颜色:一个 Image Texture 加载铁板底色贴图,接到 Principled 的 Base Color。
  2. 锈迹颜色:用 Noise Texture 的 Color 输出,接到一个 MixRGB 节点,把底色和橘褐色混合,Mix 系数接到另一个低频 Noise 的输出,这样形成大块锈斑分布,同时再叠加一个高频 Noise 做细碎锈点。
  3. 粗糙度:把同一个 MixRGB 节点的 Scale 接到后续乘法节点,再连接到 Principled 的 Roughness。锈迹区域光照下会显得更粗糙,所以颜色和粗糙度可以用同一个 mask 控制。
  4. 金属度:把底色 Image Texture 的粗糙度通道反转后接到 Metalness,让铁锈区域金属度为 0,非锈区域保持金属。

这套节点链的原理其实就一句话:让程序化噪声同时驱动多个材质通道,保证颜色和粗糙度、金属度的变化方向一致,真实感就来了。你手动画也可以达到类似效果,但节点的好处是参数实时可调,想改变锈迹密度,动一个 Noise 的 Scale 就够了,不会破坏已经画好的部分。

3.5 导出贴图:和 Blender、Unity 对接时的关键设置

贴图画完,最核心的是导出。armorpaint 的导出入口在 File > Export Textures。面板里能看到要导出的通道列表:Base Color、Roughness、Metalness、Normal、Height、AO、Opacity 等,每个通道可以选择导出格式 PNG、JPEG、EXR、WebP 等。分辨率可以选择原始大小,也可以输出 2K/4K/8K。我一般:

  • Base Color、Roughness、Metalness、Normal 选 PNG(无压缩丢失)
  • 如果要用 AO、Height,也 PNG
  • 需要 HDR 数据时选 EXR

导出后,在 Blender 里新建 Principled BSDF,把对应贴图按颜色、粗糙度、金属度、法线连进去即可。注意法线贴图的色彩空间要设置为 Non-Color,糙度和金属度也是 Non-Color,只有 Base Color 保持 sRGB。这一点在 Blender 里连错过大概率颜色发灰或发亮,排查挺常见的。

跟 Unity 对接时,armpaint 导出的贴图已经按 PBR 通道拆好了,直接拖进材质面板的对应槽位就行。要注意法线贴图的导入设置,Unity 里需要把 Texture Type 设为 Normal Map,否则光影是错的。这些虽然不算 armopaint 特有的坑,但很多人第一次从 armopaint 导出后在引擎里看效果不对,九成都是色彩空间设置问题,我先放在这里提醒一下。

4. 实操中遇到的坑与排查技巧:从卡顿到接缝再到崩溃

4.1 视图卡顿、笔刷延迟,问题不一定在软件本身

armorpaint 以轻快著称,但也不是没卡过。我遇到过一次比较严重的延迟:4K 底图 + 多图层 + 智能材质时,笔刷落下去要等半秒钟才出来笔触,完全没法工作。排查之后发现原因有三个:

一是视图里的实时预览分辨率过高。在 Viewport 设置的 Resolution 可以从 0.25 到 1.0,调低预览分辨率并不影响最终导出质量,只是让你更好操作。我降低到 0.5 后流畅度立刻回来。

二是开启了多视图或者同时开了材质预览窗口。这会让显存压力成大,建议普通项目只保留单视图,配合材质节点编辑器工作。

三是电脑没开硬件加速。armorpaint 的实时笔刷本质就是 GPU 计算,如果你的电脑显卡驱动有问题,或者在虚拟机、远程桌面环境下运行,根本吃不到 GPU 加速,卡成幻灯片也正常。确认方法很简单:看软件左下角是否显示使用 Vulkan/D3D 设备,并确认显存占用在任务管理器里正常跳动。

另外,笔刷延迟还有一个很容易忽略的问题:画笔的 Airbrush 模式。如果你不小心开启了持续喷枪效果,笔刷即使没有移动也会持续往纹理上叠加颜色,看起来就像延迟。在笔刷属性里把 Airbrush 关掉,或者降低 Flow 和 Spacing,手感会清爽很多。

4.2 UV 接缝、拉伸与导出瑕疵的排查思路

接缝问题多半不是 armorpaint 的锅,而是模型导入前 UV 没有处理好。我踩过最典型的坑是从 Blender 导出一个 UV 没有展开的游戏资产,进 armorpaint 后笔刷怎么画都像在"抹奶油",颜色拉得很开。后来我意识到,这是 UV 重叠或者 islands 之间有较大拉伸导致的。

解决的办法,在 Blender 里给模型执行智能 UV 展开(智能项目或手动展开),检查棋盘格显示没有明显拉伸,再导出 glTF/OBJ。另外注意 armorpaint 的视图纹理显示是基于 UV 的,如果你的模型有多个 UV 通道,导入时需要选择正确的 UV 集,否则画在错误的 UV 上,导出当然对不上。

导出接缝处出现白线或者漏底色,则是纹理边缘 padding 不够导致的。armorpaint 导出面板里有 "Dilate" 选项,可以控制贴图和边缘扩张多少像素。默认值我记得不是很高,我习惯调到 8 或者 16,接缝问题基本就消失了。特别是在合批压缩后的纹理集中,外扩像素低会看到明显接缝,调高 Dilate 是标准操作。

还有一个细节是,如果你用了 Tiling UDIM 工作流,armorpaint 也支持多象限纹理,但是导出时要注意勾选 "UDIM" 选项,并确认每个 tile 对应的 UV 象限正确。我自己用 UDIM 的情况不多,但做高精度角色时确实用过 2x2 UDIM,armorpaint 可以直接管理和导出多张 tile 贴图,这一点做得挺完善的。

4.3 崩溃与文件保存:曾经丢失两小时进度的惨痛教训

开源软件稳定性确实比商业付费软件差一些,armorpaint 偶尔会崩溃,尤其是在切换图形 API 或加载过大纹理的时候。我有一次因为没保存,模型材质做了两小时,一个崩溃全没了,从那以后我对工程文件管理变得格外小心。

现在我的操作习惯是这样的:

  • 每做 20 到 30 分钟,按一次 Ctrl+S,这不花多少时间,但能救命。
  • 每次导出贴图前,先另存一个 .arm 版本,比如 myproject_v02.arm,防止导出过程或后续修改改坏了没法回退。
  • 重大阶段(比如做完全部智能材质、画完整套细节)都另存版本,既有递增备份,又方便后面对比。

另外一个冷知识:armorpaint 的自动保存默认间隔是 5 分钟,但我建议在 User Preferences 里把自动保存打开,并设置 2 分钟。默认的文件位置在项目的同目录或者缓存目录,可以在设置里查看具体路径。这样即使崩溃,最多丢失两分钟以内的工作内容,不会再有"两小时白干"的事情发生。

5. 我个人的一些小技巧与使用习惯

到这里核心功能都过了一遍,最后分享几个我用 armorpaint 比较顺手的私人技巧,不算全面,但都是实际体验中沉淀下来的。

第一,把颜色挑选面板固定在一个方便的位置。armorpaint 默认颜色面板比较小,但你可以把它当独立的浮动窗口拉出来,配合色环快速取色。我习惯左手拿键盘,右手画板,Alt 键吸色特别好使,整个流程基本不用挪动鼠标到色板区域。

第二,多用快捷键。armorpaint 的快捷键跟 Blender 很像,很多操作可以直接用快捷键触发。比如 B 切换笔刷,G 切换填充层,M 切换材质层。我是从 Blender 转过来的,几乎零学习成本。老手可以专门花十分钟把常用操作快捷键过一遍,收益非常明显。

第三,处理金属材质时,我会把 Roughness 和 Metalness 放在同一个绘制图层来控制。实际上 armorpaint 每个 Paint Layer 是可以指定输出到哪个图片通道的。比如画笔的 Metalness 强度设为 1,就只画金属度通道;设成 -1 就变成刮掉金属度,这在做磨损表现时特别方便。你不需要建一大堆图层来分别管理颜色、粗糙度、金属度,一个图层就能同时控制多个通道的数值,前提是你在笔刷属性或图层属性里把通道开关打开。

第四,使用摄像头贴花(Decal)功能。在笔刷工具组里,有一个 "Project" 笔刷,可以从视口法线方向投影贴图到模型表面。这个适合做 logo、编号、警示标志这类贴花。我会提前做好带 Alpha 透明的贴图,选择 Project 笔刷并加载贴图,直接在曲面上一拖就贴好。避免用普通笔刷一笔一笔描边。

这些技巧单看都不是什么惊天动地的功能,但组合起来,日常工作效率提升非常明显。特别是通道控制和图层非破坏性这两点,让我回头再用其他软件时总觉得不够自由。

armorpaint 这个工具在这两年里逐渐从一个小众实验项目变成了相当实用的 PBR 贴图解决方案,至少在我的工作流里,它已经完全可以替代商业软件的角色。如果你也是个人开发者、独立美术或学生党,想找一款轻量、免费、出图质量能打的绘制软件,真的很值得在下一个项目里试试它。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询