从拿到一个空白低模到能放进引擎里看效果,以前我最怕的就是贴图这一步。直到我把 armorpaint 真正用进日常流程,才意识到原来画贴图可以这么直接——不需要反复UV排版,不需要等CPU烘焙半天,打开软件、拖进模型、选个颜色就能直接在模型上落笔,而且整个过程顺滑得不像开源软件。
armorpaint 不是又一个“免费的 Substance Painter 替代品”,它本质上是把纹理绘制这件事的底层思路整个换掉了。这篇文章我想从一个实际使用者的角度,把这个项目从头到尾拆开来讲:它到底是什么、为什么快、踩过哪些坑、以及怎么把它的输出接到 Blender 和游戏引擎里用。不管你是刚入行的场景美术,还是自己折腾独立游戏的老哥,这篇应该都能帮你少走不少弯路。
1. 项目整体解读:它不只是一个画笔工具
1.1 先搞明白 armorpaint 到底做了什么
很多第一次接触的人会把它当作普通三维绘图软件,但真正用进去之后你会发现,它最颠覆的一点是把“绘制纹理”这件事从依赖 CPU 的逐像素计算,换到了 GPU 上实时跑。简单说,你在模型表面看到的就是最终结果,颜料落在哪里、颜色怎么过渡、金属度怎么变化,全都在视口里实时反应出来。
这个项目本身是开源的,基于 Kha 引擎开发,Kha 是一套跨平台的多媒体框架,而且是用 Haxe 写的。这一点很有意思,因为 armorpaint 用的不是传统意义上的 OpenGL / DirectX 直调,而是通过 Kha 封装了一层。它的实时绘制核心是基于图像投影的算法,意思是每次笔刷落下的地方,软件会把你画笔的印记投射到模型的 UV 空间里,像盖章一样把结果写进纹理图集里。
因为所有计算都在 GPU 端做,所以哪怕模型有几百万面,只要显存扛得住,绘制起来都很流畅。这和 Substance Painter 那种“一边显示一边等后台更新”的体验完全不同,armorpaint 是真正意义的零延迟反馈。
我自己第一次用的时候,最大的感受是——软件启动特别快,界面干净得吓人,没有一堆浮动面板。它把大量参数都收进了快捷键和右键菜单里,习惯之后,效率非常高;不习惯之前真的一脸懵。但这个“学习成本”值得付,因为一旦顺手了,画贴图这件事就从“流程任务”变成“纯创作”。
如果你熟悉 Blender 的 Texture Paint,可以这么理解:Blender 的绘制模式是搞一个 brush 半径、颜色,然后慢慢刷,看 CPU 实时更新。而 armorpaint 直接换了引擎,把绘制本身实时化、图集化、还有完整的材质图层系统。这就不是“更好用的 Texture Paint”,而是从架构上重新设计的工具。
1.2 为什么要用 GPU 绘制,而不是传统 CPU 绘制
要理解这个问题,得先知道传统绘制是怎么干活儿的。以前在 Blender 里绘制贴图,本质上是把 2D 笔刷映射到 3D 模型表面,然后 CPU 计算交点、取 UV、写像素。如果你的贴图分辨率是 4K,刷一笔下去可能就要更新几万个像素,CPU 的计算压力全堆到主线程,卡顿几乎必然发生。
armorpaint 的做法是:直接让显卡参与像素写入。你笔刷一落下去,GPU 的着色器直接计算模型这一块的投影坐标,然后把颜色数据写入材质缓冲和纹理缓冲。这个过程是并行的,每一帧都在刷新,所以你看到的就是实际结果。
这套架构带来的另一个好处是:支持即时贴图预览。你可以随便改光照角度、改环境贴图,看到金属拉丝、粗糙度变化在不同光照下的最终效果。质量不会骗人,画完就是渲染出来的样子,不用导到别的引擎里才发现哪里不对劲。
但也因为这个原因,它比较吃显存。贴图集 4096×4096,再加个 2048 的烘焙 AO,偶尔塞个 4K 环境贴图,如果你还在用老款 2G 显存的卡,开到最大画布的时候就可能会烙。我的经验是 8G 显存是起点,16G 就比较从容了。
1.3 armorpaint 在 PBR 流程里的定位
现在 PBR 已经是游戏行业的默认标准,armorpaint 的核心输出就是一套 PBR 贴图:基础色(Base Color)、金属度(Metalness)、粗糙度(Roughness)、环境光遮蔽(AO)、高度(Height)、法线(Normal)。这套贴图和 SolidWorks、Substance Painter、Marmoset 输出的语义是一致的。
它的默认着色器模型是PBR Direct,类似 UE 的线性工作流。工具里提供了 principled 风格的材质节点,但普通用户不需要懂原理,你只需要知道:在 armorpaint 里调整材质时,调的是“金属度”“粗糙度”这种物理属性,而不是“高光强度”“反射颜色”这类老式参数。
所以,如果在 armorpaint 里画金属,你需要把金属度拉到几乎全黑白色阶的高位,然后粗糙度决定亮度;而画皮肤之类的东西,就得让金属度全黑,粗糙度控制反光范围。这些玩习惯 Substance 的人会秒懂,从传统材质思维转过来的人可能要适应一下。
这个软件的定位很清楚:它不是重量的雕刻软件(尽管有基础高度绘制),不是重构拓扑的工具(尽管能导入并检查模型),它就是用来干一件事的——把完整的 PBR 材质非常直观地画到模型表面。它的设计哲学是减少中间的“翻译”过程,你想让哪里生锈,直接把笔刷怼上去,立刻看到生锈以后的样子。
2. 环境设备准备与核心操作逻辑
2.1 跑起来需要什么样的硬件和软件
如果你是做个人项目,或者在公司流程里当补充工具用,armorpaint 的硬件要求其实非常亲民。它支持 Windows、macOS、Linux,官方也发布了 Steam 版本(收费)和 GitHub 上的开源版本(免费,但更新稍慢一点)。两个版本内核一致,Steam 版会自动更新,免费版需要自己留意 release。
硬件方面,我的建议如下:
| 硬件项 | 最低要求 | 推荐配置 |
|---|---|---|
| 显卡 | 支持 OpenGL 3.3 以上的独显 | GTX 1060 / RX 580 以上,4G 以上显存 |
| CPU | 双核即可 | 四核以上,模型导入烘焙快一点 |
| 内存 | 8G | 16G,开多个贴图集更从容 |
| 存储 | 几百MB 安装空间 | 无特殊要求 |
内存影响的是撤销栈。armorpaint 支持多级撤销,但撤销快照存在内存里。如果你贴图是 4K,又画了上百笔,撤销栈会吃不少内存,内存小的话画到一半可能会“拒绝撤销”或者强制降级。建议绘制大贴图前先清理几个没用的图层,别把所有历史都压在肚子里。
2.2 界面布局与初学者快速上手路径
armorpaint 的界面跟传统软件走完全不同的路子。打开之后就是视口、左侧最小化的工具栏,外加几个悬浮面板。菜单栏也短得可怜,File、Edit、View、Window、Help 就没了。建模相关功能基本不存在,因为它压根就不是干那些活的。
刚开始不要急着一头扎进去画。建议先花十分钟熟悉这几个核心东西:
- 视口按钮:右上角一堆小按钮,分别是材质颜色、粗糙度、金属度、高度、法线、AO 预览等。点一个就能实时看到当前贴图层的通道信息。这个非常关键,你画出来的其实是一整套贴图,而不是只有颜色。
- 笔刷面板:可以按 B 呼出,里面不止有颜色大小,还有混合模式、流量、硬度、间距等。它的“混合模式”概念和 Photoshop 的图层混合模式非常像。
- 图层面板:按 M 呼出,和 PS 一样,支持上下层叠加。区别在于这是“3D 图层”,每个图层都对应整套 PBR 通道。这个概念刚上手时要留意,如果只是想在颜色上叠加一层锈迹,新建图层后要先把该图层的“影响通道”勾选成 Base Color 或 Roughness,分别调。
核心目标是先建立一个图形化心智模型:编辑模型表面 = 编辑图层 = 修改通道属性。不要被它冷启动时的空白视口吓到,一旦把模型拖进去,一切都会自然衔接。
2.3 支持的模型格式与导入注意事项
armorpaint 默认支持导入 OBJ、FBX、PLY、STL、glTF/GLB。我用得最多的是 FBX(带UV和顶点色)和 glTF(能保留纹理引用)。
导入之前做两件事会省很多心:
- 检查模型法线方向是否正确,有没有翻转法线。法线错了,灯光显示会乱掉。
- 检查 UV。armorpaint 不是建模软件,如果你没有拆分 UV,那么它无法自动生成贴图坐标。你必须保证模型已经展开了有效 UV,而且 UV 岛之间没有重叠。
另外要注意:导入时软件默认会按“单位 1=1米”处理。比如从 Blender 导出的模型默认 1 unit 是 1m,如果你在别的软件里习惯用厘米级别建模,模型导进来就可能大得像天宫。建议导入前先在 Blender 里 Ctrl+A 应用全部变换,再导出。
注意:模型必须带 UV,且所有面都要被 UV 展开。哪怕有一小块没有 UV,笔刷画上去会直接穿透,或者绘制结果不显示。
3. 实操全过程:从导入模型到导出贴图
3.1 新贴图集的创建与参数选择
拖入模型后,第一个跳出来的窗口就是“创建贴图集”。很多人直接点 OK,这是个大坑——默认分辨率可能只有 1024,画完导出才发现精度完全不够。
我的习惯是这样设:
| 参数 | 我常用的值 | 说明 |
|---|---|---|
| Texture Resolution | 2048 或 4096 | 看模型大小和引擎需求。手游 2048 足够,PC 端 3A 使用 4096 |
| Bake Meshes | 选中模型 | 烘焙 AO/Curvature 要用 |
| Bake Scale | 1 | 需要现场调,参考模型尺寸 |
| Albedo AO | 0.7 左右 | 烘焙AO 会影响后续基础色预览,如果不需要黑边可设低一点 |
| Auto Fill | 基础色填充 | 选个灰底或白底,默认是黑色,画带透明度的材质时要留意 |
分辨率这事我踩过不少次坑。一开始图省事全用 1024,画的时候很流畅,但导到引擎里放大看全是糊的。后来我干脆从 2048 起步,重要道具和角色武器直接 4096,避免后期返工。
“Auto Fill” 这个选项值得解释一下。它表示新建贴图集的初始颜色。默认是白,我习惯改成中灰(128,128,128),因为PBR流程里基础色如果从白色开始画,很容易画脏;中灰底对金属度调整也友好。
创建完贴图集后,左侧的面板里会出现整套通道层,这时候就可以直接上笔了。但先别急着画,建议先做一步烘焙。
3.2 烘焙 AO 与曲率,让细节有据可依
armorpaint 提供了很轻量的 AO 烘焙和一个“Curvature”烘焙功能。这两个东西是画锈迹、泥渍、边缘磨损时最好的辅助。
烘焙入口在“插件”菜单里,选中 bake AO 之后会弹出窗口,参数也不多,照着下面调就稳:
- Samples:采样数,我一般给 64。
- Bias:0.001 左右。
- Spread Angle:控制 AO 的散开角度,默认 90° 就够。
- Tone Mapping:用默认即可。
烘焙结束后,视口按右上角的 AO 切换按钮,就能看到黑白灰的遮挡信息。这个信息不会直接写入你的图层,而是作为后面笔刷“遮罩”的参考。你可以创建一层新图层,给它加一个“AO 遮罩”,这样你的污渍只会出现在暗部缝隙里,干净得像直接在引擎里做材质的边缘磨损一样。
曲率的用法类似,它会把模型表面的凸起和凹陷输出成灰度图,凸起为白,凹陷为黑。你可以把一张锈贴图丢进去,然后把曲率图作为笔刷的遮罩,这样锈迹只长在凹陷和边缘处,非常自然。
这不是炫技功能,是给从业者省时间的功能。以前在 Substance 里调生成器参数,每次双开对比半天;现在 armorpaint 让这些生成式内容直接变成绘制遮罩,操作路径短很多。
3.3 多图层绘制流程:以生锈刀刃为例
说一个我实际做过的案例,流程比较有代表性:给一把匕首画锈迹和磨损。
第一步,新建项目导入刀刃模型,设贴图集为 2048,自动填充中灰基础色。
第二步,在材质调整里把 Base Color 拉到偏金属的灰白色,Roughness 调到 0.3 左右,Metalness 拉到 1(如果是全金属材质)。这时候视口里可以看到刀身发亮,有点武器的样子了。
第三步,新建图层“Rust”,把它的通道只勾选 Base Color 和 Roughness。选一个暗红色(RGB 大概 88, 36, 24),粗糙度拉高(0.8 以上),用低透明度的笔刷在刀身下半部分涂。注意,这里不是要画实心红色,而是像给表面蒙一层氧化膜一样,所以笔刷流量控制在 20% 左右,多扫几遍。
然后调出曲率烘焙图,给“Rust”图层加一个曲率遮罩,模式选“Depressions only”(只显示凹陷处)。这样刚才画的斑驳锈迹会被自动限制在划痕和缝隙里,效果非常接近在 Substance 里用 generator 做的锈。两边来回调整,到满意为止。
第四步,给刀刃边缘增加磨损。新建图层“Scratches”,只影响 Roughness 和 Metalness,用低透明度笔刷,调成白色(降低金属度)和低粗糙度,沿着刀刃的高光边缘横向拉几下。这样边缘磨损的地方会比中间更亮,在 PBR 光照下非常自然。
第五步,导出。导出格式我一般选 PBR,输出 .png 或 .tga,勾选需要导出的贴图通道。armorpaint 会直接在磁盘上生成一整套同名前缀的贴图文件,非常省心。
整个过程大概二十分钟。放在以前用 Substance 或者手绘流程里,可能得折腾一下午,而且还未必控制得这么好。
3.4 把贴图接到 Blender 和游戏引擎
导出之后,很多人会问“为什么 Blender 里看起来和 armorpaint 里差那么多”。这通常不是贴图问题,而是渲染器设置的问题。
在 Blender Cycles 或 Eevee 里接入时,核心步骤就几步:
- 新建材质,把 Base Color 贴图连到 Principled BSDF 的 Base Color。
- 把 Roughness 贴图连到 Roughness,金属度贴图连到 Metallic。
- 如果导出了法线贴图,记得加一个 Normal Map 节点,再连接到 Normal。
关键点来了:armorpaint 导出的粗糙度贴图是线性值,Blender 默认会用 sRGB 解析色彩空间。如果你直接连上去,会发现粗糙度整体偏亮,几乎所有地方都像镜面一样亮。正确做法是在贴图导入节点把“色彩空间”改成“Non-Color”。法线贴图和金属度贴图也要改成 Non-Color。
Unity 和 UE 的接入逻辑类似。UE 里直接用 Texture Sample,记得压缩设置里把粗糙度贴图设为“Masks/No sRGB”,否则同样会偏色。
注意:所有非颜色数据的贴图(Roughness、Metalness、Normal、AO、Height)导入引擎时都必须设置成线性色彩空间。如果忽略这一步,材质反应会让你怀疑贴图全画错了。
4. 常见问题与排查技巧实录
用 armorpaint 大半年,我把自己亲自踩过和看过社区反馈的典型问题整理成了速查表,供你排查。
| 问题 | 现象 | 解决办法 |
|---|---|---|
| 模型上画不出任何东西 | 笔刷有反应但颜色不变 | 检查贴图集创建时是否默认把材质通道给锁了,看看图层面板的“可见性”图标,有的通道被隐藏了 |
| 画到一半崩溃 | 点击间隙突然退出 | 多为显存不足或贴图分辨率过高,先关掉预览面板里的实时阴影和光追风格效果 |
| 导出贴图偏色 | Blender/Unity 里颜色偏灰或偏亮 | 非颜色贴图没有设为 Non-Color / Masks,改颜色空间即可 |
| 笔刷边缘太硬 | 画出来像印章 | 打开 B 面板把 falloff(衰减)调成光滑过渡,或者调低硬度 |
| 撤销栈失效 | 提示内存不足或直接禁按 | 关掉其他占用内存的软件,降低贴图集分辨率,或者分图层多存版本 |
| UV 岛边界有黑边 | 贴图接缝处有暗线 | 在导出设置里开启“padding”,或者绘制前先跑一遍 UV dilation 插件 |
| AO 烘焙结果发黑 | 全模型太黑 | 把 Bake Scale 调大一点,通常 1~3 之间有效,同时检查模型法线方向 |
除了表里这些,我单独说说两个最容易让人头大的问题。
一是“看不到笔刷预览”。有的人把笔画上去才看到结果,悬停时的圆形光标消失或错位。这个通常是笔刷刷到了背面或者面重叠的区域。模型面多重的时候(比如平面叠加平面),笔刷是在所有相交表面同时落墨的,视觉上可能只显示最外层,但内部也变色了。解决办法是检查模型是否有重叠面,或者用背面剔除。
二是“贴图画完发现 UV 有重叠”。前期导入时如果不小心点了“自动展开”,它默认按物体边界生成了新 UV,如果你之后又手动修过 UV,再回 armorpaint 里画就会错乱。让我给你一条铁律:模型进 armorpaint 前,先在 Blender 里把最终的 UV 锁定并导出,不要依赖其他软件的自动展开。
这种排查经验其实价值很高,因为 armorpaint 官方文档不算厚,很多小问题你在搜索引擎里都可能找不到完全对应的答案,只能靠自己试。上面这几条都是我用真金白银的时间换来的。
5. 进阶玩法:把 armorpaint 塞进你的高效流程里
5.1 和 Blender 的实时联动方案
armorpaint 没有内置插件桥,但有“储存为外部编辑”的功能。简单说,你可以在 Blender 里选模型、导出成一个固定命令的临时文件,然后在 armorpaint 里打开覆盖更新。
实际操作时,我一般这样干:
- Blender 里给模型命名好,比如
sword_low。 - 用插件把模型导出为
sword_low.fbx到固定目录。 - 在 armorpaint 里 File → Import,载入新模型。
- 因为 armorpaint 的名字和贴图集名字都保存在工程文件里,重载后贴图会保留,直接继续画。
这套流程笨但稳。我见过有人写脚本把 Blender 的导出命令绑定到快捷键,一击导出,armorpaint 这边再一击重载,几乎无缝。如果你常做多轮迭代,这个节奏比来回导入导出舒服得多。
还有个小窍门:armorpaint 可以打开 glTF 工程文件,并在保存回 glTF 时保留贴图引用。如果你做 Web 端展示或者用 three.js 调试,可以把工程档一起存为 glTF,用浏览器看实时效果,这也是一种“引擎外预览”的方式。
5.2 智能材质与生成器的自定义
armorpaint 里“智能材质”不是 Substance 里那种实时生成节点,更像一组带遮罩和通道设置的图层模板。你可以在工具栏里看到智能材质面板,默认带了一批类似“锈迹”“泥土”“油漆剥落”的材质。
这些智能材质其实是图层组合,你点一下,它自动创建多个图层、设置好混合模式,并用曲率/AO 作为遮罩。你可以把它当成起点,再手动调整。
如果你想做自己的智能材质,很简单:建好一组合适的图层,然后 File → Save Material As,后缀是 .arm 文件。下次直接选中智能材质一键加载。这个功能在做重复物件时极其好用,比如给一排木箱全部刷上同样的旧化效果,就用这一个智能材质来回点。
还有一点不妨试试:笔刷可以用贴图做笔尖。你可以导入一张灰度图作为笔刷的图案,然后像盖章一样画材质纹理。比如把一些金属颗粒起伏扫描图做成笔刷,用来绘制凹凸效果,出来的表面会非常自然,你调节 Flow 控制次数就能控制强度。这条路比单纯手绘更省力,也更加贴近“程序化+手绘”混合的行业主流做法。
5.3 性能优化与大型场景的处理
armorpaint 虽然快,但碰到超大场景或者超高精度贴图,还是会喘。几个优化习惯供参考:
- 尽量分物体绘制,不要一口气把几十个模型装进一个贴图集。
- 贴图集分辨率先设 1024 画底稿,最后再改成 4096 出正式贴图。
- 绘制时把视口显示改成“纹理模式”而不是最炫的“实时阴影模式”,视口会快很多。
- 如果模型面数实在变态,考虑在 armorpaint 里先把模型减面,画完再导入原始模型套贴图。
我见过有人在 armorpaint 里硬刚几千万面的扫描模型,卡得鼠标都动不了。这种比如扫描雕像之类的工作,建议先在建模软件里做个低模重新拓扑,再导进来画材质。低模烘焙出来再贴的话其实视觉差异很小,但操作流畅度天壤之别。
关于插件,armorpaint 的插件菜单里还有 UV 展开工具集,但功能不算强。如果你的模型没有 UV,导入时也可以用它的自动展开应急。不过正式项目我不推荐依赖它,因为自动展开对复杂模型的效果不太理想,容易出现紧张拉伸的贴图。最好是模型师把 UV 手工排好,armorpaint 就专心负责画。
这套流程用久了之后,你会发现 armorpaint 已经不只是“替代品”,而是帮你重新定义了贴图绘制的工作节奏。以前画一张贴图要等预览、等烘焙、等导出,现在每一步都是即时反馈。这种“所见即所得”带来的信心,对保持创作状态特别重要。我个人现在做独立场景的时候,基本都是 armorpaint 开一个窗口、Blender 开一个窗口,来回切换,一天能出好几套材质方案,这在以前完全不敢想。
最后再分享一个小技巧:画完导出的贴图,建议大家顺手在引擎里过一次白盒光照测试,看看粗糙度是否过曝、金属度是否过跳。很多时候 armorpaint 视口里看着刚好,但因为环境光照不同,引擎里会差异明显。多调几次后,你自然会找到适合自己项目的基准参数,后面再出图就是流水线一样顺手了。