说实话,我最早听说 ArmorPaint 的时候,并没有太当回事。当时手头做风格化场景,贴图流程一直用的是 Substance Painter,虽然功能全,可每次启动、加载、烘焙,总觉得在那台不算老的笔记本上有点“拖油瓶”的意思。后来朋友甩了个链接过来说“试试这个”,我点开一看,免费、开源、还能跑在平板上,第一反应是:这玩意儿不会是玩具吧?
试用了一周之后,我得收回这个偏见。ArmorPaint 不但不是玩具,它身上某些设计思路甚至比传统三维绘制软件更符合“实时创作”的天性。这篇就聊聊我这一周里实际摸出来的门道、踩过的坑,以及它到底适合什么样的人。
1. 为什么一个绘制贴图的软件,要先聊它是从哪来的
1.1 它跟游戏引擎的血缘关系
ArmorPaint 最早可以追溯到 Armory3D 引擎项目。当时开发者在做游戏资产的时候发现,传统流程里“在建模软件里导 UV、到绘制软件里刷贴图、再回到引擎里看效果”这件事,来回切换的效率实在太低了。于是他们把引擎里那套实时渲染能力抽出来,单独打磨成一个纹理绘制工具。所以 ArmorPaint 骨子里不是一个“看静态贴图结果”的软件,而是一个“贴图刷下去,立刻看到光照反馈”的软件。
这一点非常重要,因为它解释了 ArmorPaint 为什么用起来感觉那么“轻”。它不是建模工具,不做雕刻,不搞动画,所有核心功能都集中在“给模型上纹理”这一件事上。启动的时候不会加载一堆你用不上的模块,项目文件也是围绕贴图、材质、图层来组织的。
1.2 技术底座:Haxe、Krom 与跨平台渲染
还有一个让我挺意外的点:这软件的运行运行时不是传统的 C++ 桌面应用框架,而是基于 Haxe 语言编译,配合一个叫 Krom 的运行时环境。可能听到这里你已经有点晕了,我换个说法。这就好比做菜,大部分同类软件用的是“全套专业厨房设备”,ArmorPaint 用的是一套“便携高效厨具”,灶台火力甚至更集中。它底层可以跑在 Vulkan、OpenGL、DirectX 这些图形 API 上,所以才能在 Windows、macOS、Linux,甚至部分移动设备上保持比较统一的体验。
普通用户不用关心 Haxe 还是 C++,但你能直接感知到两个结果:启动速度非常快,从我双击图标到进入项目窗口,基本就是眨几下眼的时间;内存占用也相当矜持,我在 8GB 内存的旧笔记本上同时开着浏览器和 ArmorPaint,没有出现过那种系统卡到鼠标都挪不动的情况。对于贴图绘制这种需要不停旋转视角、切换画笔、调节图层的交互场景,这种流畅度带来的体验提升是实打实的。
1.3 它不是给谁都能用的万能药
说了这么多优点,也得给它的适用人群画画像。如果你属于下面这一类人,ArmorPaint 很可能会让你顺心顺手:
- 独立游戏开发者,需要快速给低模或风格化资产上贴图,又不想被大软件的成本和复杂流程绊住;
- 资产外包或个人创作者,主要做 PBR 写实/半写实道具,习惯用贴图集导出到引擎或渲染器;
- 用 Blender、Godot、Unity 这类生态且不想在多个付费软件之间反复横跳的玩家。
但反过来,如果你在一家成熟的厂商美术管线里,需要多人协作、超大型工程、严格的材质 LOD 规则,或者必须依赖某套工业级插件生态,那 ArmorPaint 现阶段可能还不够格,Substance Painter 那套庞大体系依然是更稳妥的选择。认清这一点,再去看它,心态就会平和很多。
2. 核心工作流:从空白文件到输出一套 PBR 贴图
2.1 创建项目:先建“画布”,再丢模型
ArmorPaint 的操作逻辑跟传统 DCC 软件不太一样。它不是“打开软件→随便建个场景→导入模型”这种松散结构,而是以项目为单位的。打开软件后,第一件事是新建项目,系统会让你选择要把项目文件保存成 .arm 格式,并设定贴图尺寸(比如 1024、2048、4096)、图层数量预期等等。
把这个项目入口理解成一个“画布箱”会更直观:所有后续的贴图、图层、材质节点都会被塞进这个箱子里,不会散落到外部路径。如果你要同时维护多个资产,就建多个项目文件。我个人习惯是每个道具或角色单独一个 .arm 文件,避免图层混合时互相干扰。
导入模型的格式方面,OBJ、FBX、glTF 这些常见格式都能用。导入时软件会自动把模型拆成适合绘制的最小单元,如果模型本身没有 UV,ArmorPaint 里面也内置了便捷的 UV 重组工具,会基于模型的面角度切分展开,虽然不一定能跟建模软件里手调的专业拆 UV 完全媲美,但对大多数硬表面物件来说已经够用了。导入之后,你可以在项目面板里看到纹理集列表,每个纹理集对应一套可绘制的贴图。
2.2 图层三板斧:填充层、画笔层、蒙版层
如果拿 Photoshop 来类比,ArmorPaint 的图层系统几乎是一脉相承的,但它做的又是三维贴图版本的“图层”——你每画一笔,实际上是画在模型表面的贴图坐标上。
- 填充层:相当于给整个模型铺一层底色,常用于快速定义基础色或粗糙度、金属度的初始值。比如做一个锈蚀铁桶,先填充一层深灰,后面再往上叠橙锈和磨损,就比在一张完全空白纹理上盲画要舒服得多。
- 画笔层:这是真正逐笔绘制的地方。你可以在这层选择不同的笔刷类型,比如标准、克隆、模糊、加深减淡等,配合笔刷大小、流量、硬度、颗粒纹理,直接在模型表面画出锈迹、划痕、污渍或者手绘细节。
- 蒙版层:这是 ArmorPaint 里最灵活的概念之一。每个蒙版层可以控制后续操作影响的范围,例如通过模型的角度、高度、曲率或者物体 ID 生成蒙版,只有蒙版覆盖到的区域才允许绘制。你可以把它想成给画笔装了一扇“有形状的门”,这扇门是自动生成的,不是手动抠出来的。
这三层结构叠加在一起的顺序,和 Photoshop 一样可以从上到下控制覆盖关系。比如最下面是填充层,中间是画笔层画出的破损金属,最上面加一个带蒙版的混合层统一调整高光强度,整个材质的层次感就出来了。
2.3 投影方式:从视口刷到贴图的过程
ArmorPaint 最常用的一套绘制操作逻辑,是直接对着视口里的模型刷。软件会根据你当前相机视角,把笔刷投射到最靠近相机的模型表面。默认情况下是按视角投影,这意味着你刷侧面的时候,正面同一位置不会被动到,这一点对立体感的塑造非常重要。
另外它还提供了正投影、平面映射等不同投影模式,适合用在一些特殊场景,比如想在立方体的某个面上贴一张横幅文字,或者给圆柱体包裹一圈循环花纹。我在做一组低多边形建筑时,就靠着平面映射给立面刷了整面窗户贴图,效率比在平面软件里手绘再贴回模型高得多。
2.4 烘焙与导出:把图层成果整理成贴图集
绘制完成后,下一步就是导出。ArmorPaint 会把当前图层的最终效果,按照你所在纹理集的目标格式(basecolor/albedo、roughness、metallic、normal、height、AO 等)输出成贴图文件。导出之前它会对整个节点材质树做一次“扁平化”处理,把所有程序化节点和图层计算合并成最终像素。
这个环节里烘焙功能也很关键。如果你需要环境光遮蔽、曲率、厚度这些贴图,可以直接用它内置的烘焙工具基于当前模型几何体计算出来,不需要再导回外部软件去跑烘焙。烘焙前最好检查一下 UV 有没有重叠,否则某些通道会出现明显的接缝瑕疵。导出路径方面,可以自由选择输出到当前 .arm 项目同目录或者一个自定义文件夹,最终交付时候只要拿着这套贴图集去连进其他渲染软件即可。
3. 节点材质系统:它不是一个“抽屉式”材质编辑器
3.1 从贴图到语义的桥
很多绘制软件在材质层面是“固定模板”式的:给你几个滑块调颜色、调粗糙度、调金属度,看起来很方便,但一旦要表达稍微复杂一点的关系,就捉襟见肘。ArmorPaint 沿用了节点图的方式,把材质看成一个可编程的语义网络。
你可以在节点图里把程序化噪声连接到粗糙度通道,给金属表面加入微弱的粗糙度变化;把物体的高度贴图连接到凹凸节点,形成视觉上的立体感;再通过一个颜色渐变节点控制不同区域的金属色。整个过程不需要回到外部节点编辑器里反复预览,因为视口会实时反馈每一次连线结果。
一开始我不太适应这种“既要画贴图,又要连线”的模式,后来想明白一个道理:节点的本质是“规则”,图层的本质是“结果”。规则可以随时改,改了所有用到它的地方一起变;结果一旦画上去,就固定成像素了。所以我在项目里会把大面积材质规律用节点定义,把细节瑕疵用画笔层手工画出来,这样既有程序化效率,又保留了手绘的随机感。
3.2 程序化纹理:不用每处都靠手刷
写过材质节点的人都知道,程序化纹理最大的优势是“可无限平铺不露馅”。ArmorPaint 内置了不少程序化纹理节点,比如噪波、波浪、棋盘格、Gabor 噪声等,也可以把外部的图像作为资源拖进节点图里使用。
举一个我实测过的例子:做一把旧铁锤,锤头金属部分我先给了一个基础金属色,然后用噪波纹理作为粗糙度输入的遮罩,再叠加一层极淡的“涂抹污渍”图像纹理作为颜色混合。因为噪波每一个像素都不重复,最终锤头看起来就很有自然磨损的感觉,完全不需要手动一笔一笔去点。如果你手头有自己扫描采集的磨损贴图、锈迹照片,拖进去当 stamp(印章)用在绘制层,那细节丰富度更上一层楼。
3.3 蒙版与资源:把“范围”变成可编程变量
在 ArmorPaint 里,蒙版不只是一张灰度图,它本身也可以是节点树输出。比如你可以用物体的坐标范围来限定锈迹从哪里开始出现,用高度信息让顶部和底部的污渍浓度不同,用曲率信息让棱角处优先出现磨损。这套逻辑一旦理解,就能做出很多看似复杂其实简单粗暴的材质规则。
实际应用里,我给一个旧卡车模型做旧化,车身用填充层刷了原本的军绿色,然后在蒙版里拐进一个“曲率”节点,让所有边缘和折角处自动获得高光磨损范围。最后只需要在画笔层里沿着蒙版边缘补几笔深色泥迹,整个车的旧化感立刻立体起来,工作量比纯手绘少了至少一半。
4. 视口与光照:为什么我在绘制时很少“翻车”
4.1 实时渲染带来的安全感
传统三维绘制软件里,经常会出现一种尴尬:在软件里看着贴图效果挺好,导进游戏引擎或者渲染器里,颜色、高光、反射完全变了味。原因往往在于绘制视口的光照模型太简陋,没有给你一个接近“成品环境”的光照参考。
ArmorPaint 因为内核是基于实时渲染的,视口里默认就带有物理基础的光照模型。这意味着你刷金属的时候,能直接看到环境反射在表面的明暗变化;刷粗糙度的时候,能看到高光清晰度和反射模糊度的差别;刷颜色的时候,也不用担心在过暗或偏色的显示环境下做出错误判断。对我来说,这种“所见即所得”的视角反馈,大大降低了导出贴图后才发现材质不对的概率。
4.2 环境贴图和灯光预设:换个环境验证材质
除了默认的半球光,ArmorPaint 还提供了多种环境光照预设,可以在视图里切换。你可以分别用棚拍灯、户外日光、黄昏暖光来反复检查同一套材质。不同光照环境下,粗糙度和金属度的视觉敏感度是完全不同的,多切几个环境看看,能帮你发现很多隐藏问题。
我自己的一个习惯是:每次做完一个材质,至少切换到两个差异明显的环境贴图里各旋转一圈,如果高光、漫反射和反射关系都还能维持合理,那导出到其他渲染器里基本不会出大问题。这个小习惯帮我省了不少返工时间。
4.3 别把所有希望寄托在“最终渲染”上
这一步已经不怎么需要来回切换渲染器了,但我想提醒一句:ArmorPaint 的实时视口毕竟不是离线渲染器,像全局光照多次反弹、焦散这类高级光照效果,它不会模拟得那么完整。如果你的项目对写实度有极端苛刻的要求,还是要以最终渲染器的材质解读为准。好在它导出的贴图是这个行业通用的 PBR 贴图集,拿到 Blender Cycles、Unreal 或其它渲染器里再接一遍材质节点并不费劲。
5. 性能、平板与避坑记录:我的跨平台实测报告
5.1 在旧电脑上的表现
我手头测试环境的配置不算新:一块 7 代标压 i5 处理器、16GB 内存、一张中低端 GTX 显卡,系统是 Windows。ArmorPaint 在默认的 2K 贴图尺寸下,旋转视角、切换笔刷、图层实时混合这些操作都非常跟手。开启高分辨率视口渲染后帧率会降低一些,但依然可以接受。总体来说,它对硬件配置的门槛比 Substance Painter 低出一截,这给了许多老机器第二次生命。
如果你想获得更流畅的体验,可以试着在设置里降低阴影采样或者关掉抗锯齿,绘制过程其实并不需要那么细腻的抗锯齿,只有最终导出看贴图细节时才需要全分辨率。这个优化思路听着简单,实际能省下不少帧数。
5.2 在浏览器和平板上的体验
ArmorPaint 还有个更极致的形态:它支持导出成一个 HTML5 版本在浏览器里运行,也支持在部分安卓平板触摸环境下使用。我在平板上试了一把,配合触控笔,压力感应能正确映射到笔刷透明度,虽然没有桌面端那种鼠标键盘配合时的精准感,但做概念阶段的大色块铺色、粗糙度分区完全够用。你甚至可以在地铁上用平板给资产的 AO 层补几笔,回到电脑上打开同一个 .arm 文件继续。这个工作流对经常外出的美术来说非常实用。
需要注意一点:浏览器版本受限于内存和 WebGL 性能,贴图尺寸别贸然开到 4K,否则保存和刷新都可能变慢。平板端同样建议以 1K 到 2K 为主,否则触控笔延迟会明显加大。
5.3 我踩过的几个坑
版本间项目文件兼容性。ArmorPaint 更新频率高,旧版本的 .arm 项目在新版本里打开偶尔会出现材质节点丢失或者图层面板异常。解决办法没那么玄幻——重要项目多存一个备份,而且不要在一个项目还在产线的过程中频繁跨大版本更新软件。
非中文路径问题。项目文件和外部导入资源尽量放到不包含中文、特殊符号的路径下。字体、空格这类字符在一些底层解析模块里可能引发奇怪的报错,虽然现在改善了不少,但避开它们成本为零。
导出前检查 UV 接缝。我在做一台机甲手臂的时候,因为模型是从别的软件里现拆 UV 的,有一些隐藏的三角形重叠,结果烘焙出来的 AO 贴图在手臂内侧出现了一条明显的暗线。排查了半天才发现是 UV 重叠导致采样冲突。幸好 ArmorPaint 操作比较轻,重新拆一遍 UV 再导入,问题就消失了。最终经验就是:烘焙之前花十秒检查一下模型有没有重叠 UV,比事后修图省力得多。
6. 项目落地:我是怎么把它塞进现有流程的
6.1 与 Blender、引擎的协作模式
对大多数团队和个人来说,ArmorPaint 不是替代你的建模软件,而是当一个高效的贴图中转站。我现在最常用的流程是:Blender 里完成建模、拆 UV,导出 FBX 或 OBJ,丢进 ArmorPaint 做贴图和烘焙,最后再导出整套 PBR 贴图回到 Blender 或引擎调整最终材质。
这个流程里最舒服的一点是:ArmorPaint 的图层和节点信息都保留在 .arm 项目里。如果后面发现贴图某块需要改,我不需要重新进一遍绘制软件从零开始,而是直接打开原项目换几笔再导出。对比以前在 Substance Painter 里也要保存源项目的流程,ArmorPaint 的项目文件更小,打开更快,修改成本低很多。
6.2 一套贴图多套方案的实验优势
做风格化资产的时候,我特别享受 ArmorPaint 的图层灵活性。你想试“红蓝配色”还是“战损铜绿”?直接在填充层上面加一层改色填充层,调个色相就能切换,不用再另存一份几 G 的完整项目。我在给一组卡通集装箱做备选涂装时,就是靠这一个项目文件做了五六套颜色方案,最后导出各自需要的贴图集交付出去,速度非常夸张。
6.3 要不要花钱
ArmorPaint 是开源软件,核心功能完全免费;同时也有付费订阅选项,主要是给作者提供资金支持,额外会有一些优先体验、商业使用授权上的便利。如果你只是自己学习、做个人资产,免费版就已经能覆盖绝大多数功能。坦白讲,我自己在试用一周后选择了付费支持,因为这种开发模式让我看到了独立工具能持续打磨的可能,而且它确实帮我的流程省了时间,这笔钱花得值。
7. 一些真实想吐槽的地方
聊了这么多好话,也该说点不满足的地方。ArmorPaint 在个别细节上还带着明显的“小而美”气质,比如部分笔刷算法、笔刷动态预设数量,和 Substance Painter 丰富的材质库生态相比还是有点薄。如果你习惯了那种“下载几千个现成智能材质一键往上刷”的体验,ArmorPaint 会让你不太适应——它更鼓励你自己动手连节点、建材质,而不是给你一堆成品。
另外,软件在非常复杂的模型上做粒子绘制时,CPU 占用会明显飙升,如果你用的是老平台,建议把粒子数量调低,或者改用普通笔刷分多次绘制。粒子系统作为它特色功能之一,实用的前提是模型面数和刷子半径都要克制一点,否则会出现明显掉帧。
中文教程和社区资料相对少也是个现实问题。好在它的官方文档写得很干练,操作界面本身也不是很复杂,很多概念看图就能理解。我基本是靠着“一遍看文档、一遍上手试”的方式摸熟了大部分功能的。
8. 如果你正要开始用 ArmorPaint,这几条经验直接拿去
8.1 初始设置建议
新建项目的时候,先别急着把分辨率推到 4096。除非你已经确认资产要用超清特写,否则 2048 的性价比是最高的,刷起来流畅、导出来通用、后续想升分辨率再用烘焙放大。图层数量方面可以稍微多留一点,比如预设 4 到 6 层,后面加层容易,但图层关系复杂之后再重构反而是麻烦事。
8.2 材质起步顺序
给一个材质做初始贴图时,我建议的顺序是:先填充一层基础颜色,再填基础粗糙度和金属度;接着连一个基础法线贴图(如果没有现成的,可以用高度图转法线);最后才添加画笔层和蒙版层叠加细节。这个顺序能让你的每一步改变都具有“可塑基础”,不会画到一半发现底层颜色不对,结果已经在上面叠了十几笔,改又不好改,删又心疼。
8.3 一个省时间的快捷键清单
别看它界面简约,快捷键效率其实做得不错。常用的几个:快速切换画笔、橡皮擦、吸管,以及按比例调整笔刷大小,这些都能全程不碰鼠标选项面板。熟练了之后,左手快捷键、右手画笔,整个绘制节奏会快非常多。习惯之后回传统软件反而不适应,这大概就是 ArmorPaint 的“毒”性所在。
8.4 配合外部图像资源
自己在网络上收集的贴图素材,拖进 ArmorPaint 就能作为笔刷印章或者纹理资源使用。建议图片尽量挑分辨率大、光影中性、无明显透视变形的素材,这样在模型表面映射时才不会出现突兀的阴影继承。给材质增加破损、水渍、锈斑的时候,这类素材比纯程序化纹理更“真实”,因为是真实物理世界采集来的信息。
我这边实际做过一个小白鼠项目:把一个生锈铁板的照片拖进印章,沿着一把复古道具枪的枪管刷了一片铁锈区域,再配合颜色图层和蒙版把多余部位擦掉,最终效果像是在枪管上长了几年锈一样自然,完全没有手工涂抹那种“塑料贴图感”。
写到这里,ArmorPaint 在我工作流里的位置已经很清晰了:它不是什么“寒酸版 Substance Painter”,而是一把专门为实时绘制打磨出来的锋利小刀。对于大部分个人创作者、独立游戏团队、风格化资产需求来说,它足够好用,也足够便宜(甚至可以免费)。如果你正好被传统绘制软件的启动时间、内存占用或者收费模式劝退过,不妨给它一个周末的机会,亲自上手玩一玩,我猜你会跟一周前的我一样,多少带着点惊喜收回偏见。