
做3D游戏或次世代影视资产的人对“贴图绘制”这件事一定不陌生。传统流程里你要在Blender里拆好UV再导到Substance Painter或者Photoshop里手工画各种通道最后还要反复导入引擎看效果。这种“盲画”的体验遇到稍微复杂点的模型就很折磨人。我第一次接触ArmorPaint是在一个开源渲染器的Demo里看到的当时心里只有一个念头这玩意儿怎么这么像Substance Painter用下来之后我发现它不只是“像”它本身就是一个走实时PBR路线的GPU加速贴图绘制工具而且开源免费、体积小、启动快。所以我想认真聊一聊这个项目把它的核心原理、实际操作和踩坑经验都摊开来讲给想换工具链或者找免费替代方案的朋友一个参考。ArmorPaint适合的人群很清晰游戏美术、TA、独立开发者以及还在学习PBR贴图流程的学生。只要你的场景需要画基础色、粗糙度、金属度、法线、高度甚至AO这套东西它就能派上用场。它解决的问题也很直接不再需要“保存——切窗口——重新加载——看效果”这种反人类的循环而是在3D视图里一边画一边看最终效果所有通道实时反馈。这篇文章我会从项目定位和技术底座讲起然后把功能层级一一拆开最后给出一份完整的实操流程和避坑清单保证你照着走一遍就能上手。1. ArmorPaint是什么为什么它值得被认真对待1.1 项目定位不是传统PS而是实时PBR贴图绘制器很多人第一次打开ArmorPaint会习惯性地把它当成一个3D版Photoshop。这个类比不能说全错但它会严重误导你对这个工具的理解。ArmorPaint的核心定位是实时PBR贴图绘制器它关心的不是一张位图的颜色完美不完美而是“这一笔下去这个像素在物理光照下会呈现出什么样子”。它把模型当作唯一的画布你在3D视口里直接对着模型下笔绘制的结果会同时写入到albedo、roughness、metalness、normal、height、AO等不同通道中。这个流程叫做PBR材质绘制。传统思路里美术往往是先画一张漫反射贴图再手动去生成别的通道或者直接在引擎里把大调子调好再回来补细节。而ArmorPaint从设计之初就把这种多通道一体绘制作为核心所有通道在3D视口中以最终效果呈现画一笔光照会立刻响应这一笔的新颜色和新粗糙度。所以它适合的并非那种要精修一张UI贴图或者做包装设计的2D场景而是游戏、VR、影视预览这一类的三维资产制作任务。你不需要再对着视口截图反复切换你看到的就是你在引擎里最终会得到的东西。1.2 技术底座Haxe、Kha、Vulkan为什么选这条技术路线ArmorPaint的底层技术栈挺有意思。它采用Haxe语言编写底层图形API走的是Vulkan和OpenGL渲染框架是基于Kha构建的。这套组合在游戏开发圈子之外并不算大众但恰好是它能在“轻量实时”这两个方向上做到极致的原因。Haxe是一种可以跨平台编译的语言它能把同一套代码编译到C、C#、Java、JavaScript等不同目标平台上属于“一套代码到处编译”的路线。ArmorPaint这个项目能在Windows、Linux、macOS多个平台保持接近一致的行为表现正是得益于这个特性。很多人会担心用这么一个小众语言写的工具扩展性会不会很差。实际上ArmorPaint提供了基于JavaScript的插件机制这跟Haxe本身关系不大反而降低了很多美术和TA的上手门槛改改脚本就能定制自己的工作流。底层渲染选择Vulkan/OpenGL意味着它的绘制循环是塞进GPU里的。现代显存里存放着当前模型的纹理数据每一次笔刷落下实际上是一个shader在一个或几个纹理层上做实时混合计算。这就是为什么ArmorPaint在一张2K甚至4K贴图上绘制时能保持流畅的实时反馈。实时PBR意味着你看到的始终是光照参与计算后的画面不是灰度通道拼凑出来的临时图。再说说这套技术路线的收益启动速度极快软件体积只有几十MB没有庞大的依赖服务导入模型、进入绘制状态也就是几秒钟的事。这在实际工作中真的会改变使用习惯。我见过很多美术朋友宁可少封装几层材质也要用轻量工具去处理大量资产ArmorPaint就是干这个的。2. 核心功能与使用场景拆解2.1 实时PBR材质绘制多通道一次搞定ArmorPaint的绘制系统围绕PBR通道组织。常见的通道包括基础色Albedo/Base Color定义物体本身的颜色不含光照信息。粗糙度Roughness控制表面微表面的粗糙程度值越大表面越不反光。金属度Metalness区分金属和非金属是PBR流程中非常影响观感的通道。法线Normal记录表面细节的凹凸方向增加细节层次感。高度Height用于视差和置换能模拟更强的立体感。AO环境光遮蔽模拟物体遮挡产生的接触阴影为画面增加虚实对比。在ArmorPaint里你可以给同一个模型的不同部分分别指定不同的PBR材质。每个材质下面会自动生成对应的通道图层。绘制时你可以选择只画颜色也可以选择同时修改粗糙度和金属度并实时看到光影变化。这样做的好处很直观你再也不需要“猜”一张金属度贴图调成什么样才能在引擎里刚好是那个效果所见即所得。举个例子一个锈蚀金属板。我先用基础色画锈迹再用粗糙度通道刷上不均匀的高光区域最后在金属度通道把掉漆的地方擦成非金属。整个过程在3D视口里一步到位光和阴影跟着每一笔实时变化做完之后导出的几张贴图在引擎里拼接效果和你在ArmorPaint里看到的几乎完全一致。这非常节省时间。2.2 图层系统与程序化纹理像PS一样管理贴图ArmorPaint能让你把贴图绘制想象成在用Photoshop处理图层。你可以新建多个绘制图层设置图层的透明度、混合模式使用蒙版控制每个图层的显示范围。这意味着你不需要在单个通道上反复涂抹破坏掉原来的效果你可以为“污迹”“磨损”“颜色变化”分别创建图层后面不满意就可以单独调整甚至直接删掉一个图层重新画。图层和蒙版是实际工作中最常用的组合。比如我的模型上有一面墙我想在底部加泥土效果。可以新建一个图层填充泥土颜色然后给这个图层添加一个蒙版再使用笔刷在蒙版上限定泥土出现的区域。黑色蒙版隐藏内容白色蒙版显示内容灰色则半透明。这样画起来既干净又方便调整不会画花原来的底色。程序化纹理也是ArmorPaint的一个强项。它内置了大量可参数化的程序化纹理节点包括噪波、纹理、网格、布纹等。你可以在一个新图层上接入这些节点把它们当作智能材质来使用。这相当于用一个可以随时调整参数的“活滤镜”来生成真实细节。如果程序化纹理生成的图案不够个性化再叠加手绘笔刷去破坏效果会非常自然。2.3 材质节点图与智能材质把Blender节点习惯迁移过来如果你用过Blender的着色器节点编辑器那么ArmorPaint的节点图对你来说几乎不需要学习成本。它内置了一套以节点为基础的材质系统每个材质都由一组节点组成节点之间用连线决定输出的最终通道。你可以把纹理贴图、颜色、杂色、变形等节点连到输出端实时调节参数。节点图的核心价值在于可以把重复性高、批量化的材质规则模板化为“智能材质”。比如一个“生锈金属”智能材质内部可以包含金属度、粗糙度的调节参数。当你在同一个项目里给几十个道具使用时只需要修改智能材质的参数所有覆盖到的模型会同步更新。这在批量制作资产时非常节约时间。在实际操作中我的做法是先在节点图里搭好材质框架再将手动绘制的图层作为输入连接到框架中这样既能发挥程序化效率又能保留手绘的独特性。ArmorPaint的节点图虽然比Blender的着色器简单但胜在轻量核心功能完全够用又不会因为过于复杂而拖慢反馈速度。2.4 资源与工程管理UDIM、多对象与烘焙的配合ArmorPaint在资产管理上做了不少精巧设计。我特别看重的是它对多对象和UDIM的支持。UDIM是高端CG行业常用的UV展开方式它允许一个模型使用多张UDIM瓦片去承载不同区域的贴图。ArmorPaint支持UDIM这意味着影视方向使用高精度雕刻模型、需要超高纹理分辨率的朋友也可以在它里面完成贴图绘制。多对象管理指的是你一次可以导入多个模型分别赋予不同的材质然后统一处理并最终导出。这与Substance Painter的“纹理集”概念类似。比如一个战场上会有好几块不同状态的路面碎石你可以一次性导入给每块石头单独设置材质然后统一导出为一个纹理集在游戏引擎里就能获得一组协调匹配的贴图资源。配合烘焙流程ArmorPaint还能把高模细节烘焙到低模上。这对于做游戏的优化流程很关键。你可以把高模雕刻出的细节转换为法线、AO、高度贴图烘焙后回落到低模上再继续在低模上做后续修饰。这个功能一方面减少了外接烘焙软件的依赖另一方面也保证了绘制效果与最终运行时一致。3. 从零到一一个完整的ArmorPaint实操流程3.1 准备与导入模型要处理到什么程度才能进软件很多人导入模型后发现模型是黑的、笔刷画不上去八成问题出在准备阶段。ArmorPaint对模型的UV有硬性要求。UV重叠严重的模型在绘制贴图时会出现一片区域画不上另外一片区域被重复绘制。所以进入ArmorPaint之前我建议在DCC软件里先完成UV的展开和排布确保UV没有重叠、没有超出0-1的方形区域。这个步骤可以快速用Blender或者RizomUV来处理。模型的格式方面ArmorPaint支持OBJ、FBX、glTF等常用格式。FBX含有多重材质时要注意在导入前把材质整理好或者在DCC软件里先分好材质ID不然ArmorPaint可能会把多个物体合并成一个物体再赋予一套材质处理起来很麻烦。我的习惯是尽量使用glTF格式它在读写PBR材质参数时信息保留最完整。导入模型后你会在3D视图里看到模型并且左侧工具栏会显示默认材质。此时如果模型上是一个通用材质球建议先给它一个基础PBR材质避免后续画半天发现不是预期效果。在ArmorPaint的材质库中右键选择一个材质可以将其应用到模型上这一步是很多人容易忽略的。3.2 场景设置与基础绘制从空白到出效果一步步来。打开ArmorPaint后界面分为左右两个主要区域左边是工具栏包含笔刷、橡皮擦、吸管、填充、渐变、克隆等多种工具右边是图层面板和属性面板。顶部菜单栏提供文件、编辑、视图、帮助等基础功能。第一次进入不要被这个简洁的界面唬住它不比Blender复杂甚至比很多三维软件更直观。第一步导入你的模型并设置好默认材质。第二步切换透视/正交视图用左键旋转视角、中键平移、右键缩放快速检查模型UV是否正确。UV不正确的话你会看到笔刷在模型表面出现明显的拉伸条纹此时应回头调整UV。第三步在右侧图层面板中创建一个新绘制图层。新建的图层默认显示颜色你可以选择albedo通道直接绘制颜色。第四步选择笔刷工具在左上角属性框里调整大小、硬度、流量、不透明度。在模型上画几笔你会发现画面实时变化光照会立刻更新。这里要特别说一个技巧蒙版工具几乎可以替代橡皮擦。习惯用PS的朋友出了错第一反应是切换橡皮擦去擦拭这种做法在ArmorPaint里不太合理因为橡皮擦操作会直接破坏掉图层的像素内容。更推荐的做法是在图层上新建蒙版用黑白色在蒙版里控制图层的显隐。这样你想要调整的时候只需把蒙版里黑色区域变回白色就能恢复原来的内容不会造成破坏。蒙版配合笔刷的软边能画出非常自然的过渡效果。绘制时我常用快捷键来提升效率Tab键快速切换3D视图和节点编辑器F键聚焦当前模型快捷键复制画笔等可以逛一逛帮助菜单。熟练后整个绘制过程几乎不需要鼠标点来点去。在procedural图层上你可以添加程序化纹理来快速增强细节比如一个墙面可以在几分钟内获得自然的裂纹和污渍分布然后再用手绘笔刷突出细节。3.3 导出与导入Unity/Unreal颜色空间和格式别搞错绘制的最终目的是要拿到引擎里使用。ArmorPaint的导出模块提供了多种输出预设包含Unity和Unreal的特定选项。导出时必须注意两个维度一是选择哪些通道二是选择哪种输出格式和颜色空间。打开文件菜单下的导出你可以在弹出的面板里勾选需要导出的通道。常用的导出组合是Albedo、Roughness、Metalness、Normal、AO和Height。格式一般选PNG颜色信息使用sRGB法线和高光相关通道使用线性空间。如果你把这个流程搞反了到引擎里不管怎么调光照画面都会发灰或者对比度异常。导出的贴图尺寸应与你在工程里设置的纹理分辨率一致。ArmorPaint在项目属性中默认设置了纹理尺寸1K、2K、4K等这个值涉及显存使用和细节精度后期导出时无法简单放大。所以项目开始前就要想清楚最终要多大贴图我一般会按目标平台去设置。如果你不确定直接设2K流畅且细节够用。导出的文件命名也要养成好习惯。比如墙面材质我通常会导出为wall_albedo.png、wall_roughness.png、wall_metalness.png、wall_normal.png。这点很重要因为Unity和Unreal的自动识别材质球很多都依赖这些后缀。工程混乱往往不是工具的问题而是命名混乱导致的。4. 常见问题与排查技巧实录4.1 模型是黑色的、材质球不显示怎么办这个问题出现频率极高。如果你导入模型后视口里模型显示为黑色或者完全看不见第一反应不要慌。有几种可能性第一种是模型的法线方向反了可以在视图设置里开启背面剔除检查一下第二种是材质没有正确赋给模型右键在材质库中重新指定一个材质第三种是CPU驱动兼容性问题比如你的显卡没有启用Vulkan支持这时可以尝试改回OpenGL运行模式。更隐蔽的一个问题是UV在0-1范围外。很多DCC软件导出时UV坐标可能会超出标准方形区域而ArmorPaint只绘制0-1范围之内的UV区域。如果你在模型表面怎么画都显示不出来或者只有一小部分区域有绘制内容去检查UV是否超出边界准没错。4.2 绘制延迟高、笔刷卡顿怎么办ArmorPaint的实时绘制高度依赖GPU。如果绘制时出现延迟或卡顿第一步先在右侧属性面板降低视口分辨率。视口分辨率不等于最终导出分辨率它只影响你在画的时候的实时反馈精度一般来说降低到1280x720甚至更低反馈速度会非常明显提升。第二步检查纹理分辨率。项目和图层的纹理分辨率设置太高时显存压力会非常大。例如一个4K材质的模型配合4K视口渲染在高面数模型上很容易造成延迟。这里我建议项目分辨率按照目标平台合理设置不要盲目追求4K很多中低端显卡在4K贴图环境下会直接变成幻灯片。还有一点容易被忽略程序化节点的计算消耗。如果你在一个图层上连接了大量高分辨率程序化纹理并且参数频繁变动计算耗时会增加。解决方式是把程序化层“烘焙”成普通位图层恢复到轻量状态。4.3 烘焙AO和法线出现黑边或接缝怎么处理烘焙贴图出现接缝和黑边是最让新手头疼的问题。产生接缝的原因通常是UV边界处的采样像素不足或模型出现重叠UV。想要消除接缝我更建议在导出前做好两件事一是使用图像填充将UV边界向外扩张数个像素这在很多DCC软件里叫“网格填充”或“像素填充”可以极大程度减少接缝二是在烘焙设置里适当增加边缘羽化值。如果烘焙完成后接缝依然存在可以回到ArmorPaint中用一个柔和的修复笔刷在接缝处沿着边缘手动补几笔。这听起来笨但处理个别顽固接缝时往往最有效。遇到黑边问题多半是法线或AO通道贴图在边缘出现了纯黑或纯白跳跃可以调整烘焙采样偏移值或者用图像编辑器的曲线工具压暗边缘。我也建议你在烘焙前先确保模型本身没有焊接问题比如重复顶点、交错面。一个模型法线都是乱的烘焙出来自然到处黑。先修复高模和低模之间的匹配关系再谈烘焙参数。下面整理一份常见问题速查表方便大家快速定位问题现象可能原因排查/解决方案导入模型后显示为黑色法线反向、材质缺失、GPU驱动不兼容检查法线重新指定材质切换OpenGL模式笔刷画不上贴图图层被隐藏/锁定、蒙版为全黑、笔刷不透明度为零检查图层状态清除蒙版重置笔刷参数绘制出现拉伸UV重叠或超出边界回到DCC软件重新展开UV确保UV在0-1范围视口操作卡顿视口分辨率或纹理分辨率过高、显卡驱动过旧降低分辨率更新驱动减少程序化节点层级烘焙出现接缝/黑边UV边界采样不足、UV重叠、高模低模不匹配调整烘焙采样、扩张填充像素、修复模型匹配导出的法线贴图在引擎中发灰法线空间不一致确认Unity/Unreal预设是否选择正确检查法线贴图压缩设置导出后颜色与视口不一致颜色空间设置错误Albedo使用sRGB其他PBR通道使用线性空间导出4.4 一些让我提高效率的独家技巧分享几个我实际使用中总结出来的细节。第一程序化纹理不要直接堆在默认图层上而是单独建一个图层并且把它设置成“填充图层”。这样你可以随时关闭这个图层看整体效果对细微调色非常有用。第二ArmorPaint支持直接拖拽图片进入视口这可以用来做细节投影简直不要太方便。比如我想在枪械模型上做一个编号标签直接把做好的红色数字图拖到模型表面配合锚点调整位置和角度就行。第三点是关于版本更新的心态问题。ArmorPaint迭代速度很快新版本有时会改变快捷键和界面布局千万不要因为升级后界面变了就焦虑。去设置里看看有没有旧版UI选项或者直接上手习惯新布局通常新布局都是更合理的。第四多去浏览项目自带的材质库和官方社区作品里面有很多可复用的智能材质节点能帮你快速补充细节。我刚接触时很喜欢自己从头搭材质后来发现直接在库里找个接近的材质再修改效率至少翻倍。5. 我给新人的几条实用建议如果你正准备开始用ArmorPaint我个人建议从一个小场景开始而不是一上来就导入高精度的角色模型。先从一块石头、一把小道具练起把图层、蒙版、程序化纹理、导出这套流程跑通再去挑战多材质、多对象的大型资产。毕竟贴图绘制工具的上手逻辑和雕刻软件是有差异的小场景更容易让你理解通道、图层和节点之间的关系。还有一点我自己踩过坑之后才明白ArmorPaint虽然拥有实时PBR绘制能力但它依然有它的边界。极复杂的智能材质网络、超高分辨率的UV填充以及超大规模场景管理这些更多还是要靠Substance Painter或者Mari这种重型工具来解决。ArmorPaint最擅长的是在一个明确可控的资产范围内用轻量、高反馈的方式完成绘制。把这层定位找准了你就能在每个项目里选对工具避免跟软件较劲。我的个人习惯是在正式绘制之前把所有模型UV检查一遍把材质命名和纹理集分组预定义好这部分准备能帮我省下后面的数小时。这种经验听起来简单但很多新人往往跳过被各种贴图错位折磨到怀疑人生。ArmorPaint是一个值得投入时间研究的工具它背后代表着开源工具在PCG和美术流程里越来越强的存在感。希望这篇文章能帮你在项目里真正用起来少走一些我走过的弯路。