1. 等了这么多年ArmorPaint 1.0 到底带来了什么如果你接触过3D纹理绘制大概率听过ArmorPaint这个名字。它最早是以开源版Substance Painter的定位进入大家视野的基于Kha引擎和Armory3D生态用GPU加速做PBR材质绘制。但过去几年它的版本号一直卡在0.x很多人在试用之后觉得功能不够完整就放下了。这次1.0正式版落地意味着这个工具终于从能用的实验品变成了可以进生产流程的正式工具。我自己从0.8版本开始跟中间断断续续用了两年多主要拿它做一些中小型资产的纹理工作。1.0发布后我第一时间拉下来跑了一轮完整项目从模型导入、材质绘制、贴图导出到最终渲染验证整体感受是核心工作流终于闭环了。这篇文章我会把1.0版本的关键变化、实际使用中的操作细节、以及我踩过的坑全部摊开讲不管你是刚听说ArmorPaint的新手还是之前用过旧版本想看看值不值得回归的老用户都能找到有用的东西。先说结论性的判断ArmorPaint 1.0最核心的价值在于三点——完整的PBR绘制管线、对硬件要求相对友好的GPU加速方案、以及和Blender等主流工具之间顺畅的往返流程。它不适合替代大型工作室里全套Substance管线但对于独立开发者、小型团队、学生党、以及预算有限但需要专业级纹理输出的场景它是一个非常务实的选择。2. 从0.x到1.0哪些变化真正影响日常操作2.1 节点系统从能用变成好用旧版本最让人头疼的就是节点编辑器的交互。0.9时代节点连线经常出现拖拽不跟手、节点参数面板刷新延迟的问题做一个稍微复杂的材质图层就要反复确认参数有没有生效。1.0重写了节点图的求值逻辑实测下来最直观的感受是参数调整后的预览刷新几乎是即时的哪怕叠了十几层节点在2K分辨率下拖动滑块也不会有明显卡顿。节点库本身也扩充了不少。以前做磨损边缘需要自己手搭一套Curvature加Levels再加Mask的组合1.0内置了更完整的遮罩生成节点包括基于AO的脏迹遮罩、基于曲率的边缘磨损遮罩、以及基于世界坐标的高度渐变遮罩。这些节点的意义在于你不需要每次都从零搭建逻辑直接调用预设节点再微调参数就行。我拿一个机械臂资产做了对比测试同样的磨损效果0.9版本我花了大概40分钟搭节点和调参1.0里用内置节点组合15分钟就达到了接近的效果。这个效率提升在批量处理资产时会非常明显。2.2 笔刷引擎的响应逻辑改了笔刷是纹理绘制的核心交互。旧版本的笔刷在低配GPU上会有明显的延迟感尤其是用大尺寸笔刷配合复杂材质时落笔到画面反馈之间能感觉到几十毫秒的滞后。1.0把笔刷的绘制管线做了拆分把材质求值和笔刷轨迹渲染分到了不同的处理阶段实际体验是落笔更跟手了。另一个细节是笔刷的压感曲线。1.0增加了可自定义的压感映射曲线你可以调整笔刷半径和流量随压感变化的响应曲线。这个功能对用数位板画画的人来说很实用——默认的线性映射在画细节时容易一下子太重把曲线调成前段平缓后段陡峭就能更好地控制轻笔触。2.3 贴图导出的通道配置更灵活以前导出贴图时通道打包方式是固定的几套预设想自定义输出通道组合比较麻烦。1.0允许你在导出时自由勾选需要输出的通道并且可以自定义每个通道的打包规则。比如你可以把Roughness和Metallic打包到同一张贴图的G和B通道把AO单独输出这种灵活性在对接不同渲染引擎时非常关键。我目前主要对接Blender的Principled BSDF1.0的导出预设里直接有对应的配置导出后贴图命名和通道对应关系都是对的不需要手动改名或重新打包。这个细节看起来小但省去了每次导出后还要在图像软件里做通道分离的重复劳动。3. 实际跑一个完整项目从模型到贴图的全程记录3.1 模型导入前必须做的准备工作ArmorPaint对导入模型有几个硬性要求这些在官方文档里写得比较散我集中说一下。首先模型必须是三角面或四边面N-gon面导入后可能出现UV错乱。其次UV必须是不重叠的ArmorPaint的绘制是基于UV空间的如果UV有重叠你在一个区域画的颜色会同时出现在另一个区域。我的习惯是在Blender里先把模型处理好应用所有修改器、检查法线方向、确认UV展开没有重叠、然后导出为OBJ或FBX。这里有个坑——导出时不要带材质和动画数据ArmorPaint只关心几何体和UV多余的节点数据会增加导入时间有时还会导致导入失败。导入时的缩放设置也要注意。ArmorPaint默认按米为单位如果你的模型在Blender里是按厘米建的导入后会大100倍笔刷的默认尺寸就显得特别小。我一般会在Blender里就把单位统一成米或者在导入时手动调整缩放系数。3.2 图层策略什么时候用填充层什么时候用绘制层ArmorPaint的图层系统和Photoshop类似但多了材质通道的概念。每个图层可以包含Base Color、Roughness、Metallic、Normal、Height等多个通道你可以选择只激活其中几个。我的经验是大面积的基础材质用填充层加遮罩来做细节和局部变化用绘制层。比如一个金属箱子我会先建一个填充层给整体金属材质然后用一个基于AO和曲率的遮罩层来生成边缘磨损最后再用绘制层手动补一些划痕和污渍。这样做的原因是填充层加程序化遮罩可以快速覆盖大面积而且后续调整参数就能全局修改绘制层则用来处理那些程序化生成不出来的、需要人为判断的细节。图层混合模式在1.0里也补全了除了常规的Normal、Multiply、Add还有Overlay、Soft Light这些。做污渍叠加时用Multiply配合低不透明度做高光细节时用Add或Screen这些和图像处理软件的逻辑是一致的。3.3 笔刷设置里最容易被忽略的几个参数ArmorPaint的笔刷面板参数不少但有几个是实际影响最大的。Jitter抖动控制笔刷落点的随机偏移画石头、地面这类需要自然随机感的材质时把Jitter开到0.3到0.5能明显减少机械重复感。Scatter散布让笔刷在半径范围内随机分布笔触配合Alpha贴图做树叶、碎石这类散布效果很好用。Flow和Opacity的区别很多人搞混。Flow是单次笔触内颜料的累积速度Opacity是整个笔触的最终不透明度上限。画叠加效果时低Flow高Opacity可以慢慢把颜色堆上去适合做渐变过渡高Flow低Opacity则适合快速铺色但保持透明感。还有一个隐藏技巧按住Shift键点击可以画直线这个和很多绘图软件一样但ArmorPaint里直线笔触的间距是可以通过笔刷的Spacing参数控制的。做机械表面的规则划痕时用直线笔触配合低Spacing值能画出很均匀的线条。4. 性能调优让ArmorPaint在你的机器上跑得更顺4.1 GPU显存是最大的瓶颈ArmorPaint是纯GPU加速的所有纹理数据都放在显存里。这意味着显存大小直接决定了你能处理多高分辨率的贴图。我实测下来4GB显存跑2K贴图加十几个图层是流畅的但上到4K贴图加二十层以上就会开始爆显存表现是操作延迟突然变大甚至软件崩溃。如果你的显存有限有几个策略可以缓解一是按需提高分辨率绘制阶段用1K或2K最终导出前再临时切到4K渲染一次二是合并图层把确认不再修改的图层合并掉可以释放显存三是关闭实时预览里的高级效果比如SSAO和环境光遮蔽预览这些会额外占用显存。4.2 笔刷尺寸和图层数量对帧率的影响我做过一组简单的测试在2K分辨率下用默认笔刷在空白图层上绘制帧率能稳定在60fps。但当图层数量增加到15层以上且每层都有复杂的节点遮罩时帧率会降到30fps左右。如果再叠加一个基于曲率的遮罩节点帧率可能进一步降到20fps。这个表现对于绘制工作来说是可以接受的因为纹理绘制不像游戏那样需要持续高帧率偶尔的卡顿不影响操作。但如果你觉得明显不跟手优先检查是不是某个图层的遮罩节点太复杂可以尝试把遮罩烘焙成贴图来降低实时计算量。4.3 导出设置里的分辨率陷阱导出贴图时ArmorPaint默认使用项目设置里的分辨率。但这里有个容易忽略的点如果你在绘制过程中临时提高过某个图层组的分辨率导出时可能会按最高分辨率输出所有贴图导致文件体积远超预期。我建议在导出前先检查一遍项目设置里的基础分辨率确认和你的目标一致。另外导出格式的选择也要注意。PNG是无损的但文件大JPG有损但体积小。对于Base Color这种颜色信息JPG的压缩损失在大多数情况下可以接受但对于Normal、Roughness、Metallic这些数据贴图必须用PNG或TGA等无损格式否则压缩伪影会直接导致渲染结果出现瑕疵。5. 和Blender的往返流程几个必须知道的对接细节5.1 从Blender导出模型到ArmorPaintBlender导出OBJ时有一个选项叫Triangulate Faces建议勾上。虽然ArmorPaint支持四边面但三角化后的模型在UV边界处的表现更稳定。导出路径不要有中文或特殊字符ArmorPaint对非ASCII路径的支持时好时坏我遇到过路径里有中文导致导入卡住的情况。FBX格式也可以但OBJ更轻量而且ArmorPaint对OBJ的UV解析更可靠。如果模型有多个UV集ArmorPaint默认使用第一个UV集所以确保你的目标UV集排在第一位。5.2 贴图导回Blender后的节点连接ArmorPaint导出的贴图命名通常带有通道后缀比如_basecolor、_roughness、_normal。在Blender里连接Principled BSDF时Normal贴图需要经过一个Normal Map节点再连到BSDF的Normal输入不能直接连。Roughness和Metallic如果打包在同一张贴图里需要用Separate RGB节点分离通道后再分别连接。我一般会在Blender里建一个简单的节点组来管理这些连接这样换贴图时只需要替换图像文件不用重新连线。这个节点组的搭建逻辑不复杂但能省下大量重复劳动。5.3 迭代修改时的同步策略纹理绘制往往需要反复迭代在ArmorPaint里画完导出在Blender里看效果发现某个区域需要调整再回到ArmorPaint修改。这个往返过程中模型本身不要变。如果你在Blender里修改了模型几何或UV再回到ArmorPaint时之前的绘制数据就对不上了。我的做法是模型确定后先备份一份纹理迭代期间只动ArmorPaint里的图层不动模型。如果确实需要改模型那就接受重新绘制或者用投影方式迁移纹理的代价。6. 常见问题与踩坑记录6.1 导入模型后显示全黑或全白这个问题我遇到过好几次原因通常有两个。一是模型没有UVArmorPaint需要UV来定位绘制区域没有UV的模型导入后会显示异常。二是法线方向反了在Blender里用ShiftN重新计算外侧法线再导出就能解决。还有一种情况是模型有UV但缩放极小或极大导致在ArmorPaint视图里看起来是一个点或者大到超出视野。检查一下导入时的缩放设置或者在Blender里应用缩放后再导出。6.2 笔刷画上去没有反应先检查当前选中的图层是否是可绘制状态。ArmorPaint里填充层默认是锁定绘制的你需要新建一个绘制层或者把填充层解锁。另外检查一下图层是否被隐藏了隐藏的图层虽然能看到内容但无法绘制。如果图层状态正常但还是画不上去看看笔刷的Alpha贴图是不是空的。有时候切换笔刷预设时Alpha没有正确加载换一个默认笔刷试试。6.3 导出贴图颜色和软件里看到的不一致这是色彩管理的问题。ArmorPaint默认在sRGB色彩空间下显示但导出时如果选择了线性空间颜色会变暗。检查导出设置里的色彩空间选项确保和你的目标渲染引擎一致。Blender的Principled BSDF的Base Color输入期望的是sRGB颜色数据所以导出Base Color时选sRGB导出Roughness和Metallic时选Linear非色彩数据。6.4 软件启动崩溃或闪退ArmorPaint对显卡驱动比较敏感。如果你在启动时遇到崩溃先更新显卡驱动到最新版本。如果更新后仍然崩溃尝试在启动参数里加上--gpu-validation来启用GPU验证模式这能帮你定位是不是某个GPU操作不被支持。另外ArmorPaint的配置文件如果损坏也会导致启动失败。配置文件通常在用户目录下的.config/ArmorPaint文件夹里删掉这个文件夹让软件重新生成默认配置很多时候能解决莫名其妙的启动问题。7. 这个版本适合谁以及我个人的使用建议ArmorPaint 1.0的完成度已经足够支撑中小型项目的纹理制作。如果你是独立游戏开发者需要给几十个资产做PBR纹理但预算有限它值得认真考虑。如果你是3D美术学习者想理解PBR纹理的各个通道是怎么影响最终渲染的ArmorPaint的节点系统能给你很直观的反馈。如果你已经在用Substance Painter且工作流成熟那ArmorPaint目前还不足以让你迁移但可以作为辅助工具处理一些轻量任务。我自己的使用策略是简单资产和快速迭代用ArmorPaint复杂资产和需要大量智能材质的项目还是用Substance。ArmorPaint的优势在于轻量和灵活启动快、操作直接、没有订阅负担。它的节点系统虽然不如Substance的智能材质库丰富但胜在透明和可定制你完全清楚每一个效果是怎么算出来的。最后分享一个我常用的工作习惯在ArmorPaint里绘制时每隔一段时间就导出一次当前贴图作为备份。ArmorPaint的项目文件虽然会保存图层数据但软件偶尔会有保存失败的情况。导出贴图作为中间备份即使项目文件出问题至少还有贴图可以用。这个习惯帮我省过好几次重做的麻烦。