
1. 为什么我最终把材质绘制流程从Blender搬到了ArmorPaint如果你在游戏行业待过几年尤其是做过独立游戏或者小团队项目你一定经历过这样的场景模型在Blender里建好了UV也展好了接下来要画贴图。你打开Blender的纹理绘制模式试着用笔刷在模型上涂几笔然后发现——笔刷延迟、图层管理几乎不存在、想要做个法线细节得来回切换节点编辑器。折腾了一下午贴图没画多少脾气倒是涨了不少。这不是Blender的问题。Blender的纹理绘制功能这些年一直在进步但它的核心定位始终是一个全能型的三维创作工具而不是一个专门用来画贴图的软件。就像你不会拿瑞士军刀去砍树一样工具本身没问题只是场景不匹配。ArmorPaint就是在这个缝隙里长出来的。它脱胎于Blender的游戏引擎生态准确地说它的前身是Blender的一个插件形态后来独立成了一个专门做材质绘制的开源软件。你可以把它理解成“开源版的Substance Painter”——当然功能深度上还有差距但对于预算有限、又不想在贴图环节妥协质量的团队和个人来说它解决了一个非常实际的问题用零成本获得一套完整的PBR材质绘制流程。我第一次接触ArmorPaint是在一个独立游戏项目里。当时团队只有三个人美术资源全靠一个人扛。我们试过Substance Painter的订阅制算下来一年不少钱也试过在Blender里硬画效率实在上不去。后来发现了ArmorPaint抱着试试看的心态用了一个月最终把整个项目的贴图流程都迁了过去。这篇文章就是那次迁移过程中积累下来的经验包括它到底能做什么、怎么用、哪些坑我替你踩过了。这篇文章适合谁看如果你满足以下任意一条接下来的内容应该对你有用正在用Blender做游戏资产、需要一套不花钱的PBR贴图方案、对材质绘制流程感兴趣想了解底层逻辑、或者单纯想找一个Substance Painter的替代品。我会从核心思路、实操步骤、参数配置到常见问题把ArmorPaint这套东西拆开讲清楚。2. ArmorPaint的核心设计思路与方案选型2.1 它到底解决了什么问题要理解ArmorPaint的价值得先理解游戏贴图制作这件事的痛点在哪里。传统流程里一个角色模型的贴图可能包含基础色、法线、粗糙度、金属度、环境光遮蔽等多张图。这些图之间不是孤立的它们共同描述了一个表面的物理属性。你在画基础色的时候需要同时考虑这个区域的粗糙度是多少、法线细节够不够、金属度对不对。在Blender里做这件事你面对的是一个节点树。每个通道是一组节点通道之间的关联靠节点连线来维护。这种方式灵活度极高但操作成本也高——你想在模型上直接画一笔然后让这一笔同时影响基础色和粗糙度需要提前搭好复杂的节点结构。ArmorPaint的思路完全不同。它把每个通道当成一个独立的图层堆栈来管理就像Photoshop里的图层一样。你在基础色通道里加一个图层画颜色在粗糙度通道里加一个图层调粗糙度在法线通道里加一个图层画凹凸。每个图层可以独立控制透明度、混合模式、遮罩。这种“通道图层”的模型对于习惯2D绘画的人来说几乎零学习成本对于习惯节点的人来说则需要转换一下思维。注意ArmorPaint的图层是跨通道同步的。也就是说你在基础色通道新建一个图层其他通道也会同步出现这个图层。这个设计的好处是你可以用同一个遮罩控制多个通道的显示范围坏处是你不能单独删除某个通道的图层——删就是全删。2.2 为什么选择开源路线ArmorPaint采用开源模式代码托管在公开仓库上采用MIT许可证。这意味着你可以免费使用、修改、甚至用于商业项目。对于独立开发者和小团队来说这一点非常关键。Substance Painter的订阅费用对于个人开发者来说是一笔不小的开支而ArmorPaint把这块成本直接降到了零。但开源也意味着另一面没有官方技术支持、更新节奏依赖社区、某些高级功能可能永远不会有。我在实际使用中的感受是它的核心功能已经足够稳定日常绘制、遮罩、材质混合这些操作都很流畅。但如果你需要一些非常特定的功能比如复杂的粒子笔刷或者高级的材质节点系统它可能满足不了你。另一个选择开源方案的理由是可控性。ArmorPaint的工程文件格式是开放的你可以直接查看和修改里面的数据。这对于需要做自动化流程的团队来说很有价值——你可以写脚本批量生成材质、批量导出贴图、甚至把ArmorPaint集成到自己的构建管线里。2.3 与Blender的协作关系ArmorPaint和Blender的关系不是替代而是互补。Blender负责建模、展UV、骨骼绑定、动画ArmorPaint负责贴图绘制。两者之间的桥梁是模型文件和贴图文件。具体来说你在Blender里完成模型和UV之后把模型导出为OBJ或FBX格式导入ArmorPaint进行贴图绘制。画完之后ArmorPaint导出贴图文件你再把贴图导回Blender或者导入游戏引擎。这个流程听起来多了一步但实际上它把“建模”和“贴图”这两个差异很大的工作流解耦了各自用最合适的工具完成。我个人的习惯是在Blender里把UV展好确保没有重叠、没有拉伸然后导出模型。在ArmorPaint里画完贴图后导出为PNG或TGA格式再在Blender里连接节点查看效果。如果发现UV有问题回到Blender调整重新导出模型ArmorPaint会自动重新加载模型并保留已有的绘制内容——这一点非常方便省去了重新绘制的麻烦。2.4 核心功能模块拆解ArmorPaint的功能可以分成几个核心模块来理解。第一个是笔刷系统包括基础笔刷、橡皮擦、模糊、克隆等。笔刷支持压感支持自定义笔尖形状支持导入Photoshop的ABR笔刷文件。第二个是图层系统每个通道有独立的图层堆栈支持混合模式、透明度、遮罩。第三个是材质系统内置了一批PBR材质预设可以直接拖到模型上使用也支持自定义材质。第四个是烘焙系统可以把高模的细节烘焙到低模的法线贴图、环境光遮蔽贴图等。第五个是导出系统支持导出各种通道的贴图支持自定义导出模板。这几个模块之间的协作逻辑是你先导入模型然后烘焙需要的贴图如果有高模的话接着用笔刷和材质在图层上绘制最后导出贴图。整个流程是线性的没有太多分支上手很快。3. 从零开始搭建ArmorPaint工作流的实操要点3.1 安装与初始配置ArmorPaint的安装方式取决于你的操作系统。官方提供了Windows、Linux和macOS的预编译版本下载后解压即可运行。Linux用户需要注意它依赖一些图形库如果启动时报错通常是缺少OpenGL相关的依赖。我在Ubuntu 22.04上安装时需要额外安装libgl1-mesa-glx和libglu1-mesa这两个包。首次启动后建议先做几项配置调整。第一项是笔刷平滑度默认值可能偏高导致笔触有延迟感。我一般把它调到0.3左右既保留一定的平滑效果又不会觉得笔刷跟不上手。第二项是撤销步数默认是20步对于复杂的绘制来说不够用建议调到50步以上。第三项是纹理分辨率如果你画的贴图是2K或4K需要确保显存足够。ArmorPaint在绘制时会实时渲染显存不足会导致卡顿甚至崩溃。提示ArmorPaint的配置文件位于用户目录下的.config/ArmorPaint文件夹中Linux或%APPDATA%/ArmorPaintWindows。如果软件出现异常可以尝试删除这个文件夹恢复默认设置。3.2 模型导入与UV检查模型导入支持OBJ和FBX两种格式。我推荐用OBJ因为它的兼容性更好不容易出现材质丢失的问题。导入时需要注意几个参数缩放比例、坐标轴朝向、是否导入法线。ArmorPaint默认使用Y轴向上而Blender默认是Z轴向上所以从Blender导出时需要把坐标轴转换一下或者在导入时手动调整。导入模型后第一件事是检查UV。ArmorPaint的视口里可以切换到UV视图查看UV的分布情况。重点检查三个问题UV有没有重叠、UV有没有超出0-1范围、UV的密度是否均匀。如果UV有问题贴图绘制会直接受影响——重叠的UV会导致两个区域画到同一个位置超出范围的UV会导致贴图边缘出现接缝。我在实际项目中遇到过一个问题Blender里展UV时用了“智能UV投影”结果有些面的UV被压缩得很小导致贴图分辨率不够。后来改成手动标记缝合线、手动展开虽然费时间但UV质量明显提升。ArmorPaint里有一个“UV检查”模式可以用棋盘格纹理覆盖模型直观地看到UV的拉伸情况。如果棋盘格在某些区域明显变形说明那里的UV需要调整。3.3 烘焙流程与参数设置烘焙是ArmorPaint里比较容易被忽视但非常重要的环节。如果你有高模和低模两套模型烘焙可以把高模的细节比如雕刻的纹理、倒角、凹凸转移到低模的法线贴图上。这样低模在游戏里运行时看起来就像高模一样精细。烘焙需要先导入高模然后在烘焙面板里设置参数。关键参数包括烘焙分辨率、射线距离、抗锯齿级别、是否烘焙环境光遮蔽。分辨率一般设成和最终贴图一样比如2048x2048或4096x4096。射线距离决定了从低模表面向外搜索高模表面的范围设得太小会漏掉细节设得太大可能会捕捉到不该捕捉的面。我一般从0.1开始试根据结果调整。环境光遮蔽AO的烘焙也很有用。AO贴图可以模拟模型表面的阴影增加立体感。ArmorPaint烘焙AO时会发射大量射线计算每个点被遮挡的程度。这个过程比较耗时但结果可以直接用在材质里作为遮罩或者叠加层。注意烘焙前一定要确保高模和低模的位置是对齐的。如果高模和低模错位烘焙出来的法线贴图会完全错误。我习惯在Blender里把高模和低模放在同一个位置导出时一起导出这样导入ArmorPaint后位置就是对的。3.4 笔刷与材质的基础操作ArmorPaint的笔刷操作和大多数绘画软件类似左键绘制右键旋转视角中键平移滚轮缩放。笔刷面板里可以调整大小、硬度、流量、间距等参数。压感支持需要数位板Wacom和大多数国产数位板都能识别。材质的使用方式有两种。一种是从材质库直接拖拽到模型上ArmorPaint会自动创建一个填充图层把材质应用到整个模型或者当前遮罩区域。另一种是手动创建图层然后在图层上绘制。前者适合快速铺底色后者适合精细调整。我常用的一个技巧是先用材质库里的预设材质铺一层基础然后用笔刷在图层上做局部调整。比如一个金属材质的武器先用金属预设铺底然后在边缘画磨损、在凹陷处画污渍、在握把处画手汗痕迹。这些细节不需要复杂的节点只需要在对应通道的图层上用笔刷画就行。3.5 遮罩与智能材质的配合使用遮罩是ArmorPaint里最强大的功能之一。它允许你根据模型的几何属性比如曲率、环境光遮蔽、位置自动生成遮罩然后在遮罩范围内绘制。举个例子你想在模型的边缘画磨损效果可以生成一个基于曲率的遮罩边缘区域会自动被选中然后你在基础色通道画亮色、在粗糙度通道画低粗糙度磨损效果就出来了。智能材质是遮罩和材质的组合。ArmorPaint内置了一些智能材质预设比如“生锈金属”、“磨损塑料”、“脏旧木材”等。每个智能材质包含多个图层每个图层有自己的遮罩和材质参数。你可以直接拖到模型上使用也可以拆开来看它是怎么实现的学习它的图层结构。我个人的经验是不要完全依赖预设的智能材质而是把它们当成学习工具。拆开一个智能材质看看它用了哪些遮罩、哪些混合模式、哪些通道然后根据自己的需求调整。这样积累下来你就能搭建自己的智能材质库。4. 完整实操流程从一个Blender模型到最终贴图4.1 在Blender中准备模型和UV假设我们有一个简单的游戏道具模型——一个木箱。在Blender里首先确保模型是低模面数控制在合理范围内。然后展UV进入编辑模式选择所有面按U键选择“展开”。如果自动展开的效果不理想可以手动标记缝合线。木箱这种硬表面模型缝合线一般放在边缘和背面。UV展好后检查一下UV布局。在UV编辑器里确保所有UV都在0-1范围内没有重叠。可以用“UV打包”功能自动排列但自动排列有时候会把UV排得太密导致贴图分辨率不够。我一般手动调整一下让重要的面比如木箱的正面占据更大的UV面积。导出模型时选择OBJ格式勾选“导出UV”和“导出法线”。如果模型有多个材质槽确保每个材质槽对应的面都正确分配了UV。4.2 导入ArmorPaint并设置项目打开ArmorPaint新建一个项目。在项目设置里选择贴图分辨率我一般用2048x2048选择颜色空间sRGB用于基础色线性用于其他通道。然后导入刚才导出的OBJ文件。导入后模型会出现在视口中央。如果模型太大或太小可以用视口导航工具调整。接下来检查UV切换到UV视图确认UV没有重叠、没有超出范围。如果发现问题回到Blender调整后重新导入。然后设置通道。ArmorPaint默认包含基础色、粗糙度、金属度、法线四个通道。如果你需要额外的通道比如高度、自发光可以在项目设置里添加。每个通道可以单独设置分辨率和颜色空间。4.3 烘焙法线和AO贴图如果你有高模现在导入高模。在烘焙面板里选择“法线”和“环境光遮蔽”两个选项。设置分辨率与项目一致射线距离从0.1开始。点击烘焙等待完成。烘焙完成后可以在视口里预览法线贴图的效果。如果发现某些区域的法线不对比如出现黑块或者奇怪的凹凸可能是射线距离不合适调整后重新烘焙。AO贴图烘焙时间较长但结果可以直接用在材质里。如果没有高模可以跳过烘焙步骤直接在低模上绘制。但法线贴图仍然可以手动绘制——用笔刷在法线通道上画凹凸细节。4.4 分层绘制木箱材质现在开始绘制。首先在基础色通道创建一个填充图层用木头的基色填充整个模型。然后在粗糙度通道调整粗糙度木头一般是中等粗糙度设成0.6左右。金属度通道保持0因为木头不是金属。接下来做木纹。我一般用两种方法一种是导入一张木纹纹理作为图层贴上去然后用遮罩控制显示范围另一种是用笔刷手动画。前者适合快速出效果后者适合精细控制。我通常先用纹理铺底然后在边缘和角落手动画一些磨损和变色。木箱的边角容易磨损露出里面的浅色木质。在基础色通道新建一个图层用浅色画笔在边角处绘制然后用曲率遮罩限制在边缘区域。在粗糙度通道同步调整磨损区域的粗糙度降低看起来更光滑。最后加一些污渍和灰尘。在基础色通道用深色画笔在底部和缝隙处画一些污渍在粗糙度通道提高这些区域的粗糙度。AO贴图可以作为遮罩使用让污渍自然地聚集在凹陷处。4.5 导出贴图并回导Blender验证绘制完成后导出贴图。ArmorPaint支持导出所有通道为单独的PNG文件也支持打包导出。我一般选择单独导出因为后续在Blender里连接节点更灵活。导出时注意颜色空间基础色导出为sRGB其他通道导出为线性。如果导出设置错了贴图在引擎里会显示不正常。回到Blender给模型新建材质用图像纹理节点加载导出的贴图。基础色连接到Principled BSDF的Base Color粗糙度连接到Roughness金属度连接到Metallic法线贴图需要经过Normal Map节点再连接到Normal。连接好后在视口里切换到材质预览模式检查效果。如果发现贴图接缝或者颜色不对回到ArmorPaint调整后重新导出。这个迭代过程可能会重复几次直到满意为止。5. 常见问题与排查技巧实录5.1 笔刷延迟和卡顿怎么解决笔刷延迟是ArmorPaint里最常见的问题。原因通常有三个显存不足、笔刷分辨率太高、撤销步数太多。显存不足的话降低贴图分辨率或者关闭一些通道的实时预览。笔刷分辨率太高的话在笔刷设置里降低“笔刷纹理分辨率”。撤销步数太多的话适当减少比如从100降到50。还有一个容易被忽视的原因显卡驱动。ArmorPaint依赖OpenGL如果驱动版本太旧性能会受影响。我在一台老笔记本上遇到过这个问题更新驱动后流畅度明显提升。5.2 烘焙出来的法线贴图有黑块或接缝法线贴图出现黑块通常是射线距离设置不当。射线距离太小低模表面某些区域找不到对应的高模面就会产生黑块。射线距离太大可能会捕捉到背面或者不该捕捉的面产生错误的凹凸。解决办法是调整射线距离从0.05到0.5之间逐步尝试。接缝问题通常和UV有关。如果UV接缝处的法线不连续烘焙出来的法线贴图在接缝处会有明显的痕迹。解决办法是在Blender里把UV接缝放在不太显眼的位置或者在ArmorPaint里用“接缝修复”功能处理。5.3 导出的贴图在引擎里显示不正常这个问题我遇到过好几次原因基本都在颜色空间上。基础色贴图必须是sRGB如果导出成了线性颜色会偏暗。粗糙度、金属度、法线贴图必须是线性如果导出成了sRGB数值会偏移。检查ArmorPaint的导出设置确保每个通道的颜色空间正确。另一个可能的原因是法线贴图的绿通道方向。不同引擎对法线贴图的绿通道方向要求不同有的要求Y有的要求Y-。ArmorPaint默认是Y如果引擎要求Y-需要在导出时翻转绿通道或者在引擎里设置。5.4 图层太多导致软件变慢图层是ArmorPaint的核心但图层太多确实会影响性能。每个图层都需要实时渲染图层越多GPU负担越重。我的经验是尽量合并那些不再修改的图层。比如基础色铺完之后如果确定不会再调整可以合并到下面的图层里。遮罩和智能材质也会增加图层数量用完之后可以删掉或者合并。还有一个技巧是把不工作的通道暂时关闭。比如你在画基础色的时候粗糙度和金属度通道可以暂时隐藏减少实时渲染的负担。5.5 常见问题速查表问题现象可能原因排查方法解决方案笔刷延迟显存不足/笔刷分辨率高/撤销步数多查看显存占用检查笔刷设置降低分辨率减少撤销步数更新驱动法线贴图黑块射线距离不当调整射线距离重新烘焙从0.05到0.5逐步尝试贴图颜色偏暗颜色空间错误检查导出设置基础色用sRGB其他用线性软件卡顿图层过多查看图层数量合并图层关闭不用的通道UV接缝明显UV布局问题检查UV接缝位置调整UV或使用接缝修复材质显示异常通道连接错误检查Blender节点连接确保每个通道连接到正确输入提示ArmorPaint的日志文件位于用户目录下的.config/ArmorPaint/log.txt遇到崩溃或者异常时可以查看日志里面通常有详细的错误信息。5.6 一些我踩过的坑和对应的技巧第一个坑在ArmorPaint里画了很久结果发现UV有问题需要回Blender调整。重新导入模型后之前的绘制内容全没了。后来我学乖了在开始绘制之前一定反复检查UV。如果确实需要调整UV尽量在绘制早期调整减少损失。第二个坑导出贴图时忘了改颜色空间导致在引擎里颜色完全不对。后来我养成了一个习惯导出前先检查一遍每个通道的颜色空间设置确认无误再导出。第三个坑用了太多智能材质图层数量爆炸软件卡到没法操作。后来我学会了“用完即合并”的原则智能材质调整好之后确认不再修改就合并图层。第四个坑烘焙法线时射线距离设得太大结果把木箱内部的细节也烘焙到了外表面出现了奇怪的凹凸。后来我学会了先用小距离试烘焙看效果再调整。6. 进阶技巧让ArmorPaint融入你的游戏资产管线6.1 自定义导出模板ArmorPaint支持自定义导出模板你可以定义每个通道导出为什么格式、什么颜色空间、什么命名规则。这对于需要批量导出贴图的团队来说非常有用。比如你可以设置一个模板基础色导出为{模型名}_BaseColor.png法线导出为{模型名}_Normal.png粗糙度导出为{模型名}_Roughness.png。这样导出后直接就能被引擎识别。设置方法是在导出面板里选择“自定义模板”然后编辑模板文件。模板文件是一个文本文件里面定义了每个通道的导出参数。你可以参考默认模板的格式来修改。6.2 用脚本批量处理材质ArmorPaint支持通过命令行参数启动也支持一些脚本化的操作。虽然它的脚本能力不如Blender那么强大但对于批量处理来说已经够用。比如你可以写一个脚本遍历一个文件夹里的所有OBJ模型自动导入、烘焙、导出贴图。这对于需要处理大量相似资产的场景很有帮助。我试过用Python写一个简单的批处理脚本调用ArmorPaint的命令行接口批量烘焙法线贴图。虽然功能有限但确实省去了大量重复劳动。6.3 与Blender的节点系统配合ArmorPaint导出的贴图在Blender里使用时可以配合节点系统做进一步的调整。比如你可以用ColorRamp节点调整粗糙度的对比度用Mix节点混合两张基础色贴图用Bump节点在法线贴图的基础上增加额外的凹凸细节。我常用的一个技巧是在Blender里用ArmorPaint导出的AO贴图作为遮罩混合两种不同的材质。比如木箱的凹陷处用深色材质凸起处用浅色材质AO贴图自动控制混合范围。这样可以在不重新绘制的情况下快速调整材质的整体效果。6.4 性能优化的一些经验ArmorPaint对显存的要求比较高尤其是在处理4K贴图和多通道的时候。如果你的显卡显存不足8GB建议把贴图分辨率控制在2K以内。如果确实需要4K可以考虑分通道绘制——先画基础色导出后再画粗糙度以此类推。虽然麻烦一点但能避免显存溢出。另一个优化技巧是关闭不需要的通道的实时预览。比如你在画基础色的时候法线通道和粗糙度通道可以暂时隐藏减少GPU的实时渲染负担。等基础色画完了再打开其他通道继续画。6.5 社区资源和学习路径ArmorPaint的社区虽然不如Substance Painter那么庞大但也有一些有价值的资源。官方论坛里有用户分享的笔刷、材质、智能材质预设。GitHub仓库的issue区里有很多技术讨论遇到问题可以去搜一下大概率有人遇到过类似的情况。学习路径方面我建议先从基础笔刷和图层操作开始熟悉了之后再尝试遮罩和智能材质。不要一上来就追求复杂的材质效果先把基础流程跑通再逐步增加细节。我见过很多人一开始就想做电影级的材质结果卡在某个环节就放弃了。循序渐进才是正道。7. 我对ArmorPaint在实际项目中的一些个人体会用了两年多ArmorPaint最大的感受是它把“够用”这件事做到了极致。它没有Substance Painter那么强大的材质节点系统没有Marvelous Designer那样的布料模拟也没有Marmoset Toolbag那样的实时渲染质量。但它有的东西——图层绘制、遮罩、烘焙、导出——都是游戏贴图流程里最核心、最高频使用的功能。这些功能它做得足够稳定、足够流畅而且完全免费。对于独立开发者和小团队来说这意味着你可以把有限的预算花在更重要的地方比如音效、音乐、市场推广。对于学习者来说这意味着你可以零成本地学习一套完整的PBR贴图流程学到的知识在Substance Painter里同样适用。当然它也有明显的短板。比如它的笔刷系统不如Photoshop丰富它的材质节点系统不如Substance Designer灵活它的实时渲染质量不如Marmoset。但这些短板对于大多数游戏项目来说并不是致命的。你完全可以在ArmorPaint里完成90%的贴图工作然后在Blender或者引擎里做最后的调整。最后分享一个小技巧ArmorPaint的工程文件可以保存为.arm格式这个格式包含了所有的图层、遮罩、材质信息。我习惯在项目的不同阶段保存多个版本比如“基础色完成”、“细节完成”、“最终版”。这样如果后面发现某个阶段出了问题可以回退到之前的版本重新调整不用从头再来。这个习惯帮我省了很多时间希望你也能用上。