1. 为什么我最终把贴图绘制从Blender里搬了出来如果你做过一段时间的3D美术或者游戏开发大概率经历过这样一个阶段模型建完了UV拆好了接下来要画贴图了然后开始纠结用什么工具。Blender自带的纹理绘制功能其实不差尤其是2.8版本之后Texture Paint模式配合Draw、Fill、Smear这些笔刷做点基础的颜色铺陈完全够用。但一旦涉及到PBR材质的多通道同步绘制比如你要同时处理Base Color、Roughness、Metallic、Normal、Height这几张贴图Blender的图层管理就开始显得力不从心了。ArmorPaint这个软件第一次看到的时候我其实没太当回事。开源、免费、独立软件这几个标签放在一起第一反应是“估计又是个半成品”。但真正用下来之后我发现它在材质绘制这个细分场景里的完成度远超我的预期。它的定位很明确不做建模不做渲染不做动画就专注做一件事——把材质贴图这件事做到极致。你可以把它理解成一个轻量级的Substance Painter替代方案但它的工作流和Blender的衔接又比Substance更顺滑因为它本身就是脱胎于Blender生态的。这篇文章我打算从实际使用的角度把ArmorPaint的完整工作流拆开来讲。包括它和Blender之间怎么配合、PBR通道怎么管理、笔刷系统怎么调、图层和遮罩怎么用、导出的时候有哪些坑。如果你正在找一个不花钱又能打的贴图绘制方案或者你已经在用Blender但觉得纹理绘制不够顺手那这篇内容应该能帮你省下不少试错的时间。2. ArmorPaint到底是个什么东西2.1 核心定位与适用人群ArmorPaint是一个独立的3D材质绘制软件基于Armory引擎的渲染管线开发。它的核心功能是让美术直接在3D模型表面绘制PBR材质支持图层、遮罩、笔刷、粒子笔刷、材质节点等一整套工作流。你可以把它当成一个专门做贴图的“画板”模型导入之后你在它表面涂涂画画最后导出一组标准的PBR贴图拿去引擎或者渲染器里用。它适合的人群其实挺明确的。第一类是独立游戏开发者预算有限但需要一套完整的PBR贴图制作流程。第二类是Blender用户已经在Blender里完成了建模和UV不想再额外学一套Substance的复杂操作。第三类是学生或者刚入行的新人想学PBR材质绘制但不想一上来就面对商业软件的价格门槛。第四类是对开源工具有执念的老玩家喜欢折腾、喜欢看源码、喜欢自己改东西。不太适合的人群也说一下如果你需要极其精细的笔刷控制、需要复杂的程序化材质生成、需要和团队协作共享材质库那Substance Painter或者Quixel Mixer可能还是更合适。ArmorPaint的强项在于“够用且轻量”而不是“大而全”。2.2 和Blender的关系到底是怎么回事很多人看到“脱胎于Blender”这个说法会误以为它是Blender的一个插件。不是的。ArmorPaint是一个完全独立的软件有自己的界面、自己的渲染器、自己的文件格式。它和Blender的关系更多是“生态上的亲缘关系”——它的底层渲染技术、部分着色器逻辑、甚至一些UI设计思路都和Blender/Amor引擎有渊源。实际使用中它和Blender的配合方式是这样的你在Blender里建好模型、拆好UV、导出成OBJ或者FBX格式然后导入ArmorPaint里画贴图。画完之后导出贴图文件再回到Blender里把贴图连到材质节点上。整个流程没有直接的插件桥接但文件格式的兼容性很好OBJ和FBX的导入基本不会出问题。注意ArmorPaint对UV的要求比较高。如果你的UV有重叠、有翻转、有拉伸导入之后画出来的贴图会出各种奇怪的问题。建议在Blender里先用UV检查工具过一遍确保每个面都有独立且合理的UV空间。2.3 版本选择与获取方式ArmorPaint的获取方式比较特殊。它的源码在GitHub上是公开的但官方编译好的版本需要付费购买价格大概在20美元左右具体看版本。源码可以自己编译编译出来的版本功能上和付费版基本一致但需要你自己处理依赖和构建环境。我个人的建议是如果你只是想用不想折腾编译直接买官方编译版最省事。如果你喜欢折腾、想改代码、想加自己的功能那就去GitHub拉源码自己编译。编译环境主要是C和OpenGL相关的依赖在Linux下编译相对顺利Windows下需要配置Visual Studio和CMake稍微麻烦一点。实操心得官方编译版更新频率不算特别高但每次更新都会有比较实质的功能改进。如果你用的是源码编译版建议关注一下GitHub的commit记录有些新功能在正式版发布之前就已经在源码里了。3. 从Blender到ArmorPaint的完整工作流拆解3.1 模型准备阶段的几个关键决策在Blender里准备模型的时候有几个决策会直接影响你在ArmorPaint里的绘制体验。第一个是UV的排布方式。ArmorPaint的笔刷是基于UV空间投射的如果你的UV岛排得太密笔刷在边界处会出现拉伸如果排得太疏又浪费贴图分辨率。我的经验是对于主要视觉区域比如角色的脸部、武器的握把UV岛要留足空间对于次要区域比如背面、底面可以适当压缩。第二个是模型的平滑组和法线。ArmorPaint在绘制的时候会读取模型的法线信息如果你的模型有硬边但法线没有正确设置画出来的贴图在边缘处会有明显的接缝。建议在Blender里先应用好平滑组或者直接用自定义法线数据。第三个是模型的尺度。ArmorPaint的笔刷大小是基于世界空间的如果你的模型尺度特别大或者特别小导入之后需要重新调整笔刷的默认大小。我一般会在Blender里把模型缩放到一个合理的范围比如角色高度在1.8个单位左右这样导入之后笔刷的默认参数比较顺手。3.2 导出格式的选择与参数设置从Blender导出到ArmorPaint常用的格式是OBJ和FBX。OBJ的好处是兼容性最好几乎不会出问题缺点是它不包含法线信息除非你导出的时候勾选了法线。FBX的好处是能保留更多信息包括法线、切线、材质槽缺点是不同版本的FBX导出器行为不太一致。我的习惯是用OBJ导出的时候勾选“Write Normals”和“Triangulate Faces”。三角化这一步很重要因为ArmorPaint内部是按三角形处理的如果导入的是四边形它会在导入时自动三角化但自动三角化的方式可能和你在Blender里预期的不同导致UV出现细微偏移。导出参数方面缩放保持默认的1.0前向轴和后向轴根据你的模型朝向调整。如果你在Blender里模型是朝-Y方向的导出的时候把前向轴设为-Y这样导入ArmorPaint之后视角是对的。3.3 导入ArmorPaint后的初始设置模型导入ArmorPaint之后第一件事是检查UV有没有问题。在3D视图里切换到UV模式看看UV岛的排布是否和Blender里一致。如果发现UV有偏移或者翻转大概率是导出时的轴向设置不对回去重新导出。第二件事是设置贴图分辨率。ArmorPaint支持从1K到8K的贴图默认是2K。对于大多数游戏项目2K已经够用了4K适合高精度渲染8K一般只在影视级项目里用。分辨率越高绘制时的显存占用越大如果你的显卡显存不够8K可能会卡顿。第三件事是设置背景环境。ArmorPaint内置了几个HDRI环境你可以切换不同的光照条件来检查材质的反射效果。我一般会用一个中性灰的环境做基础绘制最后再用强光环境检查高光部分。4. 材质绘制的核心操作与参数详解4.1 图层系统的逻辑与实操ArmorPaint的图层系统和Photoshop很像但它是针对3D材质做了专门优化的。每个图层可以包含一组PBR通道Base Color、Roughness、Metallic、Normal、Height、Occlusion、Emissive你可以单独控制每个通道的开关和混合模式。新建图层的时候默认会创建一个“填充层”也就是用纯色或者纹理填充整个模型表面。如果你只想在局部绘制需要添加一个“遮罩”然后在遮罩上画。遮罩的逻辑是白色区域显示当前图层的内容黑色区域隐藏灰色区域半透明。实操心得我习惯把基础材质放在最底层用填充层铺一个大色调然后上面叠细节层每层都用遮罩控制范围。这样后期调整的时候改底层颜色不会影响上层的细节改上层细节也不会破坏底层的基础色。图层的混合模式有Normal、Multiply、Screen、Overlay、Soft Light等和Photoshop基本一致。最常用的是Normal和MultiplyNormal用于直接覆盖Multiply用于加深阴影或者叠加纹理。4.2 笔刷系统的深度调校ArmorPaint的笔刷系统是它的核心卖点之一。它内置了多种笔刷类型标准笔刷、粒子笔刷、橡皮擦、模糊笔刷、克隆笔刷。每种笔刷都有大量的参数可以调包括大小、硬度、流量、间距、抖动、旋转、颜色抖动等。标准笔刷最常用适合画大面积的色块和细节。粒子笔刷适合做散布效果比如地面的碎石、墙面的污渍、皮肤的毛孔。粒子笔刷的参数里有一个“Count”控制每次笔触生成的粒子数量“Radius”控制粒子的散布范围“Scale”控制粒子的大小。模糊笔刷用来柔化边缘或者做过渡效果它的强度参数控制模糊的程度。克隆笔刷用来复制模型上某个区域的纹理到另一个区域做对称细节或者修补的时候很有用。注意笔刷的“流量”和“不透明度”是两个不同的概念。流量控制的是每次笔触释放的“颜料量”不透明度控制的是最终叠加后的透明度。如果你想要一笔画下去就有很实的颜色把流量和不透明度都调高如果你想要慢慢叠加出效果把流量调低不透明度保持中等。4.3 遮罩与选择工具的配合使用遮罩是ArmorPaint里控制绘制范围的主要手段。除了手动在遮罩上画之外还可以用选择工具来生成遮罩。ArmorPaint提供了几种选择方式按UV岛选择、按材质槽选择、按法线方向选择、按高度选择。按UV岛选择特别实用。比如你要给角色的鞋子单独上材质但鞋子和裤子在同一个UV布局里你可以用UV岛选择工具点一下鞋子的UV区域然后生成遮罩这样后续的绘制就只影响鞋子。按法线方向选择适合做“顶面受光”或者“底面阴影”的效果。比如你要给一个石头模型做苔藓苔藓通常长在朝上的面你可以用法线选择工具选中所有朝上的面生成遮罩然后在遮罩上画绿色。按高度选择适合做渐变效果。比如你要给一个柱状模型做从下到上的颜色渐变可以用高度选择工具设置一个高度范围生成遮罩然后填充渐变。4.4 材质节点与程序化纹理ArmorPaint支持材质节点系统你可以用节点来生成程序化纹理然后把这些纹理作为笔刷的笔尖或者图层的填充内容。节点类型包括噪声、渐变、棋盘格、砖块、波浪等。程序化纹理的好处是分辨率无关你可以随时调整参数而不损失画质。比如你要做一个木纹材质可以用噪声节点加上波浪节点组合出木纹的纹理然后调整颜色和对比度最后输出到Base Color通道。实操心得程序化纹理虽然方便但不要过度依赖。对于需要高度定制化的细节比如角色脸上的疤痕、武器上的刻字还是手动绘制更可控。程序化纹理适合做底纹和重复性图案手动绘制适合做独特细节。5. 导出贴图与回传Blender的完整流程5.1 导出前的检查清单在ArmorPaint里画完贴图之后导出之前有几件事必须检查。第一确认所有需要的通道都已经有内容。有时候你只画了Base Color忘了画Roughness和Metallic导出的贴图里这两个通道就是空的回到Blender里材质会看起来很奇怪。第二确认贴图的分辨率和项目需求匹配。如果你在ArmorPaint里用的是2K但项目需要4K导出的时候可以设置输出分辨率但放大后的贴图会有画质损失。最好是在绘制阶段就用目标分辨率。第三确认UV没有超出0-1范围。ArmorPaint在导出的时候会按UV范围裁剪贴图如果你的UV有超出0-1的部分那部分内容会被裁掉。5.2 导出格式与通道打包方式ArmorPaint支持导出多种格式PNG、JPEG、TIFF、EXR。PNG是最常用的无损压缩支持透明通道。JPEG体积小但有损适合最终发布。EXR支持高动态范围适合做HDR贴图。通道打包方式有两种分离式和合并式。分离式就是每个通道导出一张独立的贴图比如BaseColor.png、Roughness.png、Metallic.png。合并式就是把多个通道打包到一张贴图的不同颜色通道里比如把Roughness放到G通道Metallic放到B通道Occlusion放到R通道。注意不同的渲染器和引擎对通道打包的约定不一样。Unity的Standard Shader要求Metallic在R通道Occlusion在G通道Roughness在A通道。Unreal Engine的要求又不一样。导出之前一定要确认目标引擎的文档按它的要求来打包。5.3 在Blender里重建材质节点贴图导出之后回到Blender里重建材质。基本的节点连接逻辑是BaseColor贴图连到Principled BSDF的Base Color输入Roughness贴图连到Roughness输入Metallic贴图连到Metallic输入Normal贴图经过Normal Map节点连到Normal输入。如果你用的是合并式打包需要用Separate RGB节点把通道拆开然后分别连到对应的输入。比如一张打包了Roughness和Metallic的贴图用Separate RGB拆开之后G通道连RoughnessB通道连Metallic。实操心得建议在Blender里建一个通用的材质模板把所有常用的贴图节点和连接都预设好每次导入新贴图的时候只需要替换图片文件就行。这样可以省下大量重复劳动的时间。6. 实际项目中踩过的坑与解决方案6.1 常见问题速查表问题现象可能原因排查思路解决方案导入模型后UV错乱导出时轴向设置不对检查Blender导出参数中的前向轴和后向轴重新导出确保轴向与ArmorPaint的坐标系一致笔刷绘制时出现拉伸UV岛排布过密或拉伸严重在UV模式下检查UV岛的密度和形状回到Blender重新排布UV给主要区域留足空间导出的贴图在引擎里显示异常通道打包方式与引擎不匹配查阅目标引擎的贴图通道规范按引擎要求重新打包通道绘制时软件卡顿贴图分辨率过高或显存不足查看任务管理器的显存占用降低贴图分辨率或升级显卡图层遮罩失效遮罩的混合模式设置错误检查遮罩图层的混合模式和不透明度确保遮罩为白色显示、黑色隐藏粒子笔刷效果不自然粒子参数设置不当调整Count、Radius、Scale参数从小参数开始逐步调整避免一次性设置过大6.2 性能优化的几个实用技巧ArmorPaint在绘制高分辨率贴图的时候对显卡要求比较高。如果你的机器配置一般可以试试这几个优化方法。第一绘制阶段用2K分辨率导出的时候再提升到4K。第二关闭实时预览中的抗锯齿和阴影减少GPU负担。第三把不活跃的图层隐藏起来减少实时计算量。第四如果模型面数特别高可以在Blender里先做一个低模版本用于绘制最后再把贴图应用到高模上。实操心得我在用一台老笔记本做项目的时候发现把ArmorPaint的窗口分辨率调低比如从1080p调到720p能明显提升绘制流畅度。虽然界面看起来糊一点但笔刷的响应速度快了很多。6.3 和商业软件的实际对比感受我用过Substance Painter也用过Quixel Mixer最后回到ArmorPaint的原因其实很简单它够轻。Substance Painter的功能确实强大但它的启动速度、资源占用、学习曲线都让我觉得“重”。ArmorPaint打开就能画画完就能导整个流程没有太多冗余的步骤。当然ArmorPaint的短板也很明显。它的笔刷引擎没有Substance那么精细程序化材质库没有Quixel那么丰富团队协作功能基本没有。但对于个人开发者和小团队来说这些短板在实际项目中往往不是致命问题。你真正需要的是一个能稳定输出合格贴图的工具而不是一个功能列表长得像说明书一样的软件。7. 一些关于开源工具的个人体会ArmorPaint的源码在GitHub上是公开的这意味着如果你有C和OpenGL的基础你可以自己改代码、加功能、修bug。我试过编译它的源码在Ubuntu下大概花了半个小时配置环境编译过程还算顺利。Windows下稍微麻烦一点主要是Visual Studio的版本和CMake的配置需要对齐。开源工具的一个好处是你不用担心授权问题。你可以把它用在商业项目里不用付额外的费用也不用担心哪天突然被断供。对于独立开发者来说这种确定性其实挺重要的。另一个好处是社区。ArmorPaint的社区不算大但活跃度还可以。GitHub上的issue响应速度不算快但开发者确实在持续更新。论坛里也有一些用户分享的笔刷预设和材质模板虽然数量不多但质量参差不齐需要自己筛选。注意开源不等于免费劳动。如果你用ArmorPaint做出了商业项目有条件的话建议支持一下开发者买一份官方编译版或者捐点钱。开源项目的可持续发展靠的是社区的共同维护。最后再分享一个小技巧ArmorPaint的配置文件是纯文本格式的你可以直接编辑它来修改默认参数。比如把默认贴图分辨率从2K改成4K把默认笔刷大小调大一点把常用的HDRI环境加到快捷列表里。这些改动虽然小但每次新建项目的时候能省下不少调整的时间。