ArmorPaint实战:免费开源PBR贴图绘制与GPU加速全流程
说到PBR贴图绘制很多做游戏美术和独立开发的同行第一反应就是Substance Painter可商用授权价和订阅制确实劝退了不少人。ArmorPaint这个名字这几年在Github和独立开发圈子里越来越常见它是一款基于GPU实时计算的3D纹理绘制软件由Armor3D引擎的作者Lubos Lenco开发核心引擎用Rust编写整个绘制过程全部走GPU运算。它的最大卖点是图层式绘制、智能材质、PBR多通道支持还能一键把贴图导出到Blender、Unity、Unreal、Godot这些主流引擎里关键是完全免费、代码开源。很多人把它叫“免费版SP”但用了一段时间后我发现它并不只是便宜流程本身就很有意思。这篇内容适合谁呢如果你是做游戏模型、场景道具、角色装备的正在找一套能落地的PBR贴图流程又不想先给商业软件掏钱或者你已经是Blender用户受够了内置Texture Paint那种没有图层的工作方式再或者你是学生、自由职业者打算学习行业标准的贴图制作思路——ArmorPaint都值得花一下午跑通。接下来我从选型思路、安装准备、核心绘制流程到实际踩过的坑统统过一遍。1. 为什么要选ArmorPaint做PBR贴图1.1 免费开源背后的底气先看它的技术底子。ArmorPaint不是一个玩具项目它的渲染预览基于实时PBR光照能够在视口里直接看到粗糙度、金属度、法线这些通道带来的真实反射变化。底层API在Windows上走Vulkan或DirectXmacOS走MetalLinux走Vulkan这意味着着色器计算、笔刷合成、智能材质生成都在显卡上完成。实际体验下来1024分辨率的贴图配合图层叠加、模糊、噪声运算操作起来非常跟手基本没有传统CPU绘制那种转圈等待。开源这块它给得很彻底代码直接托管在GitHub上MIT协议。这是什么概念你可以在自己的商业项目里用可以改源码甚至可以把它集成进自己的工具链。对比一下SP的订阅价格如果你只是偶尔给模型刷几张贴图ArmorPaint几乎是零成本入场。不过要说清楚免费开源不意味着它各方面都比商业软件强。它在笔刷种类、材质库数量、生态插件上确实比SP少软件稳定性和大型项目文件管理也还有差距。但它的核心流程——图层、遮罩、智能材质、烘焙、导出——全部是行业通用的逻辑学会了这套思路以后切到SP或者别的软件成本很低。1.2 跟Substance Painter、Blender自带绘制对比我拿它和最常见的两个替代方案做了个对比。对比项ArmorPaintSubstance PainterBlender Texture Paint价格免费开源订阅/买断免费图层系统完整类PS完整行业标准没有真正图层智能材质有基于程序化噪声强大生态丰富无GPU加速是是部分导出引擎预设Blender/Unity/Unreal/Godot等全需手动配置中文界面有有有学习曲线平缓偏陡平缓但功能弱Blender自带的Texture Paint我用了很久最难受的是没有图层。你画错了想改只能靠撤销或者反复涂抹不像ArmorPaint里新建一个图层用遮罩控制显示范围随时可以关掉这一层的眼睛。至于SP确实功能全但如果你只是做中小型项目的道具和独立游戏资产很多高级功能其实用不太上。ArmorPaint把最核心的PBR绘制闭环做齐了省下的钱和精力很实在。1.3 建议什么人用这套工作流我个人是这么归类的。如果你满足下面任何一种情况ArmorPaint会很合适独立开发者或小工作室需要免费且可商用DCC工具链Blender用户想要一个专业的PBR贴图输出环节学生或转行新人先用开源软件练手理解PBR流程硬表面道具、载具、场景物件的贴图制作这类需求ArmorPaint很顺手需要在Linux环境下做贴图开发的它跨平台支持得很好但如果你做的是需要超高精度皮肤材质、复杂自定义笔刷、大团队多人协作的项目还是老老实实选商业软件。选型这事没有万能答案认清需求边界才最重要。2. 安装、界面与准备2.1 五分钟装好并启动安装过程简单到没什么可讲的。官网下载对应系统安装包解压或者安装程序点下一步就行。Steam上也能直接领免费。Linux用户还可以从软件源或者手动编译安装。有一点要注意启动前先确认显卡驱动支持Vulkan可以下载一个Vulkan Caps Viewer或者直接在命令行运行一遍ArmorPaint它会明确提示API是否可用。硬件要求方面官方给的门槛不高需要支持Vulkan 1.1的GPU2GB显存就能跑。但我的实际体验是如果你要处理2048分辨率贴图、多个UDIM纹理集最好用4GB以上显存不然图层叠加多的时候会有明显掉帧。内存16GB起步比较稳CPU反而不是瓶颈运算都在GPU上。2.2 界面布局和快捷键第一次打开ArmorPaint你可能会觉得界面比SP简洁很多这其实是个优点。顶部是菜单栏左侧是工具栏右侧是图层和通道面板中间是3D视口下边是状态栏和信息栏。重点要理解右边面板的两个核心分区图层列表和通道列表。通道列表里能看到Base Color、Normal、Roughness、Metalness等点击哪个通道视口里就实时显示哪个通道的内容。快捷键方面记住这几个高频操作就够了B笔刷F填充S取样颜色CtrlZ撤销鼠标右键旋转视图Shift右键平移滚轮缩放注意这里的视图操作跟Blender不一样第一次用会不习惯我大概花了半小时才适应。如果你不喜欢这个操作方式Edit - Preferences里有按键设置可以改。2.3 模型导入前的准备工作这是新人最常翻车的环节。ArmorPaint支持直接导入OBJ、FBX、GLTF/GLB、PLY、STL等格式但它本身不做建模也不做UV展开所有模型在导入前必须已经展好UV否则绘制结果会乱。另一件重要的事是检查模型比例和坐标方向。ArmorPaint以米为单位导入后如果模型过大或过小笔刷尺寸和烘焙参数都会跟着乱套。我通常会在Blender里把模型缩放到大致真实尺寸然后导出GLTF格式。导出时勾选“应用变换”确保模型在导入ArmorPaint时已经是干净的变换状态。接线板一样的情况我也遇到过模型带着一堆光滑组和材质节点导出结果笔刷上去卡顿明显。所以在导出前最好清理掉不必要的顶点色、材质槽和修改器。提示如果只是测试可以直接用软件自带的示例工程。在欢迎界面选择其中一个示例场景边玩边理解图层的概念。3. PBR绘制实操3.1 图层系统像Photoshop一样刷模型ArmorPaint的图层系统是我认为它最核心的价值。它的逻辑跟Photoshop非常像可以新建空白图层可以填充纯色可以在图层上加遮罩可以调整不透明度和混合模式每个图层可以单独显示或隐藏。但跟PS不同的是这里的每个图层不只是RGB颜色它同时可以承载PBR的多个通道信息比如你画上去的笔触可以同时影响颜色、粗糙度和金属度。实际操作里我通常这么安排图层结构。最底层是一个Base Color填充层把模型的基本色铺好比如木质箱子的棕色。往上加一个“边缘磨损”层用遮罩控制磨损只出现在边角和高频区域。再往上加锈迹层或者污渍层最后用一个亮度/对比度调整层统一整体色调。每个层随时可以关掉、重画、调整透明度效率非常高。要说明的是图层本身是矢量化的退出软件再打开还能继续编辑。但如果你把一个图层“栅格化”或者合并了那它就变成纯像素数据后面的修改会麻烦很多。所以我的建议是在成品导出之前尽最大可能保留图层结构方便反复调整。3.2 通道与材质参数PBR纹理的核心是一组描述物体表面反射属性的贴图ArmorPaint在右侧通道面板里把这些都暴露出来了Base Color颜色信息定义物体是什么颜色。Metalness金属度0表示非金属1表示金属。Roughness粗糙度0表示光滑镜面1表示粗糙散射。Normal法线贴图用福利骗光照模拟凹凸细节。Height高度图配合视差或位移使用。Ambient Occlusion环境光遮蔽记录物体缝隙里被遮挡的暗部。Opacity透明度用于带镂空或半透明材质。Emissive自发光做发光条、显示器屏幕等效果。在绘制时你要清楚一个关键点这些通道并不是独立存在的。一个金属表面你既要画颜色也要把金属度拉高还要把粗糙度压低三个通道匹配好才能有真实的金属感。ArmorPaint的填充工具可以同时对多个通道生效比如在智能材质里它会自动帮你把底色的同时把金属度通道涂成1粗糙度涂成0.2这就是为什么智能材质画一下就有逼真效果。3.3 智能材质和程序化细节智能材质是ArmorPaint效率提升的最大来源。它不是一个简单的贴图而是一段程序化的节点组合。软件内置了若干预设比如生锈金属、划痕塑料、泥土石头等。你新建一个智能材质图层往模型上一刷软件会基于模型自身的曲率、环境光遮蔽、噪声函数自动生成细节纹理边缘自动磨亮凹陷自动积灰效果非常自然。更进阶的用法是手动创建自己的智能材质。在材质面板右键新建材质然后添加填充层、噪声层、曲率遮罩、AO遮罩这些模块。例如我想做一个带划痕的深灰色金属枪身可以这么配置底层填充深灰色金属颜色层 Metalness1 Roughness0.3添加一个噪声条纹作为划痕遮罩让划痕只在粗糙度高和亮光区出现最后套一层轻微的黄色污渍做旧化。整个过程不需要手动画一笔完全靠程序化叠加再配合遮罩控制分布效果稳定性很好。需要注意的是智能材质在视口里的实时效果受分辨率影响。如果UV密度很碎或者纹理分辨率偏低程序化细节可能会糊成一团。我通常把模型的主要表面单独分纹理集给密集区域更高分辨率。3.4 遮罩和笔刷控制细节图层和智能材质解决的是“铺基础”的问题遮罩和笔刷解决的是“人工修改”的问题。在一个图层上添加白色遮罩然后用黑色在上面画画过的地方图层内容就会被隐藏白色区域显示。这跟SP的逻辑一模一样非常好理解。笔刷的设置主要集中在左侧工具栏和顶部参数面板。常用参数包括大小、流量、硬度、间距、强度等。这里有个经验不要用100%硬度硬怼边缘除非你刻意要硬边。做旧化、污渍、边缘磨损时硬度调低一些20%到40%流量也调低一些30%到60%配合鼠标手势的压感出来的过渡会自然得多。另外ArmorPaint支持笔刷纹理模板你可以导入一张青苔、裂缝或者血迹图片作为笔刷图案用它直接在模型上涂刷比单纯圆形笔刷高效得多。我个人做地面血迹和墙体污渍时几乎离不开这个功能。3.5 烘焙环境光遮蔽等贴图ArmorPaint内置烘焙功能可以烘焙环境光遮蔽AO、曲率、厚度、法线、世界空间法线、位置等贴图。这些烘焙产物主要是用来服务后续的智能材质和遮罩。比如做一个石头边缘磨损靠曲率贴图就能精准找出棱角区域再把它接到遮罩上磨损效果就能自动跟随模型几何形状不需要手涂。烘焙操作在Texture - Bake里。选择你要烘焙的类型设置分辨率、抗锯齿倍率、采样数量然后点击Bake。我的经验是先查看模型的UV是否正确再确定纹理分辨率最后才点击烘焙。常见错误是模型还没展开UV就烘焙结果得到一张全黑的输出这种问题排查起来非常浪费时间。烘焙出来的贴图一般会放在一个独立的图层或通道里注意烘焙结果默认可能只是视口显示需要你手动把它应用到遮罩或者导出成文件。整个流程不复杂但设置项比较多建议第一次跑通一个简单球体理解每个烘焙类型的作用再应用到正式资产。3.6 导出去Blender/Unity/UnrealArmorPaint的亮点之一是导出模板做得非常贴心。在File - Export - Textures里你可以选择目标引擎模板比如Blender、Unity、Unreal、Godot然后选择要导出的通道、分辨率、图片格式PNG、JPG、EXR、HDR、KTX2等一键生成一组按引擎规范命名的贴图文件。以Blender为例选择Blender模板后导出的贴图会自动命名成roughness、metallic、normal、base_color等你在Blender里用Principled BSDF把这些贴图挨个接入对应输入口材质就通了。Unity模板会生成_albedo、_normal、_metallic等后缀Unreal也是如此。这个细节对自动化流程很有帮助不用再手工改后缀。导出前有两个检查点。第一确认活动通道里确实有要导出的内容比如你只在Base Color里画了但导出时全勾选其他通道就会是一张空白图。第二确认分辨率跟你项目需求匹配ArmorPaint可以等比放大或缩小贴图但不要过度放大2048导出成4096并不能增加细节。导出完成后在引擎里看到的效果和ArmorPaint视口会基本一致这得益于双方PBR标准的一致性但受引擎光照差异影响多少会有微调的空间。4. 踩坑记录与排查方法4.1 问题速查表我整理了一下自己在实际使用中遇到最多的问题做成一张速查表现象可能原因解决办法启动报错提示没有Vulkan/Metal显卡驱动太旧或API缺失升级显卡驱动确认GPU支持Vulkan 1.1导入模型后视口是空白的模型没有UV或者比例过大/过小在建模软件里展好UV重置变换再导入笔刷画上去没有反应当前图层被隐藏或者画在了错误通道检查图层眼睛图标选中目标通道再画法线贴图在视口里没效果法线通道未激活或视角光照不足激活Normal通道调整环境光旋转视角查看导出到引擎里材质是紫色没有正确创建材质或者贴图路径错误在引擎里新建材质并接入贴图节点烘焙结果是全黑模型没有UV或采样数值太小确认UV展开提高烘焙采样数图层数量多了就卡顿显存不足或者画布分辨率太大降低分辨率合并部分图层智能材质涂出来很糊纹理分辨率不够UV密度太碎提高该区域纹理分辨率优化UV布局4.2 一个让我折腾半天的问题说一个我自己踩得比较惨的坑。有一回画一个带螺纹的机械零件在ArmorPaint里预览一切正常金属感、粗糙度都对结果导入Unity之后零件表面出现大量噪点、高光闪烁怎么看怎么不对劲。我一开始以为是法线贴图方向问题换Y轴、反转绿色通道都没有改善最后排查到原因我导出的是Height贴图但Unity里的Standard Shader上Height通道被直接接到了Metallic的接口。重新检查所有接口接入后问题立刻消失。这件事给了我一个教训导出前一定要在引擎里逐个检查贴图通道的对应关系。ArmorPaint的模板命名只是参考最终接入还看引擎具体设置尤其是法线贴图不同引擎对法线方向和Y轴正负有不同约定最好在引擎里单独预览一遍。4.3 性能调优建议如果你画的模型比较大UV拆成多个纹理集图层叠加又很重性能会明显下降。这时候优先检查显示设置。View面板里可以调低渲染分辨率和景深效果另外可以临时隐藏暂不编辑的图层减少GPU运算压力。烘焙时也尽量用固定样本数不要无限拉高抗锯齿倍数。还有一个容易忽略的点纹理集Texture Set数量。ArmorPaint支持UDIM和多纹理集但哪怕我们都用上了每次加载都会消耗显存。如果模型不是特别复杂建议合并材质区域用一套2048或4096纹理承载所有表面速度快管理也方便。如果非要多个纹理集至少把不常用的集先关闭显示。5. 结尾最后分享一点实际体会。刚开始用ArmorPaint时我总想找到和Substance Painter一模一样的按钮和素材潜意识里觉得“免费软件肯定差点意思”导致很多功能都用得不顺手。过了几天我完全按照它自己的逻辑来图层结构尽量简化智能材质大胆用遮罩做局部调整烘焙出来的AO和曲率作为噪声层的高度来源。整个流程跑顺之后我发现它的效率其实非常高尤其是程序化生成细节这块比手动一笔一笔刷快十倍不止。如果你刚接触我的建议是先拿一个简单道具走通全流程建模 - 展UV - ArmorPaint铺底色 - 加遮罩 - 烘焙AO - 导出到Blender或Unity。这比空看一百篇教程有用得多。如果手头有觉得“贴图很难画”的旧模型也适合拿来做练习对象很多问题画着画着自己就想明白了。祝各位画图顺利少踩坑。