☰
ArmorPaint实战:GPU加速3D绘画与PBR贴图高效工作流
2026/10/1 6:20:37 网站建设 项目流程

第一次把 ArmorPaint 跑起来的时候,我盯着视口里实时刷出来的 AO 和环境遮蔽发呆了好一会儿。这种“直接在 3D 模型上边画边看效果”的体验,和传统 UV 展开到 Photoshop 里来回切换的工作流完全是两个时代的东西。作为一款开源 3D 绘画工具,ArmorPaint 这几年在独立游戏开发者和技术美术圈子里热度一直不低,GitHub 上常年保持着非常活跃的提交记录。它不仅能做 PBR 贴图绘制,还内置了节点材质系统、GPU 粒子模拟烘焙、AO/曲率/厚度等智能贴图生成,甚至支持把绘制的工程直接导出成 PSD 分层文件。今天这篇就从一个实际使用者的角度,把 ArmorPaint 的核心机制、完整实操流程和我在项目里踩过的坑一次性讲清楚,不管你是刚听说这个名字的新人,还是正在评估它能不能替代你现有贴图工具链的老手,应该都能从这里拿走一些东西。

1. 项目定位与核心设计思路

1.1 一个 GPU 驱动的 3D 绘画工具是什么概念

ArmorPaint 的定位非常明确:它不是一个传统的 2D 图像编辑器,而是一个以 GPU 实时渲染为核心的 3D 纹理绘画工具。传统流程里,美术需要在 Blender 或 Maya 里展开 UV,然后导出一张棋盘格贴图到 Photoshop,照着 UV 网格一点点画,画完再贴回去、刷新查看、发现问题再切回 PS,如此反复。ArmorPaint 把这个来回折腾的过程直接砍掉了,模型在视口里,画笔也在模型表面,画上去的每一笔都实时作用于 PBR 材质通道,金属度、粗糙度、高度、法线、自发光,全部可以单独或同时绘制。

这个思路的转变,底层其实是计算架构的变化。早期的 3D 绘画工具,比如 BodyPaint 3D,虽然也在 3D 视口里画,但大量的纹理数据处理还是放在 CPU 端,模型的精度一高、贴图分辨率一上去,操作就开始卡顿。ArmorPaint 选择了一套不同的路线:所有纹理数据以 GPU 纹理形式驻留在显存里,每一笔绘制都通过 shader 在 GPU 端完成读写。我在调它的源码时注意到一个很关键的细节——它把 CPU 端的纹理数据更新叫作 setData,而实际的贴图操作全部走 GPU 端的 updateData,每一帧渲染循环里基本都在跑 GPU 计算管线。这就意味着,只要你显卡不差,4K 分辨率的贴图刷起来也能保持在流畅的交互帧率。

这套设计还带来了一个副产品:程序化生成纹理变得异常高效。ArmorPaint 内置的节点系统可以直接以 GPU shader 的方式运行,你不需要像 Substance Painter 那样把每个滤镜都拿 CPU 算一遍,而是把节点树编译成计算着色器,跑起来自然快。

1.2 它能解决什么问题,适合谁用

ArmorPaint 解决的三个核心痛点:第一,UV 贴图与视口的割裂问题,它的实时 3D 笔刷让纹理绘制回归到“直接在物体表面作画”的自然直觉;第二,PBR 工作流的效率问题,内置的 AO、曲率、厚度、位置等烘焙工具,配合智能材质,绝大多数常见贴图需求在几分钟内就能出雏形;第三,软件成本问题,它完全开源免费,Windows、Linux、macOS 全平台都有包,软件体积只有几十 MB,加载个项目跟打开记事本一样快。

我自己的使用场景主要在独立游戏开发和技术美术验证上。做一个场景道具时,我需要快速给高低模烘焙 AO、在模型表面画一些磨损痕迹、或者验证某种材质的 PBR 表现,ArmorPaint 完全可以胜任。如果是大厂里那种需要多人协作、几十个图层嵌套、还要和 Substance Painter 模板库做资产同步的工业化流程,那 ArmorPaint 的生态还比较单薄,不一定适合直接替换。但如果你是个人开发者、小型工作室的美术、或者经常做原型验证的技术美术,这个工具绝对值得花一个下午去熟悉。

2. 核心机制与原理拆解

2.1 节点材质系统:不是简化版 Substance,而是另一种思路

