
1. 项目概述ArmorPaint是什么它解决了什么问题先给没接触过的朋友一个直观印象ArmorPaint是一款脱胎于Armory3D游戏引擎的开源3D材质绘制软件简单说就是给三维模型直接“上色画贴图”的工具。做游戏资产、做动画渲染、做产品展示的人都知道模型建好之后真正的质感提升靠的是贴图和材质。以前这套流程离不开Substance Painter这类商业软件而ArmorPaint的出现给开源生态提供了一个相当能打的替代品。它的出身很有意思。Armory3D原本是Blender里的一套游戏引擎插件为了让美术创作者能在Blender里直接给模型刷PBR材质开发者Lubos Lenco把引擎里的纹理绘制模块单独拆了出来重构成了一个独立的桌面应用这就是ArmorPaint。所以你在使用它的时候会明显感觉到它和Blender的配合度极高很多操作逻辑、节点思维都带着Blender的血统这既是它的风格特色也是它的核心竞争力。从实际用途来看它能做的事情比想象中多PBR贴图绘制Albedo、Roughness、Metalness、Normal等通道都支持、程序化噪声笔刷、图层和遮罩系统、AO和环境光遮蔽烘焙、高模到低模的贴图烘焙、甚至还能配合Stable Diffusion搞AI辅助出图。最让我觉得省心的一点是它支持PTex模式也就是说模型可以完全不需要展UV直接像手绘一样在表面上刷油漆这对很多被展UV折磨过的人来说简直是救命稻草。什么人适合用如果你是Blender用户、独立游戏开发者、学生党或者只是想把Substance Painter的订阅费省下来ArmorPaint非常值得上手。它的学习曲线比SP要陡一点点但一旦摸透了那个节点材质系统效率其实很高。下面我从它的设计思路讲起再逐步拆解实操流程最后把我在使用过程中踩过的坑和排查经验一并分享出来。2. 核心设计思路为什么它选择“节点材质实时GPU绘制”这条路线2.1 从Armory3D到独立工具的演变逻辑很多人第一次打开ArmorPaint会觉得界面很“程序员审美”但其实这套设计是很有来头的。它的底层基于Kha框架渲染后端支持Vulkan、OpenGL、Metal和DirectX天生就是奔着跨平台实时渲染去的。它不像Substance Painter那样走“高层烘焙低层缓存”的复杂管线而是把核心放到GPU实时合成上——你每一次笔刷落下去都是在GPU上做一次实时的纹理层混合计算所见即所得零等待。这种设计思路直接决定了它的两个优势一是性能表现非常激进哪怕你有一张4096分辨率的贴图集配合现代显卡也能流畅绘制二是它的材质表达能力和Blender的节点系统一样走的是“节点连线”模式你可以在材质编辑器里把噪声纹理、颜色渐变、遮罩混合全部连起来这比单纯用几层画笔要强大得多。不过也得说清楚这种“GPU实时合成”的模式也有代价。它要求显卡驱动对Vulkan或OpenGL支持良好老显卡或者某些集成显卡会出现启动黑屏或者笔刷延迟的问题我在后面问题排查部分会细说。2.2 图层、遮罩与程序化纹理材质绘制的三大支柱用过PS的人对图层都不陌生ArmorPaint的贴图绘制也沿用了图层思维但它的图层比PS的图层更“三维”。在ArmorPaint里每个图层可以拥有独立的混合模式、遮罩、填充器和透明度而且这些图层会被实时合成到各个PBR通道中。举例来说你可以把“基础色”图层和“粗糙度”图层分开管理想要让锈迹区域同时影响颜色和粗糙度只需要把同一个遮罩拖到两个图层上就可以了这对做真实材质质感极有帮助。程序化纹理是另一个我非常推荐的模块。它内置了Perlin噪声、Voronoi、Brick、Grunge等几十种预置的纹理生成器可以挂在图层的“填充”通道里。也就是说你不一定非要手动画出磨损边缘直接给图层添加一个“磨损遮罩噪声扰动”就能模拟出相当自然的划痕和污渍分布。这个方法我强烈建议新手优先掌握因为手绘铁锈和磨损需要大量的美术经验和笔触积累而程序化纹理在速度和可控性上更适合工业化产出。2.3 为什么说它与Blender的协同是“原生血统”ArmorPaint和Blender之间有个官方支持的实时桥接功能叫做Live Link。你在Blender里移动摄像头视角、切换模型或者修改选中的物体ArmorPaint里会同步更新反过来你在ArmorPaint里画的每一笔也能通过桥接实时反馈到Blender的视图里虽然这需要把Blender当作外部渲染/显示端但它确实能让你在一个双屏工作流里无缝交替左边Blender调整模型右边ArmorPaint画贴图。这种协同设计不是巧合。因为ArmorPaint最初就是作为Armory3D引擎的贴图编辑器来开发的而Armory3D本身深度嵌套于Blender环境所以它天生就理解Blender的坐标空间、材质接口和网格数据。哪怕你只用它做静态模型贴图不用Armory做游戏这套配合依然很顺手。唯一要注意的坑是版本对齐Blender和ArmorPaint的桥接插件更新节奏不一致时偶尔会出现无法连接的问题我会在最后的排查记录里给出我的处理方案。3. 核心功能详解通道、烘焙、PTex和AI辅助一个都不少3.1 PBR通道绘制从Albedo到发光通道的一站式控制做材质贴图绕不开PBR这套物理基础渲染规则。ArmorPaint把一套标准的PBR通道整合到了“纹理绘制组”中你可以简单地把它理解为一次从颜色到凹凸的全面控制权。Albedo基础色就是物体本身的颜色图不包含光影信息。我在画Albedo时习惯先铺一个大色块再叠加细节颜色避免直接在高光区域里画阴影这会让后续渲染显得脏。Roughness粗糙度控制表面反射的模糊程度0代表镜面1代表全粗糙。这里推荐结合“环境光遮蔽遮罩色带渐变”来做能让金属表面和磨损区域自然过渡。Metalness金属度标记哪些区域像金属。注意这个参数不是用来控制“金属颜色”的它是0到1的黑白图非金属区域必须是接近0的黑色否则渲染出来会发黑发暗。Normal法线是凹凸细节的“虚拟几何”。ArmorPaint支持直接绘制Normal通道也可以从高度图转换配合一个稍微过量的数值调整可以增加细节。Occlusion/AO环境光遮蔽画缝隙和接触阴影最常用的通道我习惯用生成器而不是手画速度和质量都比手绘稳定。Emissive自发光用于发光面板、霓虹灯等效果一张图搞定。每个通道都可以独立开关和烘焙这意味着一套模型可以产出多套不同风格的效果而不用重复绘制。3.2 烘焙模块高模细节转低模贴图的正确姿势做次世代资产时常见做法是建一个高模细节丰富和一个低模用于游戏引擎然后通过烘焙把高模细节转到低模的法线贴图和AO贴图上。ArmorPaint内置的烘焙器支持这种流程你只需要在高模和低模之间指定源与目标设置好包裹参数和扩边距离它就能自动生成可用的法线、AO、曲率和ID贴图。烘焙是个经常出问题的环节。我自己的经验是先检查模型是否重面、法线是否统一朝外然后再设置扩边Cage距离这个值太大的话会吸附到高模其他部位的面片太小就会出现采样不足的黑斑。烘完第一件事是检查接缝处有没有明显的硬边撕裂有的话回到UV编辑器加一点镜像边缘填充比在软件里反复调参数要高效得多。3.3 PTex模式没有UV也能画贴图PTex这个功能我单独拎出来讲因为它是很多用户决定换用ArmorPaint的关键。PTex的核心思想是不对模型进行UV展开而是把模型的每个三角形都看作是独立的纹理区域直接在表面上画。这样一来完全免去了UV接缝和拉伸的问题特别适合有机模型、雕刻模型这类难以展UV的资产。用PTex模式时需要注意几点第一它的输出不是常规的2D贴图而是一套PTex格式的纹理文件如果目标渲染器不支持PTex比如大部分移动端引擎你需要在最后一步把它重新打包成普通的2D纹理这个过程会有些许质量损失第二PTex的内存占用比常规贴图高不少因为它对每个三角形都有一小块独立纹理空间模型面数越高占用越大第三在ArmorPaint里切换PTex和UV模式后图层结构不会自动迁移需要你手动重建。所以我的建议是能用UV的模型尽量用UV只有那些展UV非常痛苦的模型才动用PTex。3.4 AI辅助生成从一张图片一键生成纹理近两个版本ArmorPaint加入了Stable Diffusion集成也就是AI辅助出纹理。它的工作方式是调用本地或远程的SD模型把你当前需要画的区域作为提示词和初始图像输入AI生成候选纹理后你可以直接把它贴到选定区域省去了大段手绘时间。这个功能目前更适合前期概念验证和粗糙原型阶段生成的纹理在细节和风格上还不够统一也不适合直接放进正式项目。不过它对创作流程的推动力很大——你可以用AI快速生成七八个方向选定一个风格之后再手动细化和覆盖。我建议不把它当作最终素材生成器而是当作灵感和草稿生成器这样心态摆正了用起来反而顺手。4. 实操全流程从空场景到可导入引擎的贴图资产4.1 环境准备与界面快速上手首先去GitHub或官网下载对应平台的最新版目前官方提供Windows、macOS和Linux三个平台的预编译包。Windows版直接解压运行macOS需要允许“未知来源”的AppLinux需要确保系统里有较新的Vulkan/OpenGL驱动库。我实测下来Linux下的兼容性稍微麻烦一点如果启动后界面模糊或者崩溃多半是缺少库文件按官方文档把依赖装一遍就稳了。首次打开后的界面分成几个大区域中间是3D视口左上角是工具栏和笔刷属性右侧是图层面板最底部是材质预览和状态栏。进入一个新项目后第一步建议默认设置为“新建空场景”然后导入你的模型支持OBJ、FBX、glTF、PLY等主流格式。导入后第一件事不是急着画而是检查模型尺寸和比例——ArmorPaint是按真实世界的单位来呈现物理尺寸的如果模型单位不对后面烘焙AO和画Normal都会出现诡异的结果。4.2 一个完整绘制流程的步步拆解我从一个最典型的案例出发给一把中世纪铁剑做全套PBR贴图。流程如下。第一步导入高模和低模把低模作为“活动纹理目标”。第二步在运行烘焙前给低模创建好材质组默认会生成6个PBR通道节点。第三步切换到“工具”面板的“烘焙”页签源选高模目标选低模打开AO和Normals选项扩边距离Cage先设成0.01米试试如果出现大块黑斑就减小如果细节丢失就加大。烘焙完成后在视口里应该能看到法线预览。第四步回到图层面板新建图层组先刷一遍Albedo底色我用的是偏暗的铁灰这样高光区域不容易刺眼。第五步新建“锈迹”图层混合模式选Linear Light或者Multiply把填充器设置成Perlin噪声Grungy遮罩适当调节缩放和强度锈迹的基调就出来了。第六步再新建一个“磨损”图层遮罩用一个方向性的渐变加少量噪声刷在剑刃边缘和手柄摩擦位置让金属反光物区域露出底色。最后导出。导出格式现在建议直接用新的导出面板选择OpenGL的标准贴图它会把所有PBR通道分别导出为独立的PNG或TGA文件方便直接导入Blender、Unity或Unreal。导出前检查一个非常关键的参数——“填充边缘像素”这能减少接缝的渗色问题通常设成4到8像素即可。4.3 与Blender联动的Live Link设置如果你希望Blender和ArmorPaint实时联动我详细说一下配置过程。第一步在Blender里安装官方提供的Armory3D工具插件现在一般叫armory_tools或armorpaint_live_link它可以通过Blender的偏好设置-插件-从文件安装来加载。第二步重启Blender后在侧边栏找到Live Link面板填上ArmorPaint运行时的端口地址和密码一般默认是localhost:10113加一个随机生成的密码。第三步先在ArmorPaint里启动Live Link服务然后回到Blender点Connect。连接成功后你在Blender里旋转视图、切换物体、进入编辑模式选择面ArmorPaint都会镜像响应。这种体验最大的优势不是省去导入导出的耐心而是能让你时刻从全局视角观察贴图和模型的实际关系画画的时候不容易“画进去就出不来”。不过Live Link也有脾气它要求两端的场景数据结构高度一致如果你的模型有大量修改器未应用、多级细分未合并它大概率会报错或者不同步。我的习惯是联动前把Blender模型清理一遍应用修改器、删除无用材质槽、把变换位置/旋转/缩放打平这一套下来联动基本不会抽风。5. 问题排查与避坑建议我踩过的那些坑希望你别再踩5.1 启动黑屏和笔刷延迟的排查思路我在Windows虚拟机和一台老款核显笔记本上都遇到过黑屏问题几次排查下来总结出三条经验。第一先检查显卡驱动是否支持Vulkan在终端或命令行里运行vulkaninfoLinux或查看显卡驱动版本Windows不支持的驱动确实会让ArmorPaint绘制区域全黑。第二切换到OpenGL后端试一下ArmorPaint启动时会自动探测后端但你可以在启动参数里强制指定比如加上-d opengl标记。第三核显或双显卡机器右键设置高性能独立显卡运行能解决大部分笔刷延迟问题。笔刷延迟则要检查纹理分辨率是不是设置得太高尤其在使用4096或8192分辨率时普通显卡的显存会被贴图集吃满。我的建议是草稿阶段用1024或2048确认方向后再切到4096精修别一上来就拉满。5.2 贴图接缝和丢失的通用解法很多从工业软件比如3ds Max、Blender导入模型的人都会遇到“贴图丢失”或者“接缝处有条亮线”的情况。贴图丢失通常是因为模型的UV通道名不兼容ArmorPaint默认读取名为“UVMap”的通道如果你的模型UV通道叫“UVChannel_1”或者其他名字就需要在导入设置里手动指定UV通道。接缝亮线则是边缘采样导致的渗色处理方法是勾选导出面板的“边缘填充”选项并在纹理烘焙时尽量保持UV岛之间有足够的间距。如果你遇到“贴图是黑的但材质导出正常”那通常是法线方向反了。模型的面法线朝内会导致光照计算全部反向烘焙出来的AO和Normal通道全是死黑。这个问题的排查最快的方式是开视口叠加显示确认所有面的法线方向一致朝外遇到反向面片按F键在顶点/边/面编辑模式下翻转。5.3 和Substance Painter对比后的取舍建议很多朋友会纠结要不要从Substance Painter迁移到ArmorPaint。我的真实感受是两者定位不完全一样。Substance Painter胜在预设丰富、商业插件生态成熟、智能材质库庞大直接上手门槛很低ArmorPaint胜在开源免费、节点化材质更灵活、Blender协同好、PTex免UV绘制深度可定制性更强。如果你的预算宽裕、项目周期紧张、团队已经全员SP那完全没有必要为了“开源”而换工具。但如果你是独立开发者、学生、或者在Blender生态里深耕ArmorPaint完全能覆盖你80%的贴图需求剩下20%用Blender的纹理烘焙和节点微调来补整套流程零成本。我自己从SP转过来之后最大的感受其实是“省心”——不用担心软件授权过期写自动化脚本也完全可控。5.4 一个实用技巧如何用噪声遮罩快速做旧化最后分享一个我平时用得最多的小技巧物理磨损做旧。一般新手会一笔一笔画磨损不仅慢而且不自然。我的做法是新建一个“磨损”图层填充器选Voronoi或者Grunge然后把遮罩模式设为Inverted遮罩强度调到0.3到0.5之间这样噪声就会生成大量细碎的不规则磨损痕迹并且自动漏出底下的金属底色。再叠加一个轻微的气流扰动遮罩让磨损边缘产生方向性的拖尾效果非常像真实使用过的机械零件。如果你觉得太规整可以给填充器加个种子随机数每次点击都重新生成完全不同的分布。6. 后续扩展与我的使用总结这个项目还在快速迭代中我记得官方Roadmap里还规划了更完整的自定义笔刷预设、更好的AI模型本地化支持以及更多引擎导出模板。如果你打算长期用它建议养成每隔几周去GitHub Releases页面逛逛的习惯新功能经常让人惊喜。我个人在实际操作中最深刻的体会是ArmorPaint不是Substance Painter的“低配版”而是一条完全不同的技术路线。它的核心价值不在于“免费替代”而在于把“节点化材质”和“实时GPU合成”这两个特性发扬得足够彻底。如果你愿意花上两三个小时把它的节点材质逻辑摸透后面无论是画角色皮肤、机械磨损还是场景地表效率都会比传统逐层涂刷高出一大截。最后再分享一个小经验批量生产贴图时尽量把同一场景里的多个物体共用一套贴图集Texture Atlas和同一套材质组这样在导出和引擎导入环节能省掉大量重复劳动。ArmorPaint对多物体共享图集的支持做得不错值得花时间配置一次。别怕界面冷清多试几次它的好用你会慢慢体会出来。