ArmorPaint,这名字在3D美术圈里这几年出现的频率越来越高。一款开源的实时纹理绘制软件,主打GPU加速、节点材质和光线追踪,直接对标Substance Painter。最初我注意到它,纯粹是因为在Blender里调了半天PBR材质,切到渲染器一看,效果和视口里完全是两回事,来回改参数改到怀疑人生。后来抱着试试看的心态把ArmorPaint装起来,第一感觉就是快,第二感觉是这软件的绘制逻辑和传统工具完全不一样,它是真的把GPU算力用到了极致。
这篇内容我不会去复述官方文档,而是把它当成一个项目来复盘:从它解决了什么痛点,到核心原理怎么理解,再到Blender和UE5工作流里怎么无缝衔接,最后把那些文档里不会写、实际用起来才会踩的坑一并交代清楚。如果你正在用Blender做资产,或者厌倦了SP那套动不动就崩、启动慢的流程,这篇文章应该能给你省下不少摸索时间。
1. 为什么我放弃了传统描画流程,改用ArmorPaint
先聊聊背景。传统流程下做一套完整的PBR贴图,基本逃不过这四步:展UV、调材质参数、烘焙AO和曲率图、再到软件里手绘细节。这一套下来,最折磨人的不是哪个环节特别难,而是环节之间的等待。展UV明明是个纯技术活,却要消耗大量精力去切割布线;烘焙时候GPU风扇狂转,结果烘出来接缝明显,又得回到UV编辑器里重新调。
1.1 传统流程的三大痛点:UV展开、烘焙等待、低模高模同步
第一个痛点是UV展开的"玄学"属性。模型稍微复杂点,自动展开必定到处是拉伸和接缝,手动展又得一块块摆。摆完之后你以为完事了?烘焙阶段还会告诉你,哪些地方精度不够、哪些地方夹角太大。整个过程充满了试错。
第二个痛点是烘焙的不可逆性。传统工具里,烘焙AO、曲率、厚度这些辅助贴图,参数一旦定下来,如果后面发现模型改了拓扑,前面所有工作全部作废,得重新再烘一遍。等的时间少则几分钟,多则半小时,盯着进度条发呆的感觉做过的人都知道。
第三个痛点是低模和高模的同步问题。在Substance类软件里,如果你导入的是低模,烘焙出来的法线细节总感觉不够锐利;如果你高模低模都导,场景文件瞬间变重,操作起来卡顿明显。这种割裂感在ArmorPaint里是完全不存在的,因为它绕开了"先烘好再画"的旧思路,把计算全部挪到了GPU实时阶段。
1.2 ArmorPaint的破局思路:实时GPU计算与所见即所得
ArmorPaint的核心逻辑可以归纳为一句话:纹理本身不是静态的位图,而是GPU随时可以重新计算的结果。你在画布上落下一笔,系统立刻根据当前视角的光照、场影光源和材质节点,把这一笔计算成最终效果。不是"你画完再等它刷新",而是"你画的时候、抬笔的瞬间、甚至鼠标悬停的时候,它都在实时更新"。
这套逻辑带来的好处是本质性的。第一,不再需要漫长的烘焙等待,因为AO和曲率这类辅助信息都是后台用光线追踪或屏幕空间算法实时算出来的。第二,不用担心UV接缝,因为ArmorPaint的默认笔刷可以基于三平面投影绘制,纹理不再严格绑定UV坐标。第三,材质迭代成本极低,你可以在一个图层上堆节点,调节混合模式,效果即时反馈,不需要切到渲染器里做二次确认。
我跟不少同行聊过,大家上手ArmorPaint之后普遍反映"回不去了"。不是说SP不专业,而是SP的工程化思路和ArmorPaint的实时思路,本质上就是两个时代的产物。
2. 绘制核心拆解:GPU实时管线、图层系统与三平面投影
ArmorPaint这么快的底气来自它底层的T3D引擎, 这是一套为GPU并行计算设计的图形框架。OpenGL、Vulkan、DirectX都在支持列表里,实际使用中Vulkan驱动下的性能最稳,实时反射的质感也最接近成品效果。
2.1 实时渲染管线:BVH加速结构与光线追踪如何参与绘制
插入一张图让你感受下它的计算逻辑:你在模型上画一笔,ArmorPaint不是把这笔的颜色直接堆上去,而是把这一笔当成一个射向模型的"光线源",通过加速结构(BVH)快速定位到你鼠标所指的那片三角形区域,再根据法线、曲率、AO等参数实时计算颜料应该以什么样的形态附着在表面上。
这里最关键的技术点是BVH加速。没有加速度结构的话,GPU需要遍历模型的所有三角面才能知道你画的是哪里,模型面数一高就卡死。ArmorPaint在加载模型时会预先生成好BVH树,把三角形的空间位置层次化组织起来,这样一来命中测试的复杂度从O(n)降到了O(log n),几千万面的模型也能流畅绘制。
如果显卡支持硬件光追,ArmorPaint还能把反射、软阴影、环境遮蔽这些全局光照效果实时跑到画面上。画金属材质的时候,你能直接看到环境在圆柱面上的反射,这是SP那种"画完再看渲染器"的流程给不了的即时反馈。
2.2 图层系统:为什么说它"Photoshop化了"
ArmorPaint的图层系统用起来和PS高度相似:支持多图层、支持不同的混合模式、支持图层蒙版,甚至还有智能图层(Smart Materials)——一种通过节点程序化生成的材质层。
每个图层本身就是一个完整的材质栈:基础色(Base Color)、粗糙度(Roughness)、金属度(Metallic)、法线(Normal)、高度(Height)五张通道图是默认配置,你可以单独启停每一层通道的绘制。这意味着你画一笔,这五种属性都是同步更新的,而不是像传统工具那样每种贴图单独画一次。
图层的混合模式也和PS看齐:正常、正片叠底、滤色、叠加、柔光……熟悉PS的人几乎零学习成本。但最出彩的是蒙版系统,ArmorPaint的蒙版可以基于曲率、环境遮蔽、高度甚至笔触压力自动生成。比如我想在模型凹陷处堆积污垢,新建一个黑色蒙版,用"曲率填充"的方式把凹陷区域标出来,再在蒙版上涂两笔白色,污垢就自然堆积在坑洼里了。
2.3 三平面投影:告别UV依赖的关键机制
很多初用ArmorPaint的人会问一个问题:是不是还得展UV?答案是:看需求。如果你只用视口实时笔刷,不需要多象限拆解的复杂贴图布局,那ArmorPaint默认的三平面投影就能解决大部分问题。
三平面投影的原理可以理解成:把模型沿X、Y、Z三个轴方向各投影一次,再根据每个像素的法线方向,把三个投影的结果按权重混合起来。这样不管某个面的法线朝哪,都能从最接近的那个轴向上取到纹理坐标。这套机制对硬表面模型几乎是福音,画洛氏硬度那种带棱角的零件,接缝问题基本消失。
但三平面投影不是银弹。它的投影实用场景有限,精细到像素级的细节(比如logo、标签)还是得靠UV坐标,所以ArmorPaint也保留了传统UV模式。实际使用中我一般这样分配:大面积的基础色、粗糙度变化、磨损痕迹用三平面投影,细节图案和品牌标识再切到UV模式下细抠。
3. 实战流程拆解:Blender建模到ArmorPaint贴图再进UE5渲染
聊完了原理,直接上实战。下面这套流程是我自己跑通的,每一步都验证过,你按顺序做一遍基本不会出问题。
3.1 模型准备与导出格式:FBX和GLB怎么选
ArmorPaint对模型格式的支持比较常规,FBX、GLB、OBJ、PLY都是常用选项。我的习惯是:静态资产用FBX,带动画或场景验证用GLB,OBJ只用来应急(因为它不保留法线和切线信息,导入后要重新计算)。
从Blender导出时,两个细节很容易把人坑了:第一,三角面。ArmorPaint虽然是实时引擎加速,但内部很多算法仍然假设三角形拓扑,导入后它会自动三角化一次。与其让它自作主张,不如在Blender里用修改器直接转化为三角网格再导出,这样纹理坐标和法线方向是符合预期的。第二,模型大小。ArmorPaint的单位默认是米,你在Blender里用的是cm的话,导入后模型会变成巨大的一个平面,灯光一打全白。建议在Blender里用缩放统一成米制再导出。
我来给出一套我用的导出配置,直接在Blender里操作即可:
文件 -> 导出 -> FBX 路径模式: 复制 嵌入纹理: 勾选 应用缩放: FBX所有单位 朝向: -Y向前 !关键一步:导出前Crtl+A应用全部变换应用变换这一步尤其重要,很多人导出后在ArmorPaint里发现贴图飞了,十有八九是因为模型自带旋转缩放信息没清干净。
3.2 笔刷与智能材质:填充层和蒙版的核心用法
软件装好,模型导入,接下来开始画。
新建材质后,默认会有一个"智能材质"图层,这个图层自带一套节点结构,包含基础色、粗糙度、金属度和法线的初始值。如果你想做的不是从零开始的纯手绘,而是带物理逻辑的程序化材质,我建议直接在"智能材质"上改造,而不是清空重画。
智能材质的核心在于填充层(Fill Layer)和蒙版(Mask)的组合。填充层的好处是,它不存储像素,而是实时计算颜色值。什么意思?就是你可以给填充层加一个Gabor噪声节点,让金属度只有0到0.3之间浮动,这样画出来的金属质感自带微表面变化,比手动画灰度图细腻得多。
蒙版的作用是控制填充层的作用范围。ArmorPaint的蒙版可以根据各种地图自动生成:选一个"环境遮蔽"蒙版类型,软件会实时计算AO贴图,亮处是暴露区域,暗处是凹陷区域。这时,我想让污垢进缝隙,直接拿蒙版把AO通道里暗部的数值选出来,填充层就自然只作用在这些缝隙里了。
这一套组合用熟了之后,你基本不会再回头去"画铁锈"这种纯美术操作——你只需要告诉软件"铁锈应该长在粗糙度的低值区域,并受曲率约束",这堆像素就自动生成出来了。
3.3 贴图导出与引擎接入:色彩空间和文件格式选择
画完之后,导出环节同样有讲究。ArmorPaint在导出菜单里会列出当前材质所有通道,比如基础色、法线、粗糙度、金属度、AO、高度等。你可以选择导出一整套,也可以只导出某张图。文件格式上,基础色建议用PNG或TIFF,法线和高度图建议用TIFF或者EXR,因为这两种格式支持16位浮点,记录的法线信息精度更高。
导出之后进入UE5或Blender,有几个容易踩的点必须提醒你。
色彩空间:Base Color图对应sRGB,法线和粗糙度图对应线性空间。在UE5里,你需要在纹理导入设置里把Base Color设为sRGB,其余全部设为线性。如果在ArmorPaint里导出的是同一套图,导到引擎后颜色不一致,先检查导入设置,别急着怀疑软件。
名称匹配:UE5里,如果你想用自动匹配规则导入贴图组,建议导出的文件名里带_BaseColor、_Roughness、_Normal这样明确的后缀,否则引擎认不出它们是一组,材质球就得手动一个个拖。
法线方向:ArmorPaint默认使用OpenGL坐标系(Y轴向上),UE5和Unity都是左手系(Z轴向上),所以法线贴图的绿色通道需要翻转。UE5的纹理导入面板里可以把"Flip Green Channel"勾上。如果懒得每次手动弄,在ArmorPaint导出时选DirectX模式,这样生成的贴图直接就能用,不用再做翻转。
4. 踩坑记录:回读与多象限UV的兼容性排查
实时绘制软件最怕的是什么?是你画了半天,回到引擎发现模型上的贴图全错位了。我在ArmorPaint上踩过几次坑,应该能让你的弯路少走一些。
4.1 低模回读为什么会出接缝
这是一个高频问题:在Blender里做一个高模,然后做出低模,展开UV,把低模导入ArmorPaint,绘制完导出,回到引擎贴上。结果镜头一拉近,低模的表面出现了一条明显的色差带。
排查下来,问题根源在于平滑组和法线方向。ArmorPaint自带的烘焙功能是基于模型面法线算曲率和AO的,如果低模的面法线方向和原始高模不一致,靠边的面就会被算成"空洞",从而产生一条暗边。
解决办法也很简单:在Blender里给低模添加一个"平滑着色",导出前确保法线被"应用"过(Ctrl+A),再进ArmorPaint烘焙曲率图。如果模型有硬边,记得在Blender里给硬边加边缘锐度修改器,否则烘焙出来的边缘会显得过曝。
4.2 多象限UV和UDIM的支持现状
游戏资产里用的UDIM多象限UV,ArmorPaint目前的支持比较有限。官方文档说1.4版本开始支持,但实际体验下来,对大规模UDIM的支持仍然不够稳定,偶尔会有贴图坐标错乱、笔刷漂移的问题。如果项目里涉及大量UDIM资产,我建议还是保守一点,把UV合并到一个象限里再进ArmorPaint。
不过单象限UV这块,ArmorPaint的表现是可以放心用的。它的UV编辑器里支持实时预览纹理布局,接缝情况一目了然。如果你的笔刷开启了"跨接缝绘制"模式,笔触过接缝时还能维持连续性,这对做角色模型非常有用——头部的UV接缝通常在后脑勺,不开这个模式你画一笔到接缝处就断开了,开了之后笔刷会智能过渡到另一块UV上。
4.3 崩溃与性能问题排查
ArmorPaint的稳定性,说实话比早期版本好了不少,但依然存在崩溃可能。最常见的崩溃场景是:模型面数过高时切换材质节点,或者开着实时反射调整光照参数。这种崩法通常是显存爆了。
我的排查经验是:先看任务管理器里的GPU显存占用,如果接近满值,把视口分辨率采样降低到1x,把阴影贴图调成512分辨率,再试试。还有一个容易忽略的点:驱动版本。ArmorPaint的实时光追依赖最新的GPU驱动,旧驱动会导致Vulkan设备丢失,表现为突然闪退。保持驱动更新,比升级软件版本更重要。
如果你做了大量笔刷操作后发现操作卡顿,问题多半是撤销栈太大了。ArmorPaint默认的撤销内存上限是512MB,画太久undo栈越积越大。如果你不需要长时间撤销,可以进设置把撤销内存调低到256MB,操作流畅度会有明显提升。
5. 进阶技巧:程序化纹理、烘焙辅助贴图与性能调优
基础流程走通之后,进阶的部分才是ArmorPaint真正拉开与普通绘图软件差距的地方。
5.1 程序化纹理:从节点到材质的全流程控制
ArmorPaint的节点系统,最牛的地方在于它不只是"调色",它能实时计算复杂的材质反馈。举个例子,你想做一个"青苔长在石缝里"的效果,用传统软件你需要画AO图、画曲率图、画出青苔色,再用蒙版叠好几次。ArmorPaint里的做法是:直接新建一个"青苔"填充层,给它的蒙版加一个"曲率"节点,把曲率的数值范围调到只选中凹陷区域——青苔就直接长在缝里了,而且转角处的青苔还会根据光照方向自动增减颜色深浅。
这套节点逻辑可以套用到几乎所有材质细节上:锈迹、灰尘、划痕、战损掉漆……本质上是把"画什么"变成了"定义规则"。
节点编辑器本身也不难,左边是输入节点(位置、法线、AO、曲率、高度等),中间是运算节点(噪声、渐变、混合、阈值),右边是输出通道。跟Blender的着色器编辑器逻辑一脉相承,会一点节点的人上手很快。
5.2 烘焙AO、曲率和厚度图:三分钟完成的辅助贴图
传统流程里要等半小时的AO、曲率和厚度图,在ArmorPaint里也是实时完成的。选中模型,进入"烘焙"面板,选择你要的贴图类型,点击"烘焙"。
实际体验下来,一张100万面的模型烘AO,在普通显卡上大约是10到15秒,用的是GPU光线追踪加速。烘完之后,它会自动把结果加到当前材质的对应通道中,你可以直接拿它当蒙版输入来用。
这里要强调一个技巧:ArmorPaint烘焙出来的曲率图分辨率默认是2048,如果你后续要画的贴图是4096,记得把烘焙分辨率调到一致,否则蒙版匹配时分辨率不一致,细节会流失。
厚度图用途也很广,可以在半透材质上做边缘光效果。想快速验证厚度图有没有烘对,可以把它接到自发光节点上,视口里立刻能看到由厚到薄的渐变,比干等一张黑白图直观得多。
5.3 性能调优:采样设置、渲染分辨率与显卡选择的权衡
最后聊点关系到日常使用体验的参数。
采样方式:ArmorPaint的视口默认使用1x采样,画面会有轻微噪点。如果你想看更干净的反射效果,可以在材质面板里把采样提高到4x或8x。但注意了,采样的提升对实时操作流畅度影响很大,建议画图时用1x,做最终检查时切到4x。这样兼顾了操作手感和预览质量。
渲染分辨率:这里的"渲染分辨率"不是贴图分辨率,而是视口内3D预览的画面清晰度。如果你的显卡显存不高,可以把手绘面板的渲染分辨率降到0.5x,保存时会自动切回1x画出细节,这个设置对低配电脑很友好。
显卡选择:理论上N卡和A卡都支持Vulkan,但实测N卡在光线追踪效果下的表现更稳定,尤其是RTX 30系以上的显卡。如果你用的是N年前的GPU,建议把光线追踪关掉,改为用屏幕空间反射凑合看效果,性能差距相当明显。
写到这里,ArmorPaint的核心要点基本都覆盖了。最后再说点个人的体会:工具只是手段,流程改造才是关键。我实际用ArmorPaint做项目后,最大的收获不是"换了款软件",而是重新理解了"材质"这个概念——材质不再是一组静态贴图,而是一套可以实时调节的规则。如果你正在传统流程里被等待和重复劳动消耗耐心,换到ArmorPaint试试,我相信你会回来感谢这句话的。