ArmorPaint 的材质系统是我认为它最值得讲清楚的部分。它采用的是类似 Blender Shader Node 的可视化节点连接方式,但要比 Blender 的节点系统轻量得多。节点树的执行完全在 GPU 上完成,每个节点都是一小段 shader 模块,节点树从输出端开始被编译成一个完整的 fragment shader,然后直接作用到当前绘制层上。

这带给用户的直接体验是:你在模型上画“铁锈”不需要依赖某个特定的笔刷纹理,而是可以通过程序化节点来实时生成。比如我在做坦克旧化时,用 “Cloud” 噪声节点叠加 “Color Ramp” 控制颜色范围,再接一个 “Mask” 节点控制分布区域,刷出来的旧化效果完全是程序化且永不重复的。这个思路和 Substance Painter 的智能材质很像,但 ArmorPaint 的节点更透明、每个节点都可以点开看实时结果,改起来也更直观。

更关键的是,这个节点系统并非只有美术能用。ArmorPaint 的节点是用模块化 C++ 写的,接口清晰,你可以从 GitHub 上拉源码,自己写一个自定义节点,编译进引擎。我在自己的项目里写过一个“污渍方向性偏移”节点,用来模拟雨水冲刷的定向痕迹,从写代码到在软件里看到效果,前后不到半天。对于想折腾工具链的技术美术来说,这个开放性比闭源商业软件的插件 SDK 要舒服太多。

2.2 物理粒子模拟与智能烘焙:GPU 算的不只是画笔

ArmorPaint 里有两类非常亮眼的功能:物理粒子模拟和智能纹理烘焙,这两个都依赖 GPU 计算。

先说说物理粒子模拟。它不是在视口里给你看一个流体模拟动画,而是用 GPU 粒子系统在模型表面计算液体的流动、积累与蒸发,并把结果直接烘焙成贴图。比如我做一个被雨淋过的石柱,先在模型上刷一层高光湿润效果,然后用粒子层模拟雨水沿着石柱凹槽向下流淌,流过的路径会自然加深 AO 和粗糙度变化。这个功能的计算过程不需要你搞懂流体力学,软件界面里直接有“粒子源”“流速”“蒸发率”几个参数,拉一拉就能看到效果。我个人实测下来,面数在三五万左右的模型上跑粒子模拟,基本能做到实时预览,不会有明显的等待感。

智能烘焙这边,AO、曲率、厚度、位置贴图都是内置的一键选项。AO 烘焙支持设置半径和采样数量,曲率可以单独输出凸面或凹面,厚度贴图可以用来做 SSS 效果或布料透光。烘焙过程同样是在 GPU 上跑的,我做了一个 4K 分辨率的高模烘焙,大概几十秒就出图了,速度明显比我之前用 CPU 烘焙要快得多。而且这些贴图生成后可以直接存进节点系统里参与运算,也能单独导出去给其他引擎用。

2.3 图层系统与通道打包策略

ArmorPaint 的图层系统和 Photoshop 类似,支持图层叠加、混合模式、图层组、蒙版。但和 2D 软件不同的是,它的每个图层绑定的是 3D 模型表面,你可以给图层加一个程序化蒙版,让这个图层只影响模型的某个局部区域。图层的混合模式包括正常、叠加、正片叠底、滤色、差值等常用模式,基本覆盖了 PBR 纹理调整的需求。

通道打包是我要特别提一下的设计。在做游戏引擎贴图时,为了节省内存和采样性能,我一般会把 Metallic、Roughness、AO 打包到一张贴图的 RGB 通道里。ArmorPaint 支持在导出纹理时自定义通道分配,你在软件里给金属层、粗糙度层、AO 层分别绘制,导出时可以把它们合并打包成一张 RGBA 贴图。这个操作在 Substance Painter 里是通过专门的导出配置实现的,ArmorPaint 把它做成了导出面板里的几个下拉菜单,对不熟悉这套流程的新手来说反而更友好。

图层数量方面,ArmorPaint 对图层数的限制主要取决于显存大小,因为每个图层本质上都是一组 GPU 纹理。我实测在 8GB 显存的显卡上,4K 分辨率下大概能稳定开十几个图层,再多就会有点吃紧。这个水平对于大部分个人项目够用了。

3. 实操流程与关键参数解析

3.1 安装、界面与资产库配置

ArmorPaint 的获取方式很简单,直接从官网或 GitHub Releases 下载对应系统的压缩包,解压就能跑。Windows 版下载下来是个不到 100MB 的文件夹,里面是主程序和 assets 目录,不需要安装器,也不写注册表。资产库默认在软件目录下的 assets 文件夹里,包含了一些基础 PBR 材质、alpha 笔刷、模型示例和 HDRI 环境贴图。如果想增加自己的素材,直接把贴图文件丢进 assets 目录下对应的子文件夹里,或者在软件里通过“资产库”面板导入,下一次启动就能在材质面板里看到。

