尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

开源PBR纹理绘制工具ArmorPaint全流程:从图层蒙版到多引擎导出

开源PBR纹理绘制工具ArmorPaint全流程:从图层蒙版到多引擎导出 接了一个外包需要在三天内给一把武器的模型出全套 PBR 贴图。我手边的商业纹理绘制软件授权刚好到期续费的价格看得我肉疼网上翻了一圈替代方案最后被 ArmorPaint 留住了。用完之后我认真想了想这个用游戏引擎技术做出来的开源纹理绘制工具确实是很多独立开发者和三维美术值得花一个下午去上手的工具。ArmorPaint 是啥简单说它是一个 GPU 加速的实时 PBR 纹理绘制软件界面和功能逻辑跟 Substance Painter 走的是同一条路线。你可以在里面给模型画基色、法线、粗糙度、金属度、AO 等全套贴图并且是用图层、蒙版、程序纹理和节点这套非破坏性流程去操作。它原本是商业软件2022 年底官方在 GitHub 上开源了现在对所有人免费开放代码用 GPLv3 授权。底层基于 Armory 引擎的 Krom 运行时用 Haxe 语言开发所以视口渲染速度相当快还内置了路径追踪预览。这篇文章我不打算写成操作手册式的流水账。我会按照自己从安装、上手、画材质、导出到踩坑的真实顺序把 ArmorPaint 这套工作流里最关键的逻辑讲清楚尤其是那些文档里不会写、但实际使用时一定会遇到的细节。适合谁看Blender 用户、独立游戏开发者、学生以及不想被订阅制套牢的三维美术。1. 为什么我在做了几年 3D 之后换了纹理绘制工具1.1 图层化的 PBR 绘制到底解决了什么本质问题很多刚接触三维的人会有一个误区贴图嘛就是在模型表面画颜色。真要这么简单就好了。现代 PBR 材质是把一张模型表面拆成至少四五张灰度图或彩色图来描述的——漫反射颜色、法线方向、粗糙程度、金属程度、环境遮蔽。这些信息互相独立又互相影响如果像 PS 画插画一样直接在画布上涂改一处细节就得同时改好几张图改到后面你自己都会绕晕。图层化工作流的本质是把结果改成了过程。你画的不再是一张最终的 PNG而是一层一层的操作记录最底下是填充底色上面叠一道噪声做磨损再往上加一个蒙版控制生锈范围。最终导出的所有通道贴图都是这堆图层实时计算出来的。这样做的好处是你想把一把枪的握把从蓝色改成红色不用重新画改填充层的颜色参数就完事了磨损、划痕、脏迹全部自动跟着变。ArmorPaint 完全是按这套逻辑设计的。它有填充层、绘制层和程序纹理层三种图层类型有图层蒙版有混合模式支持图层分组和实时预览。你在右边图层面板里看到的每一个开关、每一个滑块都会立刻反映在中央视口的 3D 模型上。1.2 从 Substance Painter 换到 ArmorPaint 的真实原因先说清楚Substance Painter 是行业标准软件生态丰富功能咋咋呼呼的也的确全。我没有要劝所有人都扔掉它的意思。但对于我这种外包接单、个人项目居多、有时候还要在没网的机器上干活的人来说ArmorPaint 有几个优势是实实在在的一是成本。开源免费没有月费年费订阅也没有登录验证。二是离线可用。不需要登录账号不需要连云启动之后就是一个纯粹的本地工具。接的一些保密项目在隔离环境里做这一点非常关键。三是轻量。它的安装包体积小运行时占用的资源比大型商业软件小不少老一点的笔记本也能跑起来。四是生态在快速补全。开源之后第三方导出器、插件、社区教程开始多起来很多 Substance 里的常规操作在 ArmorPaint 里都有对应。当然客观讲它不是没有短板。比如智能材质Smart Material的数量和精细度跟 Substance 的付费材质库比不了官方自带的笔刷资源也相对克制高级的烘焙功能比如从高模烘焙法线到低模还是要靠外部工具完成。但只要你的覆盖半径是中小体量资产的贴图制作ArmorPaint 完全能胜任。1.3 ArmorPaint 的前世今生它不只是个小玩具ArmorPaint 出自 Armory 引擎的作者 Lubos Lenco 之手。Armory 是 Blender 内置的一款开源游戏引擎而 ArmorPaint 可以理解成从引擎生态里长出来的一个应用。它用 Haxe 语言编写底层运行时叫 Krom支持 Vulkan、OpenGL 和 Metal 三个图形后端。这段技术背景不是用来炫的它直接决定了 ArmorPaint 的使用体验。因为底层是游戏引擎架构ArmorPaint 的视口永远是实时渲染模式笔刷落下去颜色立刻出现在带光照的 PBR 模型上。它还内置了一个路径追踪器可以在视口里直接看到类似离线渲染级别的光影效果用来检查贴图在真实光照环境下是否协调。还有一个细节是它支持直接导出到 glTF、Blender、Unity、Unreal、Godot 等目标平台导出器会自动帮你把通道映射到目标引擎的习惯命名上。这点在后面导出章节会展开说。2. 拿 ArmorPaint 上手的第一个小时环境、界面和基础设置2.1 下载、启动和文件结构下载方面直接去官网的下载页或者 GitHub Releases 页面拿对应系统的版本就行。Windows 版本解压就能跑不需要安装。Linux 版本需要系统里有 Vulkan 运行库如果你的发行版没装启动时会提示找不到设备。macOS 版本原生支持 Metal 后端用起来也顺手。第一次启动后ArmorPaint 会在用户目录下创建配置文件夹存放设置、笔刷配置和缓存。工程文件默认是.arm后缀这个文件必须重点理解它保存的是模型引用、图层树、笔刷选择和纹理缓存而不是像 Blender 工程那样把模型和材质全打包。换句话说如果你删掉了原来的模型模型再打开.arm文件会提示找不到模型。所以我自己的习惯是一个资产的模型、贴图、工程文件放在同一个目录里不开新目录不乱动路径。2.2 第一时间要改的三个设置打开 ArmorPaint 之后先别急着导入模型。先花两分钟把下面这三件事设好能省掉后面一整天的麻烦。第一GPU 后端。菜单里能找到图形后端切换的选项默认是 Vulkan。Vulkan 性能好但如果你用的是老显卡、核显或者运行在虚拟机上Vulkan 初始化可能会崩。这时候切成 OpenGL大部分问题都能解决。如果你经常遇到启动黑屏或者直接闪退优先检查这一项。我遇到过一次比较极端的情况是某次驱动更新后 Vulkan 旧模块没卸干净切回 OpenGL 就正常了。第二纹理集默认分辨率。ArmorPaint 里每个模型材质对应一个纹理集默认分辨率一般设在 2048 或 4096。如果显卡显存不大4096 的纹理集叠加多个人物模型时显存很容易被吃满。建议先设 2048 把工作流跑通最后出图前再根据需要调到 4096。第三数位板压感。如果你用数位板画画务必在设置里打开压感支持Tablet 相关选项否则笔刷画出来始终是同一粗细质感会差很多。我第一次用的时候没注意到这个开关还以为软件不支持压感差点直接放弃。2.3 界面与操作习惯速览ArmorPaint 的界面布局对用过任何一款 3D DCC 的人来说都不陌生。中央是 3D 视口顶部是菜单栏右侧是材质和图层面板底部是颜色、笔刷大小、硬度、流量这类工具参数。视口操作跟主流 DCC 的导航习惯保持一致鼠标右键拖拽旋转视角中键拖拽平移滚轮缩放左键在模型上绘制。按 F 可以聚焦模型到视野中央这个快捷键跟 Blender 完全一致用起来没有适应成本。工具图标悬停时一般都会显示提示顶部 View 菜单里有快捷键列表我建议你打开扫一眼。我自己常用的快捷键都在肌肉记忆里了保存工程、撤销、切换画笔/橡皮擦、调整笔刷大小和硬度剩下不常用的就随时开菜单查。这里有个小建议不要在刚开始用的时候试图背快捷键ArmorPaint 的视口操作和图层堆叠逻辑你只要理解了工具位置很快就能记住。3. 从导入模型到画出第一笔完整核心工作流拆解3.1 模型准备和导入格式ArmorPaint 支持导入常见的 OBJ、FBX、glTF 格式。我的建议是优先用 glTF因为它是基于 PBR 语义设计的模型材质名称会保留得比较完整甚至能带进来基础色、粗糙度等参数。OBJ 最通用但信息最少。FBX 要注意导出时的坐标轴设置如果发现导入后模型方向不对回到 DCC 里检查导出选项。有一点必须提前确认模型必须有 UV 展开。ArmorPaint 不是建模软件它做不了复杂的 UV 手工摆岛。如果你的模型还没有 UV一种做法是回 Blender 里展好另一种是直接在 ArmorPaint 里用自动 UV 工具。3.2 自动 UV 展开与纹理集设置对没有 UV 的模型导入后可以选中模型在纹理集相关面板里找到自动生成 UV 的入口。点击后 ArmorPaint 会做类似 Blender Smart UV Project 的操作自动把模型表面切开、摊平、排列到 UV 空间里。展开质量对中等精度的道具、武器模型来说够用但对角色这类需要精细分区利用率的资产我强烈建议还是手动展 UV 再导进来。纹理集是 ArmorPaint 里很重要的一个概念。你可以把它理解成一组贴图的容器一个模型带多个材质时每个材质就是一个独立的纹理集可以单独设置分辨率。一个 2048 的纹理集表示所有需要绘制的 UV 岛共享一张 2048x2048 的贴图。如果需要更大的贴图密度可以开更高的分辨率或者用多象限的 UDIM 方案后面有专门小节。3.3 图层、蒙版、笔刷的第一个实战例子流程理顺了之后第一次画其实很简单。打开模型后右侧图层面板是空的。我习惯按这个顺序来先新建一个填充层Fill Layer挑一个基础色把整个模型涂满。这一步是给后面所有细节铺底子相当于打底色。然后新建一个绘制层Paint Layer这时候笔刷就生效了。在底部设置笔刷的大小、硬度和流量左键在模型上画。画错了切到橡皮擦或者给绘制层加蒙版用蒙版把画错的地方抹掉。蒙版这个操作值得单独强调因为它和传统绘画的区别非常大。在 ArmorPaint 里图层上可以叠加一个灰度蒙版蒙版的白色区域显示图层内容黑色区域隐藏灰色区域半透明。你可以随时调出蒙版来擦拭、填充、模糊整个过程不影响图层本身的像素内容。这就相当于你画了一个图层出来但可以随时决定它的哪部分生效、什么程度生效。画了几笔之后可以用视图里的渲染模式把对应的通道图打开来看。ArmorPaint 支持实时查看基色、法线、粗糙度、金属度等通道的结果。这个功能在排版阶段特别好用能帮你确认每一层的效果到底作用到了哪个通道上。4. 图层的活用做出脏边、磨损、锈迹这类高质感效果4.1 三类图层别混着用填充层、绘制层、程序纹理层的区别很多新手一开始分不清。其实很简单填充层是均匀地往整个 UV 岛里填内容适合打底绘制层是用笔刷手动在局部画适合做精确细节程序纹理层是用算法生成噪波、划痕、细分网格这类模式适合做大面积但是不规则的效果。我的一个经验准则是能用填充层解决的问题不绘制能用程序纹理层解决的问题不手动绘制。手动笔刷只用于边缘磨损、污渍、文字涂鸦这类需要精确控制的地方。原因很简单——程序纹理层是参数化的随时可以改强度、缩放、密度而手动画的像素改起来只能靠重新画。4.2 蒙版是局部控制的钥匙做旧化效果的时候最怕的就是均匀。真实世界的磨损永远是不均匀的金属把手的磨损发生在手心容易出汗的位置木箱的褪色发生在朝光和朝水的方向。这个时候蒙版的价值就体现出来了。我做一个常见的边缘磨损效果的流程是先有一个金属材质的填充层建一个蒙版用噪音笔刷从蒙版里擦掉一部分区域留下的金属色就呈现出斑驳的效果。关键是笔刷的流量不要开满让它有渐变过渡。已经添加的蒙版可以随时复制到其他图层的蒙版上比如把同一个磨损蒙版复制到粗糙度调整层这样磨损位置的颜色、粗糙度、金属度会同时变化真实感一下就出来了。4.3 用混合模式模拟真实物理过程图层的混合模式很多人忽略但它在 ArmorPaint 里的作用不亚于蒙版。新建图层后可以在图层面板里切换混合模式正常、叠加、柔光、线性加深等等。这个逻辑跟 Photoshop 的混合模式是一样的。举个例子。要做一个灰扑扑的旧铁质工具我会在基色层上面加一个程序纹理层生成低频柔和的噪声混合模式用叠加灰度值控制在中间范围。这样噪声不会直接画上明显的黑白纹理而是微妙地改变下面像素的亮度产生一种表面颜色不均匀的脏感。要控制粗糙度的变化时同样用噪声混合在粗糙度通道上做出粗糙与光滑交替的磨损状态。还有一个小技巧用蒙版来做倒角磨损。给模型边缘画出一条蒙版然后在粗糙度调整层里把它调低表现金属长期摩擦后变光滑的效果。画的时候可以把模型光照调暗、把视口放大这样边缘的反光变化看得一清二楚。5. 材质节点、路径追踪、UDIMArmorPaint 的另一半实力5.1 节点材质让效果参数化ArmorPaint 不是只能一层层地画它还内置了一个材质节点编辑器。从工具栏打开某层的材质节点面板会看到类似 Blender 材质节点的界面里面的基础节点包括噪声、颜色渐变、混合、数学运算等。实际使用场景是什么我拿一个金属管道举例。我不希望每根管道都手动去画锈迹而是希望程序自动生成一套可控的锈蚀分布。这时我给基色层接通一个噪声节点再通过颜色渐变色阶调整噪声的黑白分布输出给基色通道和粗糙度通道。调参数的时候视口里的管道立刻改变不同管道复制出来也自带不同的锈迹分布。这个思路就是参数化材质在 ArmorPaint 里也能实现得比较顺。对不熟悉节点的朋友我的建议是先从模仿开始随手连接一个噪音到输出然后逐个拉节点上的滑块观察视口变化。节点系统不会因为连错烧坏啥放心大胆试。5.2 路径追踪预览一面诚实的光照镜子ArmorPaint 视口默认是实时光栅渲染速度快但光影偏游戏感。如果你要检查贴图在不同光照环境下的效果可以切到路径追踪预览模式。这个模式会用光线追踪算法重新计算整个视图把直接光、间接光、环境光遮蔽都算出来画面质感接近离线渲染器。我一般把它当质检模式用。画完一层就切到路径追踪看一眼阴影位置的脏迹是否过重光滑金属的反光带是否会盖住纹理这些在实时预览下不容易察觉的问题路径追踪下一眼就能看出来。要说明的是路径追踪预览是视口功能不是导出离线渲染图用的但拿它来评估材质本身完全够。5.3 UDIM 大资产支持如果你用 UDIM把 UV 展开成多个 0-1 象限管理过大型资产大概率会担心工具支不支持。ArmorPaint 支持 UDIM 纹理集会把每一个 tile 当成独立贴图处理绘制时无缝衔接导出时按 tile 输出多张贴图命名规则可以控制。对于场景贴图密度要求高的项目比如一个大型载具需要车头一个 tile、车侧一个 tile、内部一个 tile用 UDIM 比把所有 UV 塞进一张 4096 纹理里效果好得多。我自己用 ArmorPaint 做过一次坦克模型UV 拆成 8 个 tile画起来跟单 tile 没有区别导出后在引擎里也能被正确识别为多张贴图。6. 导出对接 Blender、Unity、Unreal 时的配置细节6.1 导出面板快速上手画完之后在文件菜单里选择导出贴图会弹出导出面板。这里第一步不是选路径而是选目标平台。导出器会根据平台自动调整默认的通道命名和打包方式。面板里可以勾选需要导出的通道Base Color基色、Roughness粗糙度、Metallic金属度、Normal法线、AO环境遮蔽、Height高度、Opacity透明度、ID 等。格式方面如果不做特殊处理PNG 是最通用的选择。如果要保存浮点精度比如高度图带有微妙的层次信息可以导出为 EXR。绝大部分游戏引擎和渲染器对 PNG通道图的工作流都兼容得很好。6.2 颜色空间与法线方向最容易翻车的地方把贴图导入引擎之后发现画面发灰、颜色难看绝大多数不是绘制的问题而是颜色空间和通道映射的问题。Base Color 是彩色贴图在引擎里要设置成 sRGB 颜色空间。Roughness、Metallic、Normal、AO、Height 这些贴图存的是数值信息不是颜色必须设置成线性或者 Non-Color。如果你在引擎里看到模型整体灰蒙蒙的、金属位置像蒙了一层雾十有八九是法线贴图或者粗糙度贴图被错误地当成了 sRGB 来读。法线方向是另一个高频问题。Unity 和 Unreal 对法线贴图的 Y 通道绿色通道方向习惯不完全一致同一个法线贴图在 Unity 里正常导入 Unreal 可能出现光照反转。解决方法是在引擎导入设置里找到法线方向的翻转选项勾选或者取消勾选绿色通道翻转即可。ArmorPaint 的导出器本身会尽量根据目标平台调整但跨引擎搬贴图时仍然值得检查一遍。6.3 各引擎的接入流程示例在 Blender 里导入贴图后使用 Principled BSDF 节点把 Base Color 接 Base Color、Roughness 接 Roughness、Metallic 接 Metallic法线贴图通过 Normal Map 节点转给法线输入。重点检查颜色空间基色设 sRGB其余全部设为 Non-Color。在 Unity 中Unity 的 Standard Shader 使用 Smoothnesssmoothness 1 - roughness而不是 Roughness。所以你如果把 Roughness 贴图直接接上去金属会看起来油腻反光。要么在导出时勾选反转 Roughness要么在 Unity 材质里把贴图类型设置为默认的 Metallic Smoothness 映射让引擎自己处理反向换算。在 Unreal 中流程相对直接Roughness 和 Metallic 接到对应输入即可。导入贴图时把 Base Color 的 sRGB 保持开启其他贴图关闭 sRGB。法线贴图导入时会提示按法线贴图压缩。我个人的一个小习惯是到新平台的第一个测试永远先用一个标准球走一遍贴图流程确认所有通道方向和颜色空间正确后再开始批量导入资产。别直接拿复杂模型上来试那样根本分不清是绘制问题还是转换问题。6.4 和 Blender 的完整配合流程讲一个我自己比较固定使用的流程建模、展 UV 是在 Blender 里完成然后从 Blender 导出 glTF 模型到 ArmorPaint绘制完成后再导出贴图最后把贴图和模型在 Blender 里组合出渲染图或者直接送进 Unity 做游戏场景。这种配合的好处是两个软件都是免费开源的整个管线下来正版授权费用为零。工作时不依赖网络项目文件也完全由自己掌控。用 Cycles 渲染的时候ArmorPaint 导出的贴图直接接进 Principled BSDF 就能出效果不需要反复调试。7. 我在 ArmorPaint 里踩过的坑与解决记录7.1 启动闪退、黑屏、视口渲染异常这是新手遇到最多的问题绝大多数和图形 API 有关。Vulkan 后端对显卡和驱动要求比较高尤其是老显卡、核显、以及一些 Linux 驱动不完整的环境。解决办法就几个升级显卡驱动、切换图形后端到 OpenGL、降低视口渲染分辨率。ArmorPaint 有些版本可以通过启动参数指定后端这个参数名在不同版本有差异建议打开官方文档或者社区 Wiki 看一眼当前版本的正确写法。我还遇到过一种情况视口里模型变成全黑换到路径追踪还是黑的最后发现是默认环境光亮度被调到了接近零。在环境光照或世界设置里把亮度拉回来就好。这类问题通常不是 bug而是设置被误碰了。7.2 笔刷掉线、卡顿、显存爆掉绘图时笔刷突然没反应第一反应检查图层是否有蒙版选中、锁定开关是否打开、是否误切到了橡皮擦。排除这些之后再看性能。ArmorPaint 作为 GPU 软件纹理集分辨率高、叠加图层多的时候显存占用会迅速上升。4K 纹理集加路径追踪预览在 8GB 显存的机器上都会感到卡顿。我实际使用的对策是先挂 2K 纹理集画完最后导出前再切成 4K 重新计算一遍。需要检查密集噪声效果时把视口分辨率调低只画完再看路径追踪。笔刷出现断线多半是笔刷间距Spacing太大调整笔刷参数里的间距值笔迹就会连续。7.3 导出的贴图颜色发灰、过亮、发白所有引擎和渲染器里贴图颜色不对基本都是颜色空间和位深造成的。基色贴图必须标注为 sRGB非颜色数据贴图标注为线性/Non-Color。如果色彩发白像蒙了一层雾优先检查法线贴图是否被错误地按 sRGB 采样。如果粗糙度显得很油亮检查是否 roughness 被反转成了 smoothness或者使用了错误的通道。还有一个小坑高光工作流和金属度工作流混淆。ArmorPaint 默认是金属度/粗糙度工作流。如果你在引擎里用的是 Specular 工作流得先做转换。建议渲染和引擎统一到金属度/粗糙度工作流避免不必要的通道换算。7.4 工程文件庞大、资源路径丢失.arm 工程文件里保存了纹理缓存图层越多、分辨率越高文件越大。这本身不是问题但如果你的工程文件动辄两三 GB就该考虑优化了。方法是定期把已经确定的图层栅格化合并删除不再使用的大纹理缓存或者降低缓存分辨率。资源路径丢失的问题我也踩过。.arm 引用的是外部模型文件路径如果你把工程文件拷给同事但没有把对应的模型也一起拷过去对方打开工程会提示找不到模型。所以前面提到的模型、工程、贴图同一目录策略是真的有必要的配合相对路径使用整个文件夹能直接搬到别的电脑或工作机上。7.5 我对这个工具目前的定位说实话ArmorPaint 现在还达不到 Substance Painter 在某些细分领域的完整度比如庞大的智能材质库和第三方生态。但是它的核心管线——图层、蒙版、程序纹理、节点、路径追踪、UDIM、多平台导出——已经是能独立支撑一个项目贴图环节的完整方案。我现在的大部分项目流程已经跑在这个组合上Blender 做建模和 UVArmorPaint 画贴图导出到 Unity 或者直接用 Cycles 渲染。需要在贴图上做精细的像素级修图时我会把导出的 Base Color 拉到 Photoshop 里处理然后再导回引擎。这个混合流程对我来说效率是最高的。如果你刚接触 ArmorPaint我的建议是先拿它自带的示例模型完整走一遍流程从导入、自动 UV、画基础图层、加蒙版、到导出贴图全流程体验一次。不用急着炫技把填充层、蒙版、纹理集分辨率这三件事吃透你就抓住了这个工具最核心的骨架。后面那些节点、路径追踪、UDIM都是在这个骨架之上长出来的肌肉用几次自然就熟了。
返回列表