
做材质贴图这行最烦的事有两件一是要在Blender里来回切换工具去烘焙AO、曲率这些辅助贴图二是想直接在模型表面画木头纹路、战损划痕却总觉得手上的流程不够顺手。ArmorPaint就是冲这两个痛点来的。它常被和Blender游戏引擎绑在一起讨论很多人搜“blender插件下载”时以为它是个Blender插件实际上它是一款开源独立的3D贴图绘制软件但它的出生背景和Blender确实脱不开关系——它是Armory开源游戏引擎的姊妹项目而Armory正是集成在Blender里的那套引擎工具。无论你是在做游戏资产、Blender建模案例里的道具还是在搞图形学方向的研究演示这工具都值得花点时间试一遍。这篇文章我会从它的出身聊起把核心概念、一次完整实操和几个常见坑都过一遍。1. 为什么说ArmorPaint和Blender游戏引擎是“一家人”1.1 ArmorPaint的真正出身Armory引擎的姊妹项目先把这个关系理清楚不然很多人看标题会误会。ArmorPaint不是从Blender主程序里拆出来的一块代码它是由LuxAeterna团队开发的独立软件底层用Haxe和BGFX图形库写成。BGFX是一套跨平台的渲染抽象层所以ArmorPaint在Windows、Linux、macOS上都能跑而且对OpenGL和Vulkan都支持得不错。真正把它和Blender联系起来的是Armory引擎。Armory是一个开源游戏引擎但不是独立安装的那种它以插件形式活在Blender里作者就是ArmorPaint的作者。当年Blender内置的Game Engine被移除之后Armory可以说是填补了一个空档让Blender用户仍然能在不离开DCC环境的情况下直接做实时交互项目。做游戏项目必然要给模型上材质贴图ArmorPaint最开始就是为Armory服务的材质绘制工具后来因为功能越来越完整作者干脆把它单独开源发布于是就有了我们今天看到的这个独立的贴图神器。所以“脱胎于Blender游戏引擎”这个说法严格讲不太准确但它和Blender游戏引擎生态的关系确实是实打实的。理解这一点很重要因为很多人在Blender里找不到ArmorPaint插件就开始怀疑自己下载错了。直接去官网下载独立安装包就行不需要在Blender内部安装。它和Blender的联动方式更多是通过文件交换和桥接插件完成。1.2 直接画在模型上解决了什么痛点传统流程里给低模画贴图常见的做法是在Blender里展好UV然后导出UV布局图到Photoshop再对着布局图一点点画。问题在于UV布局是平面展开的你在图上画一条划痕完全无法立刻感受到它在三维表面上的位置是否正确。尤其碰到一些复杂表面比如斧头侧面有个转折画完还要导回Blender看一眼错了再回来改来回折腾非常浪费时间。ArmorPaint的思路是把绘制环境直接放在3D视口里笔刷落下去的那一刻画面就实时显示在模型表面。它不要求你盯着UV方块而是像雕塑一样绕着模型转看到哪就画到哪。再加上它对图层、蒙版的支持非常成熟整体体验很像一个专门给3D模型准备的Photoshop。基础色、粗糙度、金属度、法线这些通道可以分图层画可以随时开关预览还能给某个图层加蒙版让效果只出现在特定区域。这种所见即所得的体验对做游戏资产的效率提升是肉眼可见的。我试过在一把中世纪长剑的模型上画血渍只需要新建一个图层用红色作为基础色再拿蒙版配合噪声纹理刷一刷几秒钟就能得到比PS里手工逐笔刷好得多的效果。更关键的是这个流程不会破坏原来的Base Color想回退就把那个图层关掉非常灵活。1.3 与Blender工作流配合的三种方式在我自己的项目里ArmorPaint和Blender大概有三种配合方式你可以按实际需求选。第一种是纯手动文件交换在Blender里导出OBJ或FBX模型导入ArmorPaint绘制完成后导出PBR贴图再回到Blender里接到Principled BSDF上。这种方式最通用适合一次性资产不依赖任何插件。第二种是用官方的ArmorPaint桥接插件。这个插件装在Blender里可以在两个软件之间一键发送模型也可以把ArmorPaint里绘制好的贴图自动刷新回Blender的材质节点上。如果你需要在两个软件之间反复调整这种半自动的方式能省掉大量导出导入的操作是我目前的主力方案。第三种是直接把它当成Armory引擎素材制作工具。Armory项目里的材质节点、贴图资源都能和ArmorPaint顺畅配合相当于一个专注于游戏资产贴图的闭环。如果你本来就打算用Armory做独立游戏这条路线值得深入研究。2. 上手前必须搞懂的核心概念与关键设置2.1 PBR材质贴图的那几张图到底分别管什么用过Blender的Principled BSDF都会看到Base Color、Metallic、Roughness、Normal这些输入接口但真正自己在ArmorPaint里逐张绘制时还是需要把每张图的职责搞清楚否则很容易画了半天导出后效果不对。我用一个表格把这几个核心通道列一下新手可以先把它当成速查表通道作用在Blender里的连接方式Base Color物体本身颜色不含光照和阴影信息连到Principled BSDF的Base ColorMetallic金属度0为绝缘体1为金属连到Metallic色彩空间设为Non-ColorRoughness粗糙度0为镜面1为完全粗糙连到Roughness色彩空间设为Non-ColorNormal法线细节让表面看起来有凹凸通过Normal Map节点转接后连到NormalAO环境光遮蔽接触面阴影可以连到粗糙度或单独作为混合蒙版Height高度图用于视差或置换连到Displacement或作为辅助Curvature曲率识别边缘凹陷和凸起一般不直接进材质常作为蒙版这里特别提醒一点Base Color以外的贴图进入Blender之后色彩空间一定要设为Non-Color否则会得到发灰、发蓝的错误效果。很多人贴图连上以后颜色不对八成就是这个细节没处理好。在ArmorPaint里新建纹理集时会让你选择PBR类型比如Metal/Roughness预设或者Specular/Glossiness预设。绝大多数游戏引擎都用Metal/Roughness所以默认选这个就行。软件会自动帮你生成对应通道的贴图文件你在每个通道上画画最终导出时再按通道导出。2.2 图层、蒙版和智能材质别把它当成普通画笔软件ArmorPaint的图层逻辑和Photoshop非常像但很多从Blender自带纹理绘制转过来的人会忽略这个部分结果就是只在一个图层上反复画改起来非常痛苦。它支持多图层的叠加和混合模式。比如你先用Fill Layer铺一层木头的底色再新建一个图层画木纹木纹图层的混合模式设为Multiply它就会自然叠加在底色上。如果需要把铁锈只限制在斧头刀口附近就可以给铁锈图层加一个蒙版蒙版上白色显示、黑色隐藏用笔刷在蒙版上涂黑色就能擦掉多余部分完全不影响铁锈图层本身的内容。这一点非常实用因为同一个模型上往往会有多种材质木头手柄、金属斧头、皮革缠绕、铆钉。每一种材质都可以单独建图层组组内再分颜色、斑点、划痕等图层后期的可调整余地极大。Layer之外ArmorPaint还有“智能材质”的概念。智能材质不是一张固定的贴图它配合程序化纹理和几何体属性自动生成效果。举个例子可以创建一个边缘磨损的智能材质让它读取Curvature曲率信息把模型凸起边缘和凹陷边缘识别出来然后只在边缘位置叠加暗色或亮色。这样刷一遍就能得到非常自然的战损效果比手工一点一点描边快得多。2.3 项目路径与纹理集管理最容易翻车的地方ArmorPaint的项目文件和贴图文件是分开存放的。创建一个项目时软件会生成一个项目文件夹里面除了工程文件还有一个textures目录所有纹理集对应的PNG、JPG、TGA等贴图文件都生成在这个目录里。你如果只复制工程文件忘记复制textures目录再打开工程就会看到模型上全是灰色默认材质之前画的贴图全部消失。这个坑我踩过一次。当时把一个项目从台式机拷贝到笔记本上压缩包只选了.aproj文件结果笔记本上打开后所有贴图丢失。后来在官方文档里看到说明才知道工程文件记录的是贴图的引用路径并不会把所有贴图都打包进一个文件里。正确做法是把整个项目文件夹一起打包。如果需要在不同机器之间同步直接把包含textures的整个目录拷走。纹理集的管理也值得注意。一个模型可以有多个纹理集比如角色模型的头部、身体、衣服可以分别用不同分辨率的纹理集这样既保证头部细节又不会让全身贴图整体变得过大。在ArmorPaint的右侧面板里可以切换当前纹理集然后针对每个纹理集分别设置分辨率。建议在项目开始前就想清楚哪些部分需要高分辨率避免画到一半再改纹理集导致重新烘焙。3. 完整实操用ArmorPaint绘制一把木质斧头3.1 准备阶段Blender里导出低模与UV这里我用一个斧头模型举例。模型分两个对象木头手柄和金属斧头。在Blender里先给两个对象都展好UV。斧头这种简单模型直接智能UV投射就够了但要注意UV岛之间留一点间距不要贴到0到1方块的边界上否则绘制时笔刷边缘可能会渗出到另一张UV岛。导出时我习惯选OBJ格式因为通用性最好几乎不会有编码或兼容问题。在导出面板里勾选Apply Modifiers如果你在三建模上做了细分修改器但没有应用可以先应用避免导出后模型结构和视口里看到的不一致。法线方面要保持模型的面朝向正确可以在Blender里开启Face Orientation检查一下蓝色在外面才是正朝向如果大面积红色就翻面后再导出。这里还有一个小选择要不要在导出前把模型Triangulate三角化ArmorPaint本身可以处理四边面但游戏引擎最终都会把资产三角化。我在实际项目里导出的OBJ通常保持四边面因为ArmorPaint显示没问题而且四边面在后续调整UV时更容易操作。如果你希望和引擎里的效果完全一致也可以在导出时勾选Triangulate Faces。3.2 新建项目导入模型、创建纹理集打开ArmorPaint主界面会有一个项目创建向导。选择目录、填好项目名后会进入一个确认界面可以在那里导入模型文件。点击导入按钮选择刚才从Blender导出的OBJ文件。如果模型包含多个对象ArmorPaint会按对象分别列出你可以给每个对象单独指定一个纹理集也可以多个对象共用一个纹理集。我在斧头这个例子里木头手柄单独一个纹理集金属斧头单独一个纹理集。原因是木头和金属的贴图内容差别很大木头需要画木纹、年轮、裂纹金属需要画锈迹、磨损、划痕。分开纹理集之后后续调整互相不干扰而且可以给金属部分用更高分辨率比如斧头刀口细节多给2048手柄细节少给1024。新建纹理集时模板选Metal/Roughness分辨率按显卡性能来。如果只有4GB显存两个纹理集都用2048问题不大但如果模型面数高、还要实时绘制建议先用1024跑通流程。分辨率越高笔刷反馈越吃显存新手容易一上来就建4K纹理集结果画笔一动就卡。3.3 绘制阶段底色、烘焙AO/曲率、笔刷和蒙版进入主绘制界面后第一步是先给木头手柄铺底色。在图层面板加一个Fill Layer颜色选一个不那么鲜艳的木头棕色比如#8B5A2B。为什么不用纯颜色因为后面还要叠加AO和木纹如果底色本身太亮最后整体会显得假留一点调整空间更稳妥。第二步是烘焙辅助贴图。在右侧面板找到Bake相关设置勾选AO环境光遮蔽和Curvature曲率点击烘焙。软件会基于当前模型几何体生成这两张图到对应通道里。烘焙过程通常几秒钟斧头这种低模几乎瞬间完成。烘焙完成后AO和Curvature会出现在图层里可以作为蒙版使用也可以单独导出。第三步就是画木纹。我先准备了一张无缝木纹灰度图在ArmorPaint的笔刷设置里载入它作为笔刷纹理。然后在新建的图层上沿木头手柄轴向来回涂抹笔刷的间距和流动调低一点让纹理有自然的断裂和变化。如果画出来的木纹方向不对可以旋转笔刷纹理的角度。金属斧头那边我用Base Color填深灰色后新建一个图层画锈迹。这个锈迹图层加了一个蒙版蒙版用Curvature曲率信息生成让锈迹自动集中在斧头刀口的边缘凹陷处。具体操作是给图层添加蒙版然后在蒙版属性里选择以Curvature填充调整对比度直到只有边缘区域保留白色。这一步做完锈迹不会大片覆盖整个金属面而是像自然使用后的局部氧化。还需要给斧头刀口画一些磨损高光。新建图层用浅灰色在刀口凸起边缘轻轻画几笔混合模式设为Overlay让边缘看起来更亮。如果想更精细可以在Layer上降低不透明度反复叠加比一次画到位自然得多。3.4 导出阶段输出PBR贴图回Blender连接绘制满意后进入导出面板。ArmorPaint支持按纹理集导出所有通道也可以单独导出某一通道。格式我习惯用PNG无压缩且带Alpha支持。如果你的项目最后要进游戏引擎也可以直接导出JPG但Base Color以外通道建议保持PNG避免压缩带来的色阶断层。导出后在Blender里新建两个材质斧头金属材质和木头手柄材质都用Principled BSDF。把对应贴图拖进Shader EditorBase Color连到Base Color输入Roughness贴图连到Roughness输入Metallic贴图连到Metallic输入Normal贴图则先接一个Normal Map节点再连接到Normal输入。最关键的步骤是把Roughness、Metallic、Normal、AO这些贴图的色彩空间改成Non-Color如果不改整个材质会偏灰或者出现奇怪的反射。如果使用桥接插件从ArmorPaint里点击发送贴图到Blender插件会自动帮你在材质节点里建立对应连接连色彩空间也会设置好。手动连接只适合偶尔一两个资产频繁做资产还是建议用插件。4. 常见问题与排查技巧实录4.1 压感没反应、笔刷延迟数位板用户最常遇到的问题是压感失效。ArmorPaint在Windows上使用数位板输入时依赖系统提供的Tablet API。如果装了多套数位板驱动或者触控板驱动冲突笔刷的压感就会丢失画出来的线条粗细完全一致。解决办法是先检查驱动然后到ArmorPaint的设置里切换输入API尝试Windows Ink模式或其他模式一般能恢复压感。笔刷延迟的问题通常不是显卡算不动而是纹理集分辨率过大或者视口渲染设置过高。我在一台6GB显存的笔记本上测试4K纹理集加上复杂的智能材质预览笔刷响应会明显变慢。降到2K后恢复到流畅状态。另外可以把视口的渲染精度调低绘制时看个大概效果最终效果以导出后的贴图为准。4.2 导入模型后贴图错乱、烘焙黑块如果导入OBJ后模型表面的贴图显示不规律大概率是UV没有规范展开。比如UV岛超出了0到1范围或者多个UV岛之间间距太近烘焙时会出现颜色穿透。可以在Blender里检查UV确保所有UV岛都落在0到1方块内岛之间至少留4到8像素的空隙。烘焙AO时出现大块黑色区域先检查模型是不是存在面交叉或自相交。斧头这种简单模型很少遇到但如果一些复杂机械模型的部件穿插放置AO计算时会产生错误的阴影。另一个常见原因是法线方向不一致。烘焙之前在Blender里统一法线方向然后删除历史重新导出。还有一个小参数容易忽略烘焙设置里的Texture Padding。如果贴图边缘像素不够导出后接缝处会出现黑边或白边。手动把这个值设成8像素可以明显减少接缝问题。游戏引擎里如果还是看到接缝可以再结合引擎的mipmap设置一起调整。4.3 在Blender中更新模型后颜色丢失实际工作中经常会发生模型在Blender里改了形状重新导出并导入ArmorPaint结果之前画的贴图全没了。原因一般是模型名字变了导致纹理集对应关系断开。ArmorPaint通过模型名称和纹理集名称来关联贴图如果你的对象在Blender里重命名再导回来时它会被当作新对象旧纹理集自然不会被应用。解决办法是保持模型命名一致不要随意改名字。另外不要用同名覆盖但结构完全不同的网格去替换已有模型最好通过桥接插件的更新模型功能。桥接插件会保留原有的纹理集映射只更新几何体数据不会破坏已经绘制的贴图。4.4 低显存笔记本如何流畅跑ArmorPaint如果你的电脑显存只有2到4GB有几个设置可以让ArmorPaint勉强顺滑。第一纹理集分辨率控制在1024以内一人物的脸部细节如果特别重要可以单独给脸部一个1024纹理集其他部分都用512。第二视口渲染精度调到50%或者更低绘制过程中细节稍有损失但可以保证画笔跟手。第三关掉不必要的智能材质实时预览等画完后再开启。智能材质需要实时计算曲率、噪声等程序纹理占用的计算资源比普通笔刷大得多。另外关闭3D视口的全屏AO实时显示也能提升流畅度。把视角旋转、缩放时的场景简化你会发现实际用起来并没有想象中那么卡。5. 最后补两句掏心窝的话5.1 我为什么在纹理绘制环节保留ArmorPaint我平时大部分模型和材质工作都留在Blender里完成但纹理绘制这一段我会专门打开ArmorPaint。原因不是Blender自带的Texture Paint不好用而是ArmorPaint针对“画贴图”这个动作做了太多优化图层蒙版、智能材质、烘焙辅助图、直接导出PBR通道整个流程非常顺。尤其是当你需要频繁尝试不同风格时图层系统带来的可回退性太重要了。5.2 两个容易忽略的实用小技巧第一个技巧正式绘制前先用1024分辨率跑一遍完整流程。很多人一上来就建4096纹理集画了半小时发现效果不对再调整时渲染越来越卡。先用低分辨率把颜色、蒙版、混合模式这些逻辑都调好最后再提升到2048重新导出一版效率高很多。第二个技巧定期查看textures目录里生成的贴图文件。ArmorPaint每画几笔就会自动保存贴图到磁盘这是它和普通绘画软件很不一样的地方。你可以直接打开这些文件检查导出前的颜色是否正确也可以观察每个图层的生成情况。我习惯画到一定阶段就打开贴图看一眼发现问题及时回到图层里修改避免在3D视口里反复转角度却看不出来色差。对我个人来说ArmorPaint已经成了Blender工作流里一个固定的环节。它的核心价值不在于单张贴图画得多精细而在于让“画贴图”这个动作本身变得高效、可调整、可复用。如果你也经常做材质和贴图不妨用一把简单的斧头模型把整个流程走一遍手感立刻就能建立起来。