第一次启动时,软件会提示选择图形后端。新版本默认走 Vulkan,如果你的电脑比较老不支持 Vulkan,可以切换成 OpenGL。我一般在台式机上用 Vulkan,在虚拟机或老笔记本上测 OpenGL,实际体验差异不大。进入主界面后,左侧是工具栏,中间是视口,右侧是图层/节点/属性面板。快捷键方面,最常用的是 S 键打开搜索面板,输入任何工具名称就能快速定位,比如输入“stroke”切换笔刷、输入“bake”打开烘焙面板,这个设计很类似 Blender 的 F3 搜索,效率极高。

资产路径还有一个需要注意的点:如果你从 Steam 版切换到了开源版(或者反过来),资产库路径可能不一致。虽然两边用的都是同一套底层引擎,但 Steam 版会把用户数据放到 Steam 的 userdata 目录,开源版则放在用户主目录下的 ArmorPaint 文件夹。我建议选定一个版本固定使用,省得资产路径混乱。

3.2 从 Blender 导入模型:UV 检查是重中之重

导入模型这一步,ArmorPaint 支持 OBJ、FBX、glTF、BLEND 等格式。很多人第一次用会把 Blender 里的模型直接导出成 FBX 拖进 ArmorPaint,结果发现贴图位置不对或者显示乱七八糟。这里我的实践经验是:从 Blender 导出前一定要先检查 UV。

具体步骤是:在 Blender 里打开 UV Editing 布局,选中模型,进入编辑模式,全选所有面,查看 UV 是否存在重叠、拉伸或超出 0-1 范围的情况。ArmorPaint 对 UV 重叠非常敏感,因为它的绘制是基于 UV 坐标映射的,重叠的 UV 会导致画笔在模型表面的投影模糊甚至倒置。如果你的模型是程序化生成或者用布尔运算做的,UV 大概率有问题,需要在 Blender 里重新展一遍。

导入 ArmorPaint 时,软件会弹出一个导入选项窗口,里面有“缩放”“旋转”“单位”等参数。如果你从 Blender 导出的模型是以米为单位的,而 ArmorPaint 里默认是厘米,模型会显得特别大。这个时候就需要在导入设置里手动修正缩放。我的习惯是:在 Blender 里就把模型缩放 Apply 到 1,然后在 ArmorPaint 导入时选择“自动适配视口”,让软件自动计算合适的显示比例。这样虽然不保证物理尺寸准确,但至少视口里看起来舒服,绘制也不受影响。

导入后第一步永远是检查法线。视口里如果出现黑色斑块或者贴图显示异常,先看看法线方向是不是乱了。在 ArmorPaint 里可以在右侧面板打开“法线可视化”叠加层,有问题的地方会显示得很清楚。法线问题有时候是导入时 flip 设置不对造成的,重新导入时勾选“翻转法线”就能解决。

3.3 核心绘制参数:分辨率、texel density 与笔刷设置

绘制开始前,有两个参数必须提前想清楚:纹理分辨率和 texel density(纹素密度)。纹理分辨率在右侧的 Texture Set 面板里设置,默认可能是 2048x2048,我一般做复杂的场景道具会用 4096x4096。这里要提醒一下,ArmorPaint 的分辨率设置是在创建纹理集时决定的,后期改起来会麻烦一些,如果项目需要,最好一开始就想清楚。

texel density 的概念是贴图上每个像素对应到模型表面上多大的物理区域。假设你有一个长宽 2 米的平面,给它套一张 2048x2048 的贴图,那么每一像素大约对应 1 毫米见方的表面区域。如果模型很大而贴图分辨率不够,笔刷画上去会显得像“投影仪”一样模糊。ArmorPaint 里没有特别直接显示 texel density 的数值面板,但我有个土办法:导入模型后先给模型刷一个棋盘格纹理,用视口缩放观察棋盘格在模型表面的大小,如果格子拉伸变形或者明显模糊,就说明 UV 分配不均或者分辨率不够。棋盘格纹理在资产库里就有,刷一个看几秒钟就能心里有数。

