1. 从“等麻了”到“终于落地”ArmorPaint 1.0 到底是个什么东西如果你最近两年一直在关注独立3D工具圈ArmorPaint这个名字大概率不会陌生。它最早以“开源版Substance Painter”的姿态进入大众视野靠着轻量、节点化、支持GPU加速这几张牌在个人创作者和小型工作室里攒下了一批死忠用户。但问题也一直存在版本号长期停留在0.x功能虽然能用但总给人一种“半成品”的感觉很多人在项目里只敢拿它做辅助不敢当主力。1.0正式版落地之后这个局面算是彻底翻篇了。简单说ArmorPaint是一个基于物理渲染的3D模型纹理绘制工具你可以把它理解成一个专门给模型“上色、做旧、贴细节”的工作台。它最核心的能力是让你直接在3D模型表面进行绘画而不是在平面的UV贴图上盲画。你画一笔模型表面立刻出现对应的材质变化所见即所得。它解决的问题非常具体传统流程里给一个角色或者道具做纹理要么在Photoshop里对着UV展开图一点点画要么用昂贵的商业软件。前者效率低、反馈差后者成本高、学习曲线陡。ArmorPaint 1.0把这两条路都绕开了——它开源、跨平台、对硬件要求相对友好而且1.0版本在稳定性和功能完整度上终于达到了“可以正经干活”的水平。适合谁来参考这篇内容三类人最值得往下看一是独立游戏开发者尤其是做写实或半写实风格的小团队二是3D美术爱好者想找一个能长期投入学习的纹理工具三是已经在用Blender、Maya、Godot这类工具想补上纹理绘制这一环的创作者。哪怕你之前完全没接触过纹理绘制只要对3D流程有基本概念这篇内容都能帮你把ArmorPaint 1.0的里里外外摸清楚。2. 1.0版本的核心变化与设计思路拆解2.1 为什么“1.0”这个数字比想象中重要很多人看到版本号从0.9跳到1.0第一反应是“不就是个数字吗”。但在实际项目里版本号意味着两件事API和文件格式的稳定性以及开发者对功能完整度的自我认定。0.x时代的ArmorPaint每次更新都可能改节点接口、改材质存储方式你上个月做的工程这个月可能就打不开了。1.0之后核心的数据结构和节点系统基本冻结这意味着你可以放心地把工程文件归档半年后再打开也不会出大问题。另一个容易被忽略的点是插件和脚本生态。1.0之前社区想给ArmorPaint写扩展工具总要担心底层接口随时变。1.0发布后官方明确了一套相对稳定的脚本接口这才让第三方工具链有了生长的土壤。我实测下来目前社区里已经出现了批量导出、材质库管理、与Blender联动的小脚本虽然数量还不多但方向是对的。2.2 节点化材质系统ArmorPaint的“灵魂”ArmorPaint和很多同类工具最大的区别在于它从第一天起就是节点驱动的。你做的每一个材质背后都是一张节点图。基础色、粗糙度、金属度、法线、高度这些通道不是孤立的图层而是通过节点连接起来的数据流。这种设计的好处在于非破坏性和可复用性。举个例子你想做一个“生锈的铁皮”材质。在传统图层工具里你可能要新建好几个图层分别画锈迹、调粗糙度、加法线。但在ArmorPaint里你可以用一个Noise节点生成锈迹遮罩用ColorRamp控制锈的颜色范围再把这个遮罩同时接到基础色、粗糙度和金属度上。改一个参数三个通道同步变化。更关键的是这套节点图可以保存成预设下次直接拖到另一个模型上改改缩放和方向就能用。1.0版本对节点系统做了几处关键优化。第一是节点求值速度官方重写了部分GPU计算逻辑复杂节点图的实时预览延迟明显降低。第二是节点组的封装你可以把一组常用节点打包成一个自定义节点对外只暴露几个关键参数这对团队协作非常友好。第三是节点库的默认内容1.0内置了更丰富的噪声、遮罩、滤镜节点开箱即用的程度比0.x时代高了不少。2.3 跨平台与硬件适配的取舍ArmorPaint 1.0支持Windows、Linux和macOS这一点在开源3D工具里算是良心。但更值得说的是它对硬件的态度。它不强制要求高端显卡集显也能跑只是复杂场景下预览会卡。官方的逻辑很清晰保证最低门槛能打开、能画高配机器则享受流畅体验。这种取舍背后是渲染管线的设计。ArmorPaint用的是自己的一套实时PBR渲染器没有直接套用游戏引擎。好处是轻量、启动快、依赖少代价是某些高级效果比如复杂的次表面散射支持得不如商业软件那么精细。1.0版本在光照模型上做了一些补强尤其是环境光遮蔽和软阴影的预览质量比0.x时代自然很多。如果你主要做的是硬表面道具、环境物件、风格化角色这套渲染完全够用如果你要做影视级皮肤纹理可能还需要配合其他工具做最终输出。3. 核心功能细节与实操要点解析3.1 从模型导入到UV检查第一步别急着画ArmorPaint支持导入OBJ、FBX、GLTF等常见格式。但导入之后我强烈建议你先做一件事检查UV。纹理绘制的所有痛苦一大半来自糟糕的UV布局。ArmorPaint本身不提供UV展开功能你得在Blender、Maya或者RizomUV里先把UV拆好。检查UV时重点看三个东西接缝位置、UV岛间距、纹理密度。接缝最好藏在模型不容易被看到的地方比如角色腋下、道具底部。UV岛之间要留出足够的边距否则绘画时笔刷容易“溢出”到相邻的岛上。纹理密度则决定了你画细节时会不会出现像素化。我一般会在ArmorPaint里先铺一层纯色然后用笔刷在接缝处画几笔看看有没有明显的拉伸或错位。注意ArmorPaint的笔刷投射是基于UV的如果UV有重叠绘画结果会同时出现在重叠区域。导入前在建模软件里用UV检查工具过一遍能省掉后面大量返工。3.2 笔刷系统不只是“画”更是“模拟”ArmorPaint的笔刷不是简单的圆形印章。它支持笔刷形状、衰减曲线、压感、倾斜、随机旋转、散布等参数。1.0版本新增了几种实用笔刷预设比如“硬表面划痕”、“布料磨损”、“边缘高光”这些预设本质上是一组参数和节点遮罩的组合你可以直接拿来用也可以拆开研究它的实现逻辑。实际绘画时我习惯把笔刷分成三类来管理基础形笔刷用于铺大色块、细节笔刷用于画划痕、污渍、特效笔刷用于做边缘磨损、角落积灰。每类笔刷配一套快捷键切换起来不打断节奏。ArmorPaint支持笔刷预设的导入导出你可以把自己调好的笔刷打包换台机器直接导入。一个容易被忽略的功能是笔刷的材质来源。你可以让笔刷直接引用某个节点材质的输出也就是说你画的每一笔都带着完整的PBR信息而不是单纯的颜色。这个功能在做“材质过渡”时特别好用比如从干净金属过渡到生锈金属用材质笔刷扫一下粗糙度和金属度会跟着颜色一起变。3.3 图层与遮罩非破坏性工作流的核心ArmorPaint的图层系统和Photoshop类似但多了材质通道的概念。每个图层可以独立控制基础色、粗糙度、金属度、法线、高度等通道的开关和混合模式。这意味着你可以在一个图层里只画粗糙度变化而不影响颜色。遮罩是图层系统的灵魂。ArmorPaint支持手绘遮罩、节点遮罩、材质ID遮罩、曲率遮罩、环境光遮蔽遮罩等多种方式。其中曲率遮罩和AO遮罩在硬表面纹理里几乎是必用的——曲率遮罩能自动选中模型的凸边和凹缝AO遮罩能选中角落和缝隙。用这两个遮罩配合你可以快速做出“边缘磨损”和“缝隙积灰”的效果效率比手绘高一个数量级。1.0版本对遮罩的求值做了缓存优化。以前在一个复杂模型上切换遮罩预览会有明显卡顿现在基本是秒切。这个改进看起来小但实际绘画时对心流的影响很大。3.4 导出与引擎对接别在最后一步翻车ArmorPaint支持导出多种纹理格式包括PNG、JPEG、TIFF、EXR等。导出时你可以选择通道打包方式比如把粗糙度、金属度、AO打包到一张贴图的RGB通道里。这个功能直接决定了你的纹理能不能顺利导入Unity、Unreal或者Godot。我踩过的一个坑是色彩空间。ArmorPaint默认在sRGB空间里显示颜色但粗糙度、金属度、法线这些通道必须是线性空间。导出时如果选错了色彩空间贴图在引擎里会明显偏亮或偏暗。1.0版本在导出面板里加了色彩空间的明确标注但你还是得知道自己项目的管线要求。一般来说基础色用sRGB其他通道用Linear法线贴图用OpenGL或DirectX格式要看引擎。提示导出前先在ArmorPaint里用“通道视图”逐个检查确保每个通道的信息都在合理范围内。特别是法线贴图如果出现大面积纯色说明法线信息可能没烘培对。4. 完整实操流程从零做一个“旧铁皮箱”纹理4.1 准备工作与基础材质铺设假设你已经在Blender里做好了一个铁皮箱的模型UV也拆好了。导入ArmorPaint后先新建一个材质层把基础色设成深灰色粗糙度调到0.6左右金属度给0.8。这一步是给整个模型一个“底”后面所有细节都在这个底上叠加。接下来新建一个填充层用Noise节点生成一张大尺度的噪声图接到基础色上颜色范围控制在深灰到中灰之间。这一步是为了打破纯色的单调感模拟铁皮本身的色差。Noise的缩放值我一般设在8到15之间具体看模型尺寸。然后把这个噪声同时接到粗糙度上让颜色变化和粗糙度变化同步看起来更自然。4.2 锈迹与磨损的节点化实现锈迹是旧铁皮箱的灵魂。新建一个图层添加一个Noise节点缩放值调小到3到5生成大块的锈迹分布。然后用ColorRamp把噪声的对比度拉高只保留一部分区域作为锈迹遮罩。把这个遮罩接到基础色上锈的颜色用橙棕色系同时接到粗糙度上锈的地方粗糙度拉到0.9金属度则反过来锈的地方金属度降到0.1。边缘磨损用曲率遮罩来做。新建图层添加曲率遮罩调整曲率阈值让遮罩只选中凸边。然后用一个浅灰色的基础色填充粗糙度调低到0.3金属度保持0.9。这样箱子的边角就会露出“被磨亮的金属”效果。如果你想让磨损更自然可以在曲率遮罩上再叠加一层Noise让磨损断断续续而不是一条连续的亮边。4.3 细节刻画与手绘修正节点遮罩能搞定80%的效果但剩下的20%需要手绘来补。比如箱子正面的一大道划痕、锁扣附近的指纹污渍、底部的不规则泥点。这些用笔刷直接画更快。画划痕时我习惯用“硬表面划痕”笔刷压感调低让划痕两端细中间粗。画完之后用橡皮擦或者遮罩修一下边缘避免太规整。污渍则用“布料磨损”笔刷把不透明度降到20%左右一层层叠上去每层稍微旋转一下笔刷角度避免重复感。实操心得手绘细节时把模型旋转到和参考图一致的角度再画。ArmorPaint支持视图旋转但笔刷投射是基于屏幕空间的角度不对的话画出来的划痕方向会和模型表面不匹配。4.4 导出设置与引擎验证所有图层画完后先别急着导出。在ArmorPaint里切换到“通道视图”逐个检查基础色、粗糙度、金属度、法线、AO。重点看有没有通道出现纯黑或纯白的大块区域那通常意味着遮罩或节点连接出了问题。导出时选择项目需要的贴图尺寸一般游戏项目用2048x2048就够了影视或高精度展示可以用4096。通道打包方式根据引擎来Unity的Standard Shader需要Metallic/Smoothness打包Unreal需要Roughness/Metallic/AO打包。导出后在引擎里新建材质把贴图连上去在真实光照下转一圈。如果发现某个通道效果不对回到ArmorPaint改对应图层重新导出即可整个过程不需要重新画。5. 常见问题与排查技巧实录5.1 笔刷画不上去或者画出来是黑的这是新手最常遇到的问题原因通常有三个。第一当前图层没有开启对应的通道。比如你想画基础色但图层的基础色通道是关闭的笔刷自然没反应。第二遮罩把整个模型都遮住了。检查图层遮罩是不是全黑或者反相了。第三法线方向问题。如果模型法线反了ArmorPaint的笔刷投射会失效。在建模软件里统一法线方向再导入。5.2 节点图太复杂导致预览卡顿ArmorPaint 1.0虽然优化了求值速度但节点图超过一定复杂度还是会卡。我的经验是把不参与实时预览的节点暂时禁用。比如你有一个复杂的程序化锈迹节点组调好参数后可以把它“烘焙”成一张贴图然后用贴图节点替代节点组。ArmorPaint支持把节点输出烘焙到图层这个功能在1.0里稳定了很多。另一个技巧是降低预览分辨率。在视图设置里把实时预览的分辨率从2048降到1024绘画时用低分辨率导出时再切回高分辨率。肉眼在绘画时很难察觉1024和2048的区别但GPU压力小了一半。5.3 导出的贴图在引擎里颜色不对九成是色彩空间问题。检查导出面板里的色彩空间设置基础色选sRGB粗糙度、金属度、法线、AO选Linear。如果引擎里还是不对检查引擎的材质节点有没有把贴图的sRGB开关设对。Unity里基础色贴图要勾选sRGB其他贴图要取消勾选。Unreal里则是在贴图属性里设置Compression Settings和sRGB选项。还有一个隐蔽的坑是法线贴图的绿通道方向。OpenGL和DirectX的法线贴图绿通道是反的。ArmorPaint导出时可以选法线格式你得知道自己引擎用哪种。Unity默认用OpenGL格式Unreal默认用DirectX格式。选错了的话模型表面的凹凸感会完全反掉。5.4 工程文件越来越大打开越来越慢ArmorPaint的工程文件会保存所有图层和节点数据画得越多文件越大。1.0版本加了一个“清理未使用资源”的功能在文件菜单里。它会扫描工程里没有被引用的贴图和节点把它们删掉。我一般每完成一个大阶段就清理一次文件体积能缩小30%到50%。另外如果你用了很多高分辨率的手绘图层可以考虑把某些图层合并。比如把五个只画了污渍的图层合并成一个只要它们的混合模式相同合并后效果不变但文件会小很多。合并前记得复制一份工程备份万一要改还有退路。常见问题排查方向快速解决笔刷无反应图层通道开关、遮罩状态、模型法线开启对应通道检查遮罩反相统一法线预览卡顿节点复杂度、预览分辨率禁用非必要节点降低预览分辨率导出颜色异常色彩空间、引擎贴图设置基础色sRGB其他Linear检查引擎sRGB开关法线凹凸反向法线格式OpenGL/DirectX导出时切换法线格式匹配引擎要求工程文件过大未使用资源、图层数量清理未使用资源合并同混合模式图层6. 和其他工具的配合方式与个人经验ArmorPaint 1.0不是一个孤立的工具它最好的用法是嵌在现有流程里。我目前的流程是Blender建模和UV展开ArmorPaint做纹理绘制最后导出到Godot或Unreal做最终渲染。Blender和ArmorPaint之间可以用GLTF格式来回传模型改了重新导入UV不变的话之前画的纹理层会自动适配。如果你用Substance PainterArmorPaint不能直接读.spp文件但可以通过导出贴图的方式互通。反过来ArmorPaint的工程文件也不能被Substance读取。所以如果你在团队里协作最好统一纹理工具或者约定好中间格式。我个人在实际操作中的体会是ArmorPaint最适合中小体量的硬表面和风格化项目。它的节点系统在程序化纹理上非常高效但如果你要做高度写实的角色皮肤可能需要配合ZBrush的置换贴图和Substance的皮肤材质库。1.0版本已经足够稳定可以放心用在正式项目里但建议保持工程文件的定期备份毕竟开源工具的版本迭代节奏和商业软件不太一样。最后分享一个小技巧ArmorPaint的社区材质库虽然不大但质量参差不齐。下载别人的材质预设后别直接往模型上套先打开节点图看看它的实现逻辑。很多时候你只需要其中一两个节点组拆出来用到自己的材质里比整体套用更灵活。这个习惯让我积累了一套自己的节点库现在做新材质时一半以上的节点都是复用之前的效率提升非常明显。