1. ArmorPaint 1.0 到底是个什么东西ArmorPaint 这个名字在 3D 纹理绘制圈子里其实已经不算新面孔了。它最早是以“开源版 Substance Painter”的身份进入大家视野的核心定位就是直接在 3D 模型表面进行纹理绘制省去传统流程里“展 UV → 导出贴图 → 在 PS 里画 → 再贴回去看效果”这种来回折腾的环节。1.0 版本之所以被这么多人盯着是因为它从最早的实验性工具一路迭代到了功能相对完整、可以真正放进生产流程里用的状态。简单说ArmorPaint 能做的事情包括在模型上直接画颜色、粗糙度、金属度、法线等 PBR 通道支持图层、遮罩、材质节点能导入导出主流贴图格式还能配合 Blender 等工具做实时联动。它解决的核心痛点就一个——让纹理绘制这件事变得所见即所得你画在模型上的每一笔立刻就能看到最终渲染效果不用反复导出预览。适合谁来用三类人最值得关注一是独立游戏开发者预算有限但需要一套完整的 PBR 纹理流程二是 Blender 用户因为 ArmorPaint 和 Blender 的配合相当顺手三是想了解 3D 纹理绘制原理的学生和爱好者它的节点系统和图层逻辑足够透明适合拿来学习。如果你只是偶尔给模型上个色那可能用不上它但如果你要频繁处理角色、道具、场景资产的贴图这套工具值得认真研究。2. 为什么 1.0 版本值得单独拿出来说2.1 从“能用”到“好用”的分水岭在 1.0 之前ArmorPaint 经历过很长一段“功能有但不够稳”的阶段。早期版本最大的问题是性能和稳定性模型面数一高就卡图层一多就崩导出贴图偶尔还会出现通道错位。很多人在 0.x 版本试过之后就放下了不是功能不行而是不敢在正式项目里用。1.0 版本最明显的变化是底层渲染和内存管理做了重构。实测下来同样一个 5 万面左右的角色模型0.9 版本在叠加十几个图层后操作会有明显延迟而 1.0 在相同条件下基本能保持流畅。这个提升对实际工作的意义很大——纹理绘制是一个高度依赖手感的过程笔刷延迟超过 100 毫秒画细节的时候就会非常难受。另一个关键改进是导出流程的可靠性。1.0 对贴图导出的通道映射做了重新梳理之前经常出现的“法线贴图绿通道反了”“粗糙度导出来是纯黑”这类问题在新版本里基本没有再遇到。这一点看起来是小修小补但对于要把贴图交给引擎用的人来说是能不能进入生产流程的硬门槛。2.2 授权模式和获取方式的变化ArmorPaint 的授权方式一直比较特殊它采用买断制一次购买后续更新免费。1.0 版本依然延续这个模式但官方对源码和编译版本的管理更加规范了。你可以选择直接获取编译好的版本也可以自己从源码编译——后者对喜欢折腾的 Linux 用户和想深度定制的开发者比较友好。这里要提醒一句自己编译虽然自由度高但依赖环境配置比较繁琐尤其是图形驱动和 CUDA/OpenCL 相关的部分不同系统差异很大。如果你只是想用它做贴图直接用官方编译版本就行没必要在这上面耗时间。我见过不少人卡在编译环节结果正事一点没干。2.3 和同类工具的定位差异市面上做 3D 纹理绘制的工具不少ArmorPaint 的差异化在于轻量 节点化 跨平台。它不像某些大型套件那样动辄几个 G 的安装包和复杂的授权服务器整个软件体积控制得很好启动速度快在配置一般的机器上也能跑。节点系统则给了它很强的程序化纹理能力你可以用数学节点、噪声节点组合出复杂的材质效果而不是纯靠手绘。当然它也不是没有短板。比如笔刷系统的丰富程度相比成熟商业软件还有差距一些高级的粒子笔刷、物理笔刷它没有再比如团队协作功能基本为零它更适合个人或小团队使用。搞清楚这些边界你才能判断它到底适不适合自己的项目。3. 核心功能拆解与实操要点3.1 图层与遮罩纹理绘制的骨架ArmorPaint 的图层系统和 Photoshop 的逻辑很像但多了一个维度——每个图层可以绑定到特定的 PBR 通道。这意味着你可以单独控制某个图层的颜色、粗糙度、金属度、法线等属性而不是把所有信息混在一张图上。实操中最常用的结构是这样的底层放基础材质层中间放细节层比如划痕、污渍顶层放高光或边缘磨损层。每一层都可以加遮罩遮罩的来源可以是手绘、程序化噪声、或者从模型的其他属性如曲率、环境光遮蔽生成。注意遮罩的叠加顺序会直接影响最终效果。我习惯把“曲率遮罩”放在最上面用来控制边缘磨损因为边缘的磨损通常是最先被注意到的细节。一个容易踩的坑是图层混合模式的选择。ArmorPaint 提供了多种混合模式但不同通道下可用的模式不一样。比如颜色通道可以用“正片叠底”“叠加”但粗糙度通道通常只用“替换”或“相加”。如果你发现某个图层怎么调都没效果先检查一下混合模式是不是选错了。3.2 节点系统程序化纹理的核心节点系统是 ArmorPaint 区别于普通绘画软件的关键。你可以把它理解成一个可视化的材质编程环境输入是各种数据坐标、噪声、纹理输出是颜色或通道值中间通过节点连接完成运算。举个实际例子要做一种“生锈的金属”材质纯手绘的话你得一点点画锈迹费时且不自然。用节点的话可以这样搭用一个“噪声纹理”节点生成基础锈斑分布接一个“颜色渐变”节点控制锈的颜色从深褐到橙红再用“曲率”节点让锈迹集中在模型的凹陷处最后把结果输出到颜色和粗糙度通道。整个过程是参数化的改一个数值就能整体调整锈的程度。提示节点搭好之后可以保存为预设下次直接拖到新模型上就能用。这是提升效率的关键别每次都从头连。节点系统的学习曲线确实比纯手绘陡一些但一旦掌握可复用性和可调整性是手绘没法比的。我的建议是先从简单的噪声渐变组合开始别一上来就搞几十个节点的大网络容易把自己绕晕。3.3 笔刷与绘制手感1.0 版本对笔刷引擎做了优化最直观的感受是压感响应更线性了。以前用数位板画的时候轻笔触容易断线重笔触又突然变粗1.0 里这个问题改善明显。笔刷设置里比较关键的几个参数是流量Flow、间距Spacing、抖动Jitter。流量控制的是单次笔触的透明度间距控制笔刷印记的密集程度抖动则是给笔触加入随机偏移。画细节的时候我通常把间距调到 10% 以下流量降到 30% 左右这样出来的线条更细腻。画大面积底色的时候反过来间距拉大、流量拉满效率更高。注意ArmorPaint 的笔刷默认是“累积”模式也就是同一位置反复涂抹会越来越深。如果你想要“不累积”的效果比如画一层均匀的底色需要在笔刷设置里关掉累积选项。还有一个实用技巧用遮罩配合笔刷做局部调整。比如你只想让某个区域的粗糙度变高可以新建一个只影响粗糙度通道的图层然后用手绘遮罩控制影响范围。这样比直接画粗糙度更可控后期想改也方便。3.4 与 Blender 的联动流程ArmorPaint 和 Blender 的配合是很多用户选择它的重要原因。基本流程是在 Blender 里建好模型、展好 UV然后通过插件或手动导出把模型送到 ArmorPaint 里绘制画完再把贴图导回 Blender 渲染。这里的关键是UV 的规范性。ArmorPaint 依赖 UV 来定位纹理如果 UV 有重叠、拉伸或者接缝处理不当画出来的贴图在模型上就会出问题。我的经验是在 Blender 里展 UV 的时候尽量做到接缝藏在不易察觉的位置比如角色模型的接缝放在腋下、大腿内侧这些地方道具则放在背面或底面。导出模型的时候格式选择也有讲究。FBX 和 OBJ 都支持但 FBX 对材质和法线的保留更好。如果你在 Blender 里已经给模型分了材质槽导出 FBX 时记得勾选“导出材质”这样 ArmorPaint 里能直接识别出不同的材质区域省去手动分组的麻烦。4. 完整实操流程从零做一个道具贴图4.1 模型准备与导入假设我们要给一个“旧木箱”做贴图。第一步是在 Blender 里完成建模和 UV 展开。木箱的模型比较简单六个面加一些倒角和金属包边。UV 展开时我把六个面分别摊平金属包边单独分一个 UV 岛这样后续可以给木头和金属分别上不同的材质。导出 FBX 后打开 ArmorPaint新建项目选择导入模型。导入界面里有两个关键选项缩放比例和是否自动生成 UV。缩放比例根据你 Blender 里的单位设置来一般保持默认就行自动生成 UV 只在模型没有 UV 的时候才用有 UV 的话千万别勾否则会覆盖掉你辛苦展好的 UV。导入完成后先别急着画。花两分钟检查一下模型的法线方向。如果法线反了绘制的时候笔刷会“穿透”到模型背面画出来的东西全是错的。检查方法很简单在视图里旋转模型看看光照是不是正常。如果发现法线问题回 Blender 里按 ShiftN 重新计算法线再导出。4.2 基础材质铺设模型没问题之后开始铺基础材质。木箱的木头部分我新建一个填充层颜色选一个中等偏深的棕色粗糙度调到 0.7 左右木头通常比较粗糙金属度保持 0。金属包边部分新建另一个填充层颜色选深灰色金属度拉到 1粗糙度调到 0.3 左右旧金属不会太光滑但也不至于完全哑光。提示填充层是 ArmorPaint 里最基础的图层类型它不依赖笔刷直接给整个模型或指定区域填充统一的材质值。做基础材质的时候填充层比手绘效率高得多。基础层铺好之后可以开始加细节了。木头的纹理我用节点生成一个“波浪纹理”节点模拟木纹走向接一个“颜色渐变”控制深浅变化再叠加一层“噪声”增加随机感。金属部分的锈迹用“噪声”加“曲率”遮罩让锈集中在边角和凹陷处。4.3 细节绘制与遮罩调整基础材质和程序化细节都到位之后进入手绘阶段。这一步主要做两件事添加独特的磨损痕迹和调整整体色调。磨损痕迹我通常用一个小尺寸的笔刷配合“曲率”遮罩在木箱的棱角处画一些浅色的划痕。画的时候注意不要画得太均匀真实的磨损总是有的地方重、有的地方轻。可以适当用笔刷的抖动功能让划痕看起来更自然。色调调整则是新建一个“颜色”图层混合模式选“叠加”用大笔刷在整体上刷一层暖色或冷色统一画面的氛围。这一步的力度要轻流量控制在 10% 到 20% 之间宁可多刷几遍也不要一次刷太重。注意ArmorPaint 的撤销步数是有限的默认好像是 50 步左右。做细节的时候如果反复调整很容易把撤销步数用完。我的习惯是每完成一个阶段就手动保存一次项目文件这样即使撤销不够用也能回退到上一个保存点。4.4 导出贴图与引擎对接画完之后就是导出。ArmorPaint 支持导出多种贴图格式最常用的是PNG 和 TGA。PNG 体积小、兼容性好适合大多数引擎TGA 则在一些老引擎里支持更好。导出时要注意通道的打包方式有些引擎要求把粗糙度、金属度、环境光遮蔽打包到一张图的 RGB 通道里ArmorPaint 的导出设置里可以直接配置这种打包规则。导出分辨率根据项目需求来。如果是手游或者低配平台1024 或 2048 通常够用如果是 PC 或主机项目可以上到 4096。分辨率越高细节越丰富但显存占用也越大。我的经验是先按 2048 导出在引擎里看效果如果确实需要更高精度再重新导出 4096避免一开始就导出超大贴图浪费时间。导出完成后把贴图拖进引擎的材质节点里连好对应的通道就能看到最终效果了。如果发现颜色偏差或者通道错位先检查导出设置里的色彩空间和通道映射这两个地方最容易出问题。5. 常见问题与排查技巧实录5.1 性能卡顿的排查思路ArmorPaint 在 1.0 里虽然优化了不少但遇到复杂场景还是可能卡。卡顿的原因通常有三个模型面数过高、图层数量过多、贴图分辨率过大。排查的时候按这个顺序来先看模型面数如果超过 10 万面考虑在 Blender 里做减面或者分块处理再看图层数量如果超过 20 层把不用的图层合并或者删掉最后看贴图分辨率如果导出的是 4096 而实际只需要 2048降下来能省不少资源。还有一个容易被忽略的点是显卡驱动。ArmorPaint 依赖 GPU 做实时渲染驱动版本太旧或者不匹配性能会大打折扣。建议保持显卡驱动更新到较新的稳定版本别用测试版驱动。5.2 贴图导出后效果不对这个问题我遇到过好几次表现是导出的贴图在引擎里看起来和 ArmorPaint 里不一样。原因主要有三类问题表现可能原因解决方法颜色偏暗或偏亮色彩空间设置不一致检查导出时是否勾选了 sRGB 转换法线贴图方向错误绿通道方向不匹配在导出设置里翻转绿通道粗糙度/金属度全黑或全白通道映射错误确认导出时通道对应关系正确贴图接缝明显UV 接缝处理不当回 Blender 调整 UV 或使用接缝模糊提示不同引擎对法线贴图绿通道的方向要求不一样Unity 和 Unreal 就不相同。导出前先查一下目标引擎的文档能省很多来回折腾的时间。5.3 笔刷不响应或响应异常笔刷问题通常和数位板驱动有关。如果笔刷完全没反应先检查数位板驱动是否正常运行然后在 ArmorPaint 的设置里确认输入设备选对了。如果笔刷有反应但压感不对可能是驱动里的压感曲线设置和软件不匹配调整一下曲线通常能解决。还有一种情况是笔刷只在特定角度有反应这多半是模型法线的问题。回到 5.1 里说的法线检查步骤确认模型法线方向正确。5.4 项目文件损坏或无法打开ArmorPaint 的项目文件保存了图层、节点、笔刷设置等所有信息文件体积可能比较大。如果保存过程中断电或者软件崩溃项目文件有可能损坏。预防措施是养成手动保存的习惯并且定期把项目文件备份到另一个位置。如果项目文件已经打不开了可以尝试用文本编辑器打开看看文件头是否完整。ArmorPaint 的项目文件本质上是结构化的数据如果只是尾部损坏有时候能手动修复。当然最稳妥的办法还是平时做好备份别等到出问题了才后悔。6. 一些实际使用中的经验体会ArmorPaint 1.0 给我的整体感受是它终于从一个“有潜力的实验品”变成了“可以依赖的生产工具”。早期版本里那些让人抓狂的崩溃和导出问题在 1.0 里基本看不到了。节点系统的灵活性加上买断制的授权模式让它成为独立开发者和中小团队的一个务实选择。不过也要客观地说它在笔刷丰富度和团队协作方面确实不如一些成熟的商业软件。如果你的项目需要多人协同绘制同一套贴图或者依赖大量高级笔刷效果那可能需要再评估一下。但如果你是一个人或者小团队做的是中小规模的资产ArmorPaint 完全够用而且用熟了之后效率很高。最后分享一个我常用的工作流先在 ArmorPaint 里用节点搭出基础材质和程序化细节导出低分辨率贴图在引擎里看整体效果确认没问题之后再回到 ArmorPaint 做手绘细节最后导出高分辨率贴图。这样分阶段推进既能保证效果又不会在细节上浪费太多时间。贴图绘制这件事整体感觉对了比局部精细更重要别一开始就钻到细节里出不来。