笔刷设置方面,ArmorPaint 的笔刷面板里有尺寸、流量、硬度、角度等常规参数。尺寸和流量的配合是关键:我一般先用大尺寸低流量铺底色,再用小尺寸高流量刻画细节,这样过渡会比较自然。笔刷的“硬度”参数控制边缘软硬程度,做磨损和做裂缝用的硬度值完全不同。还有一个我很常用的参数是“绘制值”,它决定当前笔刷到底往贴图上写什么值,比如往 Roughness 通道写 0.8 还是 0.2,这个配合通道单独绘制时特别有用。

3.4 节点绘制与智能材质实战:做一个带旧化的金属箱

这个实操案例是我常用来给朋友演示 ArmorPaint 工作流的,一个金属补给箱的旧化效果,全部在 ArmorPaint 里完成,耗时大约二十分钟。

第一步,导入一个基础金属箱模型,UV 已经在 Blender 里展好,创建 2048x2048 纹理集。第二步,在材质栈里选择“Metal”模板材质,这是内置的 PBR 金属材质,默认金属度 1.0、粗糙度 0.3。第三步,新建一个图层,命名为“Rust”,图层的输出连接到 Base Color 和 Roughness 通道。在这个图层上添加一个“Noise”节点,用“Color Ramp”把噪声的颜色映射成铁锈的橙色和深棕色,然后加一个“Mask”节点,用模型的 AO 贴图作为遮罩,让铁锈只出现在凹槽和边缘。这些节点在 S 键搜索面板里输入名字就能拖出来,连接方式跟 Blender 一样,输出端拖线到输入端口。

第四步,用笔刷在箱子的边角处手动刷一些磨损。新建一个“Wear”图层,连接 Roughness 通道,设置粗糙度 0.8,笔刷硬度调到 80%,尺寸改成 30 像素左右,沿着箱子边缘刮几下,金属剥落露出的粗糙底面就出来了。第五步,添加一个光源角度合适的 HDRI 环境,查看整体效果。这时候你会发现,ArmorPaint 视口里的实时渲染已经有比较接近最终引擎输出的 PBR 观感了,不需要像传统流程那样反复切回引擎看效果。

这个案例浓缩了 ArmorPaint 最核心的工作方式:图层 + 节点 + 笔刷。熟练之后,给一个新模型做一套 PBR 贴图,基本就是“导入模型,调几个节点,刷几笔,导出贴图”的节奏。

3.5 导出设置与 Blender 回读

绘制完成后,导出贴图是最后一步。File 菜单里的 Export Textures 面板,可以选择导出的纹理集、贴图通道、分辨率、格式和路径。格式方面,我一般用 PNG 导出颜色贴图和法线贴图,用 TIFF 或者 EXR 导出有浮点精度需要的贴图(比如高度图)。如果只是想继续在 Photoshop 里做后期调色,可以直接导出 PSD,ArmorPaint 会把当前所有图层生成 PSD 的图层组,到 PS 里还能继续编辑,这个功能我实测下来图层嵌套关系保留得相当规整。

分辨率选项里可以单独指定导出尺寸,我建议导出分辨率设置成纹理集实际分辨率的整数倍或者相同值,避免缩放带来的模糊。导出到本地后,回到 Blender 里给模型建一套 PBR 材质节点,连上 Base Color、Metallic、Roughness、Normal、AO 这五张贴图,切换渲染引擎到 Cycles 或 EEVEE,应该能直接看到和 ArmorPaint 视口里八九不离十的效果。

有一个我踩过坑的细节:ArmorPaint 导出的法线贴图如果是 OpenGL 格式,Blender 默认的 Normal Map 节点就是 OpenGL 约定,直接连就行。但如果你用的是 DirectX 约定,法线贴图的 Y 通道需要翻转,否则光照方向会反。这个不是 ArmorPaint 的问题,但很多人第一次对接时会疑惑“为什么导进去金属反光位置全反了”。

4. 常见问题与排查技巧实录

4.1 模型导入后看不见或者显示异常

导入后模型不显示,或者显示成一大块黑色,是最常见的问题。我总结下来主要就三种原因:模型法线相反、UV 坐标异常、或者导入缩放导致模型跑到视口外面了。法线问题打开法线可视化一看便知;UV 问题需要回 Blender 重新展;缩放问题最简单,在右侧属性面板里调整模型的变换数值就行。

还有一种情况是模型面数特别高,比如百万面级别,ArmorPaint 的视口画刷会明显变卡。这个我实测下来不是软件崩溃,而是 GPU 每一帧要处理的顶点数量实在太大。解决办法是导入前在 Blender 里做一下 Decimate 减面,把面数控制在十万以内,反正绘画用的模型不需要太高精度,细节全靠法线贴图和高度贴图撑。

