
ArmorPaint这个名字玩Blender超过半年的人多少会从某个教程里见过。它常和免费开源两个词放在一起被提起但真正打开官网点进去的人并不多。我在一次给游戏道具做贴图的活儿里试用了它才发现市面上确实缺一款这样的工具占用空间小、启动快、不需要登录订阅、能直接在3D模型表面画PBR贴图。这篇文章就从我的实际使用经历出发理清ArmorPaint和Blender生态的真实关系、核心工作机制以及一条从Blender模型到ArmorPaint成品贴图、再回接到Blender的完整流程。1. 先捋清ArmorPaint的身世它不来自Blender却和Blender有血缘关系1.1 脱胎于Blender游戏引擎这个说法到底该怎么理解不少介绍文章说ArmorPaint脱胎于Blender游戏引擎这句话第一次看会把人绕晕。Blender本身是DCC软件不是游戏引擎严格意义上这个说法并不严谨。真实的情况是ArmorPaint的作者是Lubos Lenco这位开发者同时也是Armory 3D引擎的作者。Armory引擎在很长时间里是以Blender插件形式存在的开源游戏引擎你可以在Blender里完成场景搭建、逻辑编辑、游戏导出Armory负责把Blender场景转换成可运行的实时应用。ArmorPaint就是从这套Armory引擎生态里孵化出来的独立应用。它和Armory共用底层技术栈——Haxe做应用逻辑Krom作为跨平台运行时图形封装在Iron引擎里。如果打开ArmorPaint的窗口结构你会发现它的面板风格、操作习惯都和Armory很接近这就是血缘关系的直观体现。所以脱胎于Blender游戏引擎这句话准确说应当是脱胎于Blender生态中的Armory开源游戏引擎。这个出身带来一个很实际的好处ArmorPaint的坐标系、单位、纹理空间和PBR工作流与Blender保持了高度一致。你在Blender里展好UV的模型导入ArmorPaint之后方向、缩放、材质命名一般都不用额外调整这对Blender用户来说非常友好。我第一次导入一个用Blender做的道具模型直接落在视口中央roll角和朝向完全正常省掉了大量导进来再转一顿的操作。1.2 为什么ArmorPaint值得你列入工具链选型先看一组硬指标安装包几十MB开源目前免费使用不需要登录账号没有云服务依赖。它支持导入OBJ、FBX、GLTF/GLB支持导出带Base Color、Normal、Roughness、Metallic、Height、AO等多通道的PBR贴图也可以按Unity、Unreal、Godot等预设直接导出。这些规格放在Substance Painter每年几千块的订阅费用旁边对小团队和个人开发者是很现实的优势。但它能留下来不是因为便宜而是因为核心体验足够能打。ArmorPaint的实时绘制延迟很低笔刷落在模型表面几乎零等待视口里就是PBR材质效果金属、粗糙度、法线都能实时反馈。这种反馈速度直接影响贴图质量和操作手感。如果你习惯在二维绘图软件里对着UV网格画贴图再用ArmorPaint画一次就会明白区别对着立体模型画、让程序帮你算好曲率与遮挡不是一个效率量级。当然它也不是万能的。后面会提到它的局限在哪儿以及哪些场景你仍然需要Substance Painter。2. 上手前必须理解的三个核心概念画布、图层、智能材质2.1 画布不是新建一张图片而是贴图通道集合用过PS的人第一次打开ArmorPaint会下意识找新建画布按钮。但ArmorPaint里的画布不是一个二维图像而是一整套PBR纹理通道集合。你新建项目时选分辨率比如2048x2048这个数值决定的是模型对应的一套贴图尺寸而不是一张图片的尺寸。在视图里你看到的是3D模型本身。当你在模型表面绘制时颜色会写入Base Color通道粗糙度变化写入Roughness通道高度变化写入Height通道。每个通道都是独立的、可以单独导出和调整的。这也解释了为什么ArmorPaint的图层系统如此重要——因为你不再是在一张图层上画画而是在多通道之间做组合。这个设计非常接近Substance Painter的思路。刚接触时容易把画颜色和画贴图混为一谈实际要建立的概念是每一次笔触都会同时或分别影响不同通道。比如你用一个高粗糙度的笔刷在金属表面刷出磨损区域笔刷本身除了画颜色还在同一位置把Roughness改高、Metallic改低。2.2 图层与蒙版非破坏性绘制的核心ArmorPaint的图层面板和PS类似在界面右侧支持添加多种类型图层。最常用的是这三种Paint Layer直接绘制层、Material Layer材质填充层、Fill Layer纯色或渐变填充层。此外还有遮罩层用于控制某层效果只出现在特定区域。我举一个最常见的组合场景先在Material Layer里设置一个金属材质——基础色灰白、Metallic拉满到1.0、Roughness设为0.3。这层会整体覆盖整个模型让所有表面呈现金属质感。然后加一个Fill Layer填充基础色给枪身一个深色底色。接着新建Paint Layer在上面用深灰色笔刷直接在模型表面画出局部磨损、刮痕这个操作只影响这一层。如果之后觉得磨损画得太重可以直接调整这一层的透明度或者加一个Mask遮住不需要的部分。整个过程不会破坏底下的材质层想改底色、改金属度随时回到对应图层调整参数就行。这种非破坏式工作流对贴图制作非常重要因为你永远不知道美术反馈会让你改哪一层。2.3 智能材质程序化细节是它的杀手锏ArmorPaint自带的智能材质库是我认为它最被低估的地方。所谓智能材质不是一张静态贴图而是用程序化算法实时生成的材质效果内部通常由参数控制比如频率、尺度、强度、随机种子。举个例子你可以往模型上拖一个旧化锈迹智能材质它会自动根据曲率和AO信息在凹陷处生成更集中的锈迹在边缘凸起处生成磨损。这个效果是程序计算出来的不是手工画的所以应用到不同模型上都能贴合表面形态。拖上去之后再搭配一个Paint Layer手动补充细节效率和真实感都会提升。但这里有一个使用前提掌握程序化材质的参数逻辑。刚开始用智能材质最容易出现的问题是一贴就完事导致模型表面布满统一尺度的噪声看起来非常脏、非常程序化。我的习惯是把智能材质当底稿拖上去之后立刻调整参数比如频率降低、强度减弱然后再用手绘层把关键部位的真实材质变化画出来。智能材质负责大面积底色变化手绘负责点睛。3. 用ArmorPaint给Blender模型重绘PBR材质的完整流程3.1 Blender侧准备UV检查比建模更重要在动手画贴图之前模型的UV状态几乎决定成败。ArmorPaint本身不做UV展开它只是把你的绘制结果映射回UV坐标最终导出贴图时也是按照UV分布输出。如果UV有问题后面每个环节都会出问题。我通常把模型导入Blender后先做三件事。第一检查UV是否完整且无重叠进入UV Editing工作区把所有UV Island隔开摆放确保没有互相交叠。第二确认UV边缘保留足够的padding贴图分辨率越高这个需求越强尤其是2048以上时UV shell之间、以及UV边界和画布边框之间至少留出4-8个像素的间距不然导出贴图后容易出现颜色溢出的接缝。第三给不同材质区域命名。ArmorPaint导入带多材质的模型时会根据材质名创建对应的材质ID节点这一步做清楚了后面分区域画材质会省很多事。做完这些导出模型。我习惯用OBJ格式因为兼容性最稳纹理坐标不容易出幺蛾子。导出时记得勾选应用修改器把细分、倒角这些Modifier先落地否则模型导入ArmorPaint还是低模就尴尬了。3.2 新建项目与导入模型打开ArmorPaint界面是一个标准的3D视口加右侧面板。第一步是New Project选择你想用的画布分辨率。我的建议是最终贴图需要多少分辨率这里就选多少。如果你不确定可以先上2048后面导出时还可以再放大或缩小采样。新建项目后按CtrlI导入模型或者从File菜单选择Import Model。选择刚才导出的OBJ文件模型就会出现在视口里。这时先别急着画旋转一下模型检查法线方向是否正确有没有面片发暗或显示异常。如果法线反了可以在导入选项里勾选Flip Normals或者在模型制作阶段就修正。导入完成后界面左下角会出现模型的材质ID列表每个ID对应一个材质球。你可以为每个ID独立分配材质节点。比如枪身是金属握把是橡胶就可以分别建两套材质节点组。3.3 层叠构建材质金属枪械的完整实操这里我拿一个科幻风格的枪械模型当例子演示整个材质搭建过程。第一步新建项目后在材质ID列表里选中Body这个ID添加一个Material Layer。把Base Color设为中灰色Metallic设为1.0Roughness设为0.35。这相当于给枪身铺了一层基础金属底子。第二步给握把区域单独处理。选中Grip材质ID添加一个新的Material LayerBase Color设为深绿色Metallic降到0.0Roughness拉到0.8做出橡胶握把的哑光质感。第三步回到Body层在上面新建一个Fill Layer填充稍深一点的颜色作为底色变化把图层混合模式设为正片叠底或者线性加深。这一步是让枪身某些区域看起来有深浅差异而不是一整块单调的灰。第四步新建Paint Layer笔刷大小调小一点选一个有纹理感的笔刷ArmorPaint内置了几种带噪点的笔刷在前端边缘、枪管转角这些地方画出磨损痕迹。注意笔刷的Flow不要开太高一点点叠加才容易控制深浅。第五步加一个Damage智能材质参数调低频率、提高对比度拖到枪身上。这时会在边缘和转角处生成细碎磨损整体效果一下子就立体了。全部步骤做完在视口里旋转模型看看金属高光、粗糙度变化、磨损细节有没有达到预期效果。ArmorPaint的实时PBR反馈在这一步帮了大忙哪一块太新、哪一块太旧立刻就能看到。3.4 导出PBR贴图通道组合、分辨率与命名贴图画完进入导出环节。File Export TexturesArmorPaint会打开一个面板让你选择想要导出的通道组合。默认情况下Base Color、Normal、Roughness、Metallic等通道都会列出来但要注意只有当前项目里实际用到的通道会被启用。如果你只加了颜色图层没有对法线做过任何修改Normal通道可能导出的是空贴图。这里有一个很容易踩的坑ArmorPaint的导出面板里通道组合是预设式的。如果你选一个PBR预设它会把ORMOcclusion-Roughness-Metallic这类打包通道一起导出而且命名规则是固定的。如果你习惯自己连节点导出前最好先检查一下预设里的通道命名免得导出一堆o_r_m.jpg回去还得自己拆通道。分辨率一般选2048或4096。导出时ArmorPaint会从当前项目缓存里重新采样生成纹理所以就算你的项目文件里存了8K的绘制数据导出为2048也不会显得太突兀。导出格式我通常选PNG无压缩、16位可选如果项目对体积有要求再用JPG转一道。导出完成后检查输出文件夹Base Color在颜色空间上是sRGBNormal和Roughness、Metallic都是非颜色数据线性数据这一点回Blender连节点时很关键。3.5 回接BlenderPrincipled BSDF节点配置回到Blender选中目标模型在Shading工作区新建一个Principled BSDF材质。把导出的Base Color贴图接入Base Color输入点颜色空间保持sRGB把Normal贴图接入Normal输入点注意要连一个Normal Map节点做转换颜色空间设为Non-ColorRoughness贴图接入RoughnessMetallic贴图接入Metallic这两个同样设为Non-Color。如果导出了Height或者AO通道Height可以接入置换节点但要配合Subdivision Modifier才看得出效果AO也可以作为乘法叠加一个Layer Weight节点让边缘接触处更暗、更立体。节点连完后按Z切到渲染预览用Eevee或Cycles都行。这时候你可以看到从ArmorPaint画的材质完整出现在Blender里。大部分情况下颜色、粗糙度、金属度会和ArmorPaint视口里看到的非常接近。如果发现整体偏暗或偏亮优先检查Base Color贴图的颜色空间是否设成了Non-Color这个问题我遇到过不止一次。4. 和Substance Painter、Blender内置绘制同台对比工具选型逻辑4.1 工具定位差异很多人纠结到底用ArmorPaint还是继续用Blender内置的Texture Paint或者干脆认准Substance Painter。三个工具定位差异其实非常明显。Blender内置的Texture Paint更像是模型环境下直接编辑UV贴图的辅助工具。它上手简单胜在不用离开Blender但它没有真正的图层系统没有多通道关联绘制没有智能材质笔刷功能也相对基础。适合快速给模型做一个简单的颜色贴图。Substance Painter是行业标准在笔刷、生成器、烘焙高模细节、大厂工作流兼容性上几乎是碾压级的存在。它的Smart Material库、Mask生成器、粒子笔刷这些功能ArmorPaint暂时比不了。但它的订阅价格和资源占用也摆在明面上。ArmorPaint的位置有意思它把Substance Painter的核心工作流——PBR通道、非破坏图层、智能材质、贴图烘焙——都实现了而且开源免费、体积极小、启动极快。对于一个独立开发者或者小团队来说它提供了一个相当完整的贴图绘制解决方案。维度ArmorPaintSubstance PainterBlender texture Paint基础价格免费订阅制免费图层系统完整非破坏图层完整非破坏图层无智能材质内置程序化库海量生成器库无实时PBR视口有有弱高模烘焙基础完整无运行占用低高取决于Blender生态扩展概括性行业标准格式Blender插件依赖4.2 哪些场景选它哪些场景别勉强如果你主要在Blender里做资产项目预算不多需要快速产出带PBR材质的模型ArmorPaint就是优选。它的学习成本不高一两天就能上手核心工作流从零到成品非常顺畅。如果你的项目需要处理超高精度高模到低模的烘焙细节、需要大量智能材质库支撑、需要和外包团队用同一套标准文件格式对接那Substance Painter目前还是更稳的选择。我个人的建议是不要用哪个工具更厉害来做决策而要想清楚你的贴图制作管线长什么样。管线是Blender建模 - 手绘贴图 - 快速迭代ArmorPaint几乎是为你量身定做的。管线是ZBrush高模 - 跨团队协作 - 输出大厂引擎资产那还是走Substance Painter的老路。5. 实战中反复踩到的坑与解决思路5.1 导入模型后被裁剪、坐标错乱新用户在ArmorPaint里导入模型时偶尔会遇到模型被视口裁剪、距离很远、或者整个模型翻转的情况。这类问题95%以上出在模型导出环节而不是ArmorPaint。最常见的两个原因第一Blender里模型应用了缩放但没有Apply Scale导致模型实际尺寸不对。导入ArmorPaint后模型可能放大或缩小了几十倍直接被视口近裁面切掉。解决办法是建模时CtrlA应用全部变换再导出。第二坐标轴不一致。ArmorPaint使用Z轴向上的坐标系Blender默认也是Z轴向上但如果你用的中间格式是由其他软件导出的就有翻转风险。这时候可以在导入选项里调单位缩放和轴向通常Build Unit设为0.01就能解决OBJ模型被放大的问题。5.2 导出贴图有接缝和拉伸贴图画完了导出后在UV接缝处看到明显色差或断裂这是最打击人的体验。根源基本在UV阶段。接缝色差通常来自两个地方。一个是UV Island之间间距不够采样时边缘像素溢出了另一个是模型在不同UV Island上的颜色本身就不连续画的时候没注意交界区域。第一个问题可以在Blender里重新整理UV留好padding第二个问题更隐蔽只能在绘制时多加注意比如用克隆笔刷或大半径笔刷在接缝两侧来回涂抹。还有一种拉伸情况是UV展得不够均匀比如圆柱体侧面的UV严重拉伸画上去一个圆形笔刷看上去变成椭圆形。这没什么取巧的办法回Blender重新展UV尽量让各区域纹素密度接近。ArmorPaint可以直接让你在模型表面画但它不会帮你修正UV底子不好结果自然好不了。5.3 高分辨率工程卡顿ArmorPaint的轻量级经常让人觉得它啥都能扛实际上4K甚至8K的工程在集成显卡或老显卡上还是会卡。它的实时绘制非常依赖GPU性能视口用得越多扇区缓存刷新越频繁顿挫感越强。我的做法是绘制阶段把视口分辨率调低。ArmorPaint界面上有一个视口分辨率选项降到50%甚至25%之后笔刷流畅度立刻恢复等需要看整体效果或导出时再恢复100%。另外控制图层数量不要把历史记录堆太多。每隔一段时间把不打算再改的图层合并且保留备份项目文件体积和显存占用都会下来。ArmorPaint底层会把纹理切成小块按需缓存这是在低显存机器上跑大纹理的关键设计但太小显存的机器比如2GB跑8K工程依然吃力。如果目标分辨率就是8K最好保证显存至少4GB否则还是退到4K更实际。5.4 颜色空间和导出通道的选择坑最后说一个看起来很小、实际影响很大的问题颜色空间。在ArmorPaint里所有你在视口里看到的都是经过颜色管理的显示结果。导出贴图时Base Color贴图是sRGB颜色数据其他通道Normal、Roughness、Metallic、AO、Height都应当按线性数据Non-Color处理。如果你在Blender节点里把Normal贴图的颜色空间设成了sRGB会出现法线方向被错误解码整个表面高光错乱的情况看起来就像材质碎了。还有导出通道的选择问题。ArmorPaint导出面板会根据项目图层内容判断哪些通道有内容。如果你希望导出某个通道但界面里是灰的通常是因为该通道没有实际数据。在这种情况下可以在导出设置里强行启用该通道但导出的会是一张默认的中性色贴图比如法线是纯蓝粗糙度是中间灰。这种伪数据贴图接回Blender虽然不会报错但实际效果没有意义不如在ArmorPaint里新建一个图层用对应通道的笔刷把必要信息补上再导出。这里顺带分享一个习惯每次导出后我都会在Blender里连好节点后做一次校验渲染用一个简单的球光和HDRI环境光检查Base Color、法线、粗糙度三个通道单独开关时的画面变化。如果关掉某个通道画面完全没有区别说明这个通道在ArmorPaint里就没画上去或者导出时丢了。这一步虽然费几分钟但能避免带着坏材质的资产直接进入渲染或游戏环境后头再返工才是真的耽误时间。如果你也打算把ArmorPaint纳入自己的工具链我建议先拿一个小道具模型走一遍完整流程建模、展UV、导入ArmorPaint、铺基础材质、手绘细节、导出、回连Blender。这一套下来你就知道它适合你哪一类活也清楚哪些环节还需要回到Blender补齐。工具再多最后还是要看它能不能跟你的实际管线合拍。