1. 为什么我最终把材质绘制主力工具换成了ArmorPaint
第一次接触ArmorPaint是在做完一个硬表面机甲模型之后。模型在Blender里雕得挺满意,拓扑也重新刷过,结果一到贴图环节就卡住了——Blender自带的纹理绘制功能做做简单色块还行,真要在模型上画磨损、掉漆、边缘积灰这些细节,笔刷延迟和图层管理的短板就全暴露出来了。当时也试过几款主流的材质绘制软件,功能确实强,但要么是订阅制钱包受不了,要么是对显卡和内存的要求高得离谱,我那台老笔记本跑起来风扇跟起飞一样。
后来在一个做独立游戏的朋友推荐下试了ArmorPaint,第一感觉就是"轻"。安装包不大,启动快,界面干净,核心的PBR材质绘制流程一个不少。最关键的是它脱胎于Blender生态,很多操作逻辑和Blender是相通的,比如视图导航、笔刷的压感响应、图层混合模式这些,上手几乎没有学习成本。用了一段时间之后,我基本把日常的材质绘制工作都迁移到了ArmorPaint上,只有在需要极其复杂的程序化材质节点时才回Blender配合。
这篇内容我想把ArmorPaint这套工具从选型理由、核心原理、实操流程到踩坑经验完整地梳理一遍。适合正在做游戏资产、独立游戏开发、3D打印手办上色预览,或者单纯想给Blender模型做一套像样PBR贴图的朋友。不管你是刚接触材质绘制的新手,还是从其他软件迁移过来的老手,应该都能从中找到可以直接抄作业的部分。
2. ArmorPaint到底是个什么工具,它解决了哪些实际问题
2.1 从Blender纹理绘制到独立材质工具的演进逻辑
要理解ArmorPaint的定位,得先搞清楚Blender自带的纹理绘制为什么在复杂项目里不够用。Blender的Texture Paint模式本质上是把贴图直接画在模型的UV上,它的优势是零切换成本,模型和贴图在同一个文件里管理。但问题也很明显:第一,笔刷引擎的性能瓶颈,当模型面数超过几十万、贴图分辨率到4K的时候,笔刷延迟会变得非常明显,画一笔要等半秒才看到结果,这种反馈延迟对绘制体验是致命的;第二,图层系统太简陋,Blender的纹理绘制槽本质上还是图像层叠加,没有真正意义上的图层混合模式、图层蒙版、调整图层这些概念,想做非破坏性的材质迭代非常困难;第三,缺少专门针对PBR材质的通道管理,金属度、粗糙度、法线这些通道要手动切换图像槽来画,效率很低。
ArmorPaint的思路是把材质绘制这件事从建模软件里彻底剥离出来,做成一个专门的工具。它的核心工作流是:在Blender里完成建模和UV展开,导出成通用的3D格式(通常是glTF或OBJ),然后导入ArmorPaint进行材质绘制,画完之后导出贴图集,再回到Blender或者游戏引擎里挂载。这个流程看起来多了一步导出导入,但实际上它带来的收益远大于这点麻烦。
ArmorPaint最核心的几个能力:基于物理的渲染预览(PBR Viewport),你在画的时候看到的就是最终引擎里的效果;完整的图层系统,支持混合模式、蒙版、程序化纹理节点;多通道同时绘制,可以一次性把颜色、粗糙度、金属度、法线等通道都画出来;还有基于GPU的笔刷引擎,在4K贴图下依然能保持流畅的绘制响应。
2.2 和主流材质绘制工具的横向对比
市面上做材质绘制的工具不少,我把自己实际用过的几款和ArmorPaint放在一起做个对比,方便你判断它是否适合你的工作流。
| 对比维度 | ArmorPaint | Blender纹理绘制 | 主流订阅制材质软件 | 程序化材质节点软件 |
|---|---|---|---|---|
| 授权方式 | 开源/买断 | 随Blender免费 | 订阅制 | 订阅制/买断 |
| 硬件门槛 | 较低,集显可跑 | 低 | 较高,需独显 | 中等 |
| 图层系统 | 完整,支持混合模式 | 基础 | 非常完整 | 以节点为主 |
| PBR通道绘制 | 原生支持 | 需手动切换 | 原生支持 | 原生支持 |
| 程序化纹理 | 支持节点 | 支持节点 | 支持 | 核心优势 |
| 学习曲线 | 平缓,Blender用户友好 | 平缓 | 中等 | 陡峭 |
| 导出兼容性 | glTF/OBJ/FBX | 原生 | 全格式 | 全格式 |
从这张表能看出来,ArmorPaint的定位很清晰:它不追求功能上的大而全,而是在"够用的功能+低门槛+低硬件要求"这个组合上做到了很好的平衡。对于独立开发者、学生、业余爱好者来说,这个平衡点非常有吸引力。当然如果你在大型工作室做3A级资产,需要极其复杂的程序化材质和团队协作流程,那专业订阅制工具仍然是更合适的选择。工具没有绝对的好坏,只有适不适合当前的项目和预算。
2.3 谁最适合用ArmorPaint
根据我这段时间的使用和跟其他用户的交流,以下几类人用ArmorPaint的收益最明显。第一类是Blender的重度用户,尤其是做游戏资产和独立游戏的,因为操作逻辑相通,迁移成本极低。第二类是硬件配置一般的创作者,ArmorPaint对显卡的要求比同类工具低不少,我试过在一台只有集成显卡的轻薄本上跑,2K贴图下依然能正常绘制,只是预览帧率会降一些。第三类是预算有限的学生和个人开发者,ArmorPaint的买断价格相比订阅制工具便宜很多,而且有开源版本可以自行编译。第四类是做3D打印手办上色预览的,ArmorPaint的PBR预览能很直观地看到不同材质在光照下的效果,比在建模软件里猜要靠谱得多。
不太适合的情况也有:如果你需要和团队共享材质库、需要极其复杂的程序化材质生成、或者需要和某些特定引擎做深度集成,那可能专业工具更合适。但对于绝大多数个人项目和小团队项目,ArmorPaint完全够用。
3. 核心原理拆解:ArmorPaint的材质绘制是怎么工作的
3.1 PBR材质通道的底层逻辑
要理解ArmorPaint的工作方式,得先搞清楚PBR材质到底是怎么回事。PBR全称是基于物理的渲染,它的核心思想是用一组物理参数来描述材质表面和光线的交互方式,而不是像传统渲染那样靠经验调参数。在ArmorPaint里,你主要打交道的通道有这几个:基础色(Base Color),决定材质本身的颜色;金属度(Metallic),决定这个表面是金属还是非金属;粗糙度(Roughness),决定表面是光滑还是粗糙;法线(Normal),用来模拟表面的凹凸细节;还有高度(Height)和环境光遮蔽(AO)这些辅助通道。
这些通道不是孤立的,它们共同决定了材质在光照下的最终表现。举个例子,同样是画一块生锈的铁,基础色通道要画铁锈的红棕色,金属度通道要在生锈区域降低金属度(因为铁锈是非金属),粗糙度通道要在生锈区域提高粗糙度(因为铁锈表面粗糙),法线通道要加上锈蚀的凹凸细节。这四个通道配合起来,才能让渲染器正确计算出"这是一块生锈的铁"。
ArmorPaint的聪明之处在于,它让你在绘制的时候可以同时操作多个通道。比如你用一个"铁锈"笔刷,它可能同时修改基础色、金属度、粗糙度和法线四个通道,你画一笔下去,四个通道同时更新,预览窗口里立刻就能看到正确的PBR效果。这比在Blender里手动切换图像槽、一个通道一个通道地画要高效太多了。
3.2 图层系统与混合模式的工作机制
ArmorPaint的图层系统和Photoshop那套非常像,但它是针对3D材质绘制做了专门优化的。每个图层可以理解成一层"透明的材质薄膜",你在这层上画的内容会按照指定的混合模式叠加到下面的图层上。混合模式决定了这层内容怎么和下层内容结合,常用的有正常(Normal)、正片叠底(Multiply)、叠加(Overlay)、屏幕(Screen)等等。
图层蒙版是另一个核心概念。蒙版决定了图层上哪些区域可见、哪些区域被隐藏。你可以用笔刷在蒙版上画黑白灰来控制图层的显示范围,也可以用程序化纹理(比如噪波、渐变)来生成蒙版。这个机制在做磨损、掉漆、积灰这类效果时特别有用——你可以先建一个"铁锈"图层,然后用蒙版控制只在模型的边缘和凹陷处显示铁锈,这样出来的效果就非常自然。
ArmorPaint还支持图层组和调整图层。图层组可以把多个图层打包管理,调整图层可以对下面所有图层统一做色相、饱和度、亮度等调整,而不需要逐个图层去改。这套系统让材质的迭代变得非常灵活,你可以随时回头调整某个图层的参数,整个材质会实时更新。
3.3 GPU笔刷引擎的性能优化思路
ArmorPaint能在低配硬件上流畅运行,核心在于它的笔刷引擎是围绕GPU设计的。传统的纹理绘制软件很多是在CPU上做笔刷计算,然后把结果上传到GPU显示,这个来回传输的过程在4K贴图下会成为瓶颈。ArmorPaint把笔刷的计算和绘制都放在GPU上完成,贴图数据常驻显存,笔刷操作直接在显存里进行,省去了CPU和GPU之间的数据传输开销。
这个设计带来的直接好处是笔刷延迟极低。我在4K贴图上用大尺寸笔刷快速涂抹,基本感觉不到延迟,笔触跟手的感觉很接近在纸上画画。当然这个性能也取决于你的显卡显存大小,4K贴图加上多个图层,显存占用会比较高,8GB显存的显卡在复杂场景下会比较从容,4GB显存则需要控制图层数量和贴图分辨率。
还有一个细节是ArmorPaint的笔刷支持压感。如果你有数位板,笔刷的力度、大小、流量都可以跟压感联动,画出来的笔触有粗细浓淡的变化,比鼠标画要自然得多。这个功能在画手绘风格的材质时特别重要。
4. 完整实操流程:从Blender模型到成品贴图
4.1 在Blender里做好导出前的准备工作
ArmorPaint的绘制质量很大程度上取决于导入的模型质量,所以在Blender里做好准备工作非常关键。第一步是确认模型的UV已经展开,而且UV岛之间留有足够的间距。UV间距太窄的话,在ArmorPaint里绘制时笔刷容易溢出到相邻的UV岛,导致贴图出现接缝或者颜色串位。我的经验是UV岛之间至少留4到8个像素的间距,如果是4K贴图,间距可以适当放大到16像素。
第二步是检查模型的法线方向。ArmorPaint依赖正确的法线来计算光照和笔刷投射,如果模型有翻转的法线,绘制时会出现奇怪的黑块或者笔刷投射错误。在Blender里选中模型,进入编辑模式,用Shift+N重新计算外侧法线,确保所有面都朝外。
第三步是考虑模型的细分程度。ArmorPaint是在模型表面上直接绘制的,模型的面数决定了绘制的精度。如果模型面数太低,笔刷投射到表面上会出现明显的棱角。对于需要精细绘制的区域,可以在Blender里先做一次细分再导出,或者在ArmorPaint里使用它的细分功能。但面数也不是越高越好,太高的面数会拖慢导入和绘制速度,一般控制在50万面以内比较合适。
导出格式方面,我推荐用glTF 2.0,因为它对PBR材质的支持最完整,导入ArmorPaint后通道对应关系最准确。OBJ格式也可以用,但它对PBR通道的支持不如glTF,导入后可能需要手动指定通道。FBX格式ArmorPaint也支持,但glTF在跨软件兼容性上更好一些。
4.2 导入ArmorPaint并配置项目参数
打开ArmorPaint后,新建项目,把导出的模型文件拖进去或者通过菜单导入。导入时会弹出一个配置窗口,这里有几个关键参数需要设置。贴图分辨率是最重要的一个,它决定了最终输出贴图的清晰度。我的建议是根据模型的用途来定:如果是游戏内资产,2K通常够用;如果是影视级或者需要特写展示的,用4K;如果是移动端或者网页展示,1K甚至512都可能够。分辨率越高,显存占用和绘制压力越大,需要根据自己的硬件来权衡。
UV缩放和偏移参数一般保持默认就行,除非你的模型UV有特殊设置。法线贴图的格式要注意,ArmorPaint默认使用OpenGL格式的法线贴图(绿色通道朝上),如果你后续要导入的引擎使用的是DirectX格式(绿色通道朝下),需要在导出时勾选翻转绿色通道的选项。这个细节很容易被忽略,但搞错了会导致法线效果完全相反,凹凸感变成凹陷感。
导入完成后,先别急着画,花几分钟检查一下模型的显示是否正常。旋转视图看看有没有黑面、有没有UV接缝处的异常。如果发现模型有破面或者法线问题,回Blender修好再重新导入,不要在ArmorPaint里硬画,后面会越画越难受。
4.3 搭建基础材质层
正式绘制之前,先搭一个基础材质层。这一步的目的是给模型一个统一的底色和基础质感,后续的细节都叠加在这个基础之上。在ArmorPaint里新建一个填充图层,选择基础色、金属度、粗糙度的初始值。比如你要做一个金属盔甲,基础色可以设成深灰色,金属度拉到1,粗糙度设成0.3左右。
基础层建好之后,建议先建一个图层组把它包起来,命名为"基础材质"。这样做的好处是后续添加的细节图层可以放在单独的组里,图层结构清晰,调整起来方便。图层命名也很重要,不要用"图层1""图层2"这种默认名字,养成用有意义的名字命名的习惯,比如"基础金属""边缘磨损""表面污渍"等等,项目复杂之后你会感谢自己的。
基础层之上,我通常会再加一个"环境光遮蔽"图层。ArmorPaint可以根据模型的几何形状自动生成AO贴图,把这个AO贴图作为一个正片叠底图层叠在基础材质上,能立刻让模型的凹陷处变暗、凸起处变亮,立体感一下子就出来了。这个技巧在做硬表面模型时特别有效。
4.4 绘制磨损、掉漆与污渍细节
细节绘制是ArmorPaint真正发挥价值的地方。以金属盔甲的边缘磨损为例,我的操作流程是这样的:新建一个图层,命名为"边缘磨损",混合模式设为正常。然后选择ArmorPaint自带的金属笔刷或者自己调一个笔刷,基础色设成亮银色(模拟磨损后露出的底层金属),金属度拉到1,粗糙度降低到0.1左右(磨损处通常更光滑)。
接下来是关键的一步:用蒙版控制磨损的位置。在图层上添加一个蒙版,然后用一个带噪波的笔刷在蒙版上绘制。蒙版上白色的区域会显示磨损,黑色的区域会隐藏。我会重点在模型的边缘、转角、经常摩擦的部位画白色,让磨损集中在这些合理的位置。ArmorPaint的蒙版支持程序化纹理,你也可以直接用一个噪波纹理作为蒙版,然后调整噪波的缩放和对比度来控制磨损的破碎程度。
污渍和积灰的做法类似,但参数不同。污渍通常用正片叠底或者叠加模式,颜色偏暗偏黄,粗糙度调高(污渍表面粗糙),金属度降低。积灰可以用一个浅灰色的图层,混合模式用屏幕或者正常,粗糙度拉到最高,让灰尘区域完全不反光。这些细节图层叠加上去之后,模型的真实感会有质的提升。
4.5 导出贴图并回挂到Blender或游戏引擎
画完之后就是导出环节。ArmorPaint支持导出多种贴图格式和通道打包方式。最常见的是导出成独立的贴图文件:基础色、金属度、粗糙度、法线、AO各一张。但更高效的做法是使用通道打包,把金属度和粗糙度打包到一张贴图的不同通道里(通常是金属度放蓝色通道,粗糙度放绿色通道),这样在引擎里只需要一张贴图就能同时读取两个通道的信息,节省显存和带宽。
导出格式方面,基础色和金属度粗糙度贴图用PNG或者TGA都行,法线贴图建议用PNG以保证精度。如果引擎支持,也可以导出成EXR格式保留更高的动态范围。导出分辨率要和项目设置一致,不要在这里降采样,否则前面的精细绘制就白费了。
回挂到Blender的流程是:在Blender里给模型新建材质,添加原理化BSDF节点,然后把导出的贴图连接到对应的输入端口。基础色贴图连到基础色,金属度粗糙度贴图需要用分离RGB节点把蓝色通道和绿色通道分开,分别连到金属度和粗糙度。法线贴图需要经过法线贴图节点再连到法线输入。AO贴图可以连到一个混合节点上,和基础色做正片叠底。这一套节点连接搭好之后,模型在Blender里的显示效果应该和ArmorPaint里的预览基本一致。
5. 实操中踩过的坑与常见问题排查
5.1 笔刷投射异常与UV接缝问题
这是新手最容易遇到的问题。表现是笔刷画上去之后,颜色出现在模型上完全不相邻的位置,或者UV接缝处出现明显的颜色断层。原因通常是UV展开有问题,UV岛重叠或者间距太小。排查方法是回到Blender,打开UV编辑器,检查UV岛之间是否有重叠。如果有重叠,需要重新展开UV或者手动调整UV岛的位置。
另一个可能的原因是模型的法线方向不一致。ArmorPaint的笔刷投射依赖法线方向,如果模型上有翻转的法线,笔刷会投射到错误的位置。解决方法是在Blender里重新计算法线,确保所有面都朝外。如果模型是从其他软件导入的,可能需要在Blender里做一次法线统一。
还有一种情况是笔刷的投射模式设置不对。ArmorPaint的笔刷有几种投射模式,比如沿法线投射、沿视图方向投射等。如果选错了模式,笔刷可能会穿透模型投射到背面。在绘制复杂模型时,建议开启背面剔除选项,避免笔刷影响到看不见的面。
5.2 显存不足导致的卡顿与崩溃
ArmorPaint的绘制性能高度依赖显存。当项目变得复杂——贴图分辨率高、图层数量多、每个图层都有大尺寸蒙版——显存占用会迅速上升。一旦显存耗尽,轻则笔刷延迟明显增加,重则软件直接崩溃。我遇到过好几次画到一半突然闪退的情况,损失了不少工作进度。
预防措施有几个。第一,控制贴图分辨率,不要盲目上4K,2K在很多场景下已经足够。第二,合并不必要的图层,把已经确定不再修改的图层合并成一个,减少图层数量。第三,定期保存,ArmorPaint有自动保存功能,但建议还是养成手动Ctrl+S的习惯。第四,如果显存确实紧张,可以关闭实时预览的高质量渲染,降低预览分辨率,等最终导出时再开高质量。
如果已经遇到崩溃,重新打开项目后先检查最近的保存点,看看丢失了多少进度。ArmorPaint的自动保存间隔可以在设置里调整,我一般设成5分钟一次,平衡性能和安全性。
5.3 导出贴图与引擎显示不一致的排查
有时候在ArmorPaint里看着效果很好,导出到引擎里却完全变了个样。最常见的原因是颜色空间设置不一致。ArmorPaint里基础色贴图通常是在sRGB颜色空间下绘制的,而金属度、粗糙度、法线这些通道是线性空间的。如果导出时颜色空间搞混了,基础色会偏暗或者偏亮,金属度和粗糙度会完全错误。
排查方法是检查导出设置里的颜色空间选项,确保基础色和AO贴图标记为sRGB,金属度、粗糙度、法线、高度贴图标记为线性。在Blender里挂载贴图时,也要在图像节点的颜色空间设置里做对应的调整。基础色贴图的颜色空间设为sRGB,其他通道贴图设为非彩色(Non-Color)。
另一个常见问题是法线贴图的绿色通道方向。前面提到过,OpenGL和DirectX格式的法线贴图绿色通道是反的。如果你在ArmorPaint里用的是OpenGL格式,导入到使用DirectX格式的引擎里,法线效果会完全相反。解决方法是在导出时勾选翻转绿色通道,或者在引擎的材质设置里做对应的翻转。
5.4 常见问题速查表
| 问题现象 | 可能原因 | 排查与解决方法 |
|---|---|---|
| 笔刷画到错误位置 | UV重叠或间距不足 | 回Blender检查UV,重新展开或调整间距 |
| 模型上出现黑块 | 法线方向不一致 | 在Blender里重新计算外侧法线 |
| 笔刷穿透到背面 | 投射模式设置错误 | 切换投射模式,开启背面剔除 |
| 绘制时严重卡顿 | 显存不足 | 降低贴图分辨率,合并图层,关闭高质量预览 |
| 导出后颜色偏暗 | 颜色空间设置错误 | 检查导出颜色空间,基础色用sRGB,其他用线性 |
| 法线凹凸感相反 | 绿色通道方向不匹配 | 导出时翻转绿色通道,或引擎里做对应设置 |
| 软件频繁崩溃 | 显存耗尽或驱动问题 | 更新显卡驱动,降低项目复杂度,勤保存 |
| UV接缝处有断层 | UV岛间距不足或笔刷溢出 | 增大UV间距,缩小笔刷尺寸,开启UV边界限制 |
6. 提升效率的进阶技巧与个人心得
6.1 自定义笔刷与材质库的积累
ArmorPaint自带的笔刷和材质已经挺丰富了,但真正让工作效率起飞的是建立自己的笔刷库和材质库。我平时会收集各种纹理素材——金属磨损、混凝土、木纹、布料——把它们导入ArmorPaint做成自定义笔刷。做笔刷的时候注意把基础色、金属度、粗糙度、法线四个通道都配置好,这样一笔画下去四个通道同时更新,效率比单通道绘制高好几倍。
材质库的积累同样重要。每次做完一个项目,把调好的材质预设保存下来,下次遇到类似的材质需求直接调用,微调一下就能用。比如我做科幻题材比较多,就积累了一套"旧化金属""能量管线""磨损塑料"的预设,新项目里直接拖出来用,省去了大量重复调参的时间。
6.2 利用程序化纹理减少手绘工作量
ArmorPaint支持程序化纹理节点,这个功能用好了能大幅减少手绘工作量。比如做大面积的地面材质,完全可以用噪波节点生成基础纹理,再用渐变节点控制不同区域的变化,最后用手绘笔刷在关键位置补充细节。程序化纹理的好处是分辨率无关,你随时可以调整参数重新生成,不用担心贴图放大后模糊。
我常用的一个技巧是用程序化纹理生成蒙版。比如做边缘磨损,与其手动在蒙版上一点点画,不如用一个曲率节点或者AO节点自动生成边缘区域的蒙版,然后在这个基础上用手绘笔刷做局部调整。这样既保证了磨损分布的合理性,又保留了手绘的灵活性。
6.3 项目管理与版本控制的经验
材质绘制是一个反复迭代的过程,版本管理很重要。我的习惯是每完成一个阶段就导出一份贴图存档,命名带上日期和版本号,比如"盔甲_基础色_v03_20240615"。这样如果后面改坏了,可以随时回退到之前的版本。
ArmorPaint的项目文件本身也要定期备份。项目文件里保存了所有图层和笔刷设置,文件大小可能不小,但这是你工作的核心资产,丢了就全没了。我一般会把项目文件放在云盘同步的文件夹里,同时本地保留一份,双保险。
6.4 硬件配置与性能调优建议
如果你打算长期用ArmorPaint做材质绘制,硬件配置上有几个建议。显卡方面,显存越大越好,8GB是舒适线,4GB是及格线。GPU的运算能力影响笔刷响应速度,但显存容量对能否打开复杂项目的影响更大。内存建议16GB起步,32GB更从容,因为ArmorPaint在处理大贴图时也会占用不少系统内存。数位板不是必须的,但有了之后绘制体验会好很多,尤其是画手绘风格材质的时候。
软件设置方面,可以在首选项里调整笔刷的平滑度和压感曲线,找到最适合自己手感的设置。预览窗口的分辨率也可以根据硬件情况调整,硬件好的话开高一点,硬件一般就开低一点,不影响最终导出质量。
6.5 和其他工具的配合工作流
ArmorPaint不是孤立的工具,它需要和建模软件、游戏引擎配合使用。我的典型工作流是:Blender建模和UV展开,ArmorPaint材质绘制,然后根据项目类型决定回挂到Blender做最终渲染还是导入游戏引擎。如果项目需要极其复杂的程序化材质,我会在Blender的着色器节点里做一部分,然后把结果烘焙成贴图导入ArmorPaint继续绘制细节。
还有一个实用的配合方式是用ArmorPaint做材质预览。有时候在Blender里调材质节点,参数改来改去效果不直观,可以把模型导出到ArmorPaint里快速画一版材质,看看在实际光照下的效果,心里有数了再回Blender调节点。这个来回切换的流程虽然多几步操作,但能避免在节点里盲目试参数,总体效率反而更高。
我在实际使用ArmorPaint的这段时间里,最大的体会是它把材质绘制这件事的门槛降到了足够低,同时又保留了专业工作流需要的核心功能。它可能不是功能最强大的那个,但对于大多数个人项目和小团队项目来说,它提供的功能已经绰绰有余。工具的价值不在于功能列表有多长,而在于你能不能用它顺畅地把脑子里的想法变成现实。ArmorPaint在这一点上做得很好。