4.2 笔刷绘制时像投影仪一样模糊

画笔在模型上画出来是模糊的一大片,完全不能表现细节,这基本就是 UV 分配问题。UV 被严重拉伸的区域,笔刷会被拉成一条线或者一片糊。除了重新展 UV,一个临时办法是把笔刷的“Projection”模式改成“三平面映射”,这个模式下笔刷会根据模型表面法线自动切换投影方向,能缓解部分拉伸问题。但注意三平面映射在接缝处会有明显的方向不连续,只适合做临时效果,不适合最终输出。

还有一个原因是贴图分辨率太低。比如一个 2 米宽的箱子,你只给了 512x512 的纹理集,即使用小笔刷画也画不出细节。工具里有个很实用的功能——“填充纹理”节点,在绘制前先用它填满一张分辨率足够的底色,然后查看模型表面是否有模糊感。如果连纯色填充都是糊的,那基本上可以断定是该换更高分辨率纹理集了。

4.3 节点连线后没有反应

节点连好线以后,视口里却没有任何变化。这个问题我在新手时期反复遇到过。核心原因是:ArmorPaint 的节点系统是作用在当前激活的图层上的,不是全局的。如果你在 1 号图层里连了一堆节点,但当前选中的是 2 号图层,视口里就不会看到任何变化。而且每个图层可以拥有独立的节点树,节点树之间互相隔离。

检查的第一件事就是看右侧图层列表里哪个图层高亮,高亮的才是当前图层。把节点树所在的图层选中,再查看效果。另外节点树的输出端点名称也要对得上,比如连到 Roughness 通道的节点输出,如果节点输出的是颜色而非数值,可能也会出现类型不匹配的情况,这时候看属性面板的信息栏会有报错提示,照着提示改就行。

4.4 烘焙速度慢和粒子效果不生效

烘焙速度慢一般来说是分辨率设置得太高,而且采样数设置得过大。AO 烘焙面板里的采样数默认可能是 64 或更高,如果你只需要快速预览效果,调到 16 就足够了,烘焙时间能差出好几倍。粒子效果不生效的问题,通常是粒子模拟功能需要在图层的属性里手动开启,而且粒子数据的接收端需要连接到材质节点树的对应输入节点上。这个功能没有 1.3 版本的“一键魔法”,需要自己连一遍节点才能跑通。

4.5 快捷键和个人偏好配置

最后分享几个我常用的快捷键,新手照着用能大幅提升效率:S 键打开搜索面板,随便搜什么工具都有;Ctrl+Shift+Z 是重做,Ctrl+Z 撤销;在视口里按住右键拖动是旋转视角;Shift+右键是拾取颜色,可以直接从模型表面采样颜色来接着画;Tab 键切换物体模式和画笔模式。我建议把笔刷的大小和流量快捷键自定义成鼠标侧键,因为绘制时频繁调整笔刷参数,如果每次都要去右侧面板拖滑块,手很容易酸。

在偏好设置里还能改成“视频编辑”风格的时间线界面,但我个人还是推荐默认界面。第一次使用的人可以先花十分钟把 S 键搜索面板里能搜到的东西都翻一遍,这个软件的很多功能入口都藏在搜索面板里,光看工具栏是发现不了的。

5. 一些个人使用体会

用 ArmorPaint 做了快一年的贴图工作流之后,我最大的感受是:它不一定比 Substance Painter 强大,但它在“轻量”和“快速验证”这两个维度上做到了极致。我经常要在一个小时内把十几个资源模型全部过一遍 PBR 流程,ArmorPaint 是我目前用过效率最高的工具。它不要求你提前配置一堆智能材质模板,不强制你跟随引擎的特定版本,更不需要申请任何许可证,解压即用。

最后分享一个我实际项目中一直用的小技巧:如果你要在 ArmorPaint 里画非常精致的细节,不要直接在最终的 4K 纹理集上画。先创建一个 1024 分辨率的临时纹理集做构图和底色,确定大方向之后再切回 4K 纹理集精修。因为 GPU 实时交互的帧率会受分辨率影响,在 1024 下操作丝滑很多。等构图满意了,4K 下的精修只是在局部加笔,卡顿感完全在可接受范围内。这个小技巧听着简单,但能让你在大纹理集项目中节省不少等待时间。你的下一个道具或场景资源,不妨试着交给 ArmorPaint 画一遍。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询