1. 从零拆解一个 AAA 武士角色的 PBR 纹理工程
做角色纹理这行十来年,我经手的项目从手游低模到 3A 级写实角色都有。每次有人问我“Substance Painter 到底怎么做出 AAA 级别的武士角色纹理”,我都不会直接甩一堆参数过去,因为真正决定成品上限的,从来不是某个笔刷或者某张素材,而是你对PBR 工作流的整体理解和对材质逻辑的拆解能力。这篇内容就是把我自己做过的一个完整武士角色纹理项目从头到尾拆开讲,包括思路、选型、实操、踩坑,尽量让刚接触 SP 的朋友也能照着走一遍,有经验的老手也能从里面挑到几个能直接用的技巧。
先说清楚这个项目是什么:一个写实风格的 AAA 武士角色,装备包含甲胄、兜、面颊、刀、绑绳、皮革内衬、布料衬里等,全部用Substance Painter完成纹理绘制,走标准PBR(Physically Based Rendering)金属度/粗糙度工作流,最终输出给引擎(Unreal 或 Unity 都适用)。它能解决的核心问题是:如何把高模烘焙出来的法线、AO、曲率等信息,转化成一套物理正确、层次丰富、经得起特写镜头考验的纹理贴图。适合谁看?正在学 SP 但不知道怎么做出“高级感”的初中级纹理师,以及想系统梳理 PBR 流程的角色美术。
我见过太多人卡在同一个地方:模型做得不错,一上材质就“塑料感”扑面而来。问题往往不在软件操作,而在于没有理解每种材质在真实世界里是怎么和光互动的。所以下面我会把“为什么这么做”讲透,而不是只给步骤。
2. 项目整体设计与 PBR 工作流思路拆解
2.1 为什么武士角色是检验 PBR 功底的试金石
武士这个题材对纹理师来说是个“全能考题”。它同时包含了几大类物理属性差异极大的材质:金属(甲片、刀身)、非金属但高反射的漆面(部分甲胄上的涂装)、粗糙的织物(衬里、绑带)、有机的皮革(护手、内衬)、以及氧化和磨损带来的混合状态。一个角色身上要同时处理这么多材质,还要让它们在同一个光照环境下看起来和谐统一,这就逼着你必须真正理解金属度(Metallic)和粗糙度(Roughness)这两个核心通道的物理含义。
举个最典型的例子:很多新手会把所有“看起来亮”的东西都往金属度上拉,结果布料也变成金属,整个角色像镀了层锡纸。真实世界里,金属的反射是带颜色的(比如金反射偏黄、铜偏红),而非金属的高光反射基本是白色的,且反射强度低得多。武士甲片如果是铁质,Metallic 给 1,Roughness 根据打磨程度给 0.2 到 0.5;而绑绳是织物,Metallic 必须是 0,靠 Roughness 和法线细节来表现质感。这个区分如果搞错,后面画得再细也白搭。
2.2 金属度/粗糙度工作流 vs 高光/光泽度工作流
PBR 有两大流派:Metallic/Roughness和Specular/Glossiness。我这个项目选的是前者,原因很实际——它是目前主流引擎和 SP 的默认标准,跨软件兼容性最好,贴图数量也更省(少一张高光贴图)。Specular 工作流在某些老管线里还有用,但新项目基本不用考虑了。
选 Metallic/Roughness 的另一个关键理由是:它的物理逻辑更清晰。金属度基本是个“非黑即白”的通道(0 或 1,过渡区极少),你只需要判断“这是不是金属”,剩下的质感全靠粗糙度来控制。这种二值化的思路让材质管理变得简单,也更容易在团队协作中统一标准。我个人的习惯是:先把所有材质的金属度通道铺完,确认没有逻辑错误,再统一去调粗糙度,这样效率最高。
2.3 贴图分辨率与 UV 密度的取舍
AAA 角色纹理通常用 4K(4096×4096)贴图,但这不是无脑选的。核心判断依据是UV 密度——也就是模型表面每单位面积分到多少像素。武士角色的甲片、面部这些需要特写的地方,UV 密度要高;而像刀鞘背面、内衬这些不常露出的区域,可以适当降低。
我的做法是:把整个角色按重要程度分成三档。面部和主甲片用 4K 单独一套 UV(UDIM 分块),次要装备用 2K,隐藏区域合并到 1K。这样既保证了特写质量,又控制了显存占用。这里有个经验值:如果角色在游戏里最近能看到 0.5 米距离,那面部区域的 UV 密度至少要达到 1024 像素/米,否则毛孔和划痕会糊成一片。
提示:UV 接缝尽量藏在结构转折处或视觉死角,比如甲片边缘、绑带下方。接缝放在大平面中间,后期怎么修都别扭。
3. 核心细节解析与实操要点
3.1 烘焙前的模型与 UV 准备
纹理质量的上限在烘焙那一刻就定死了。我见过太多人拿着有问题的低模去烘焙,出来的法线全是黑边和接缝错误,然后在 SP 里拼命修,纯属浪费时间。烘焙前必须确认三件事:低模的法线方向正确、高低模匹配良好、UV 没有重叠和翻转。
具体操作上,低模的硬边要加够倒角(通常 1-2 段),软边要平滑组正确。高低模的包裹(Cage)要包住高模所有细节,但也不能太远,否则会引入投影错误。我一般用 SP 自带的烘焙器或者 Marmoset Toolbag 来烘,后者对笼子偏移的控制更直观。烘焙输出的核心贴图包括:Normal、AO、Curvature、Position、Thickness。其中 Curvature 是我用得最多的——它能自动识别模型的凸起和凹陷,是后续做边缘磨损和缝隙积灰的基础。
3.2 智能材质与遮罩的搭建逻辑
SP 最强大的地方在于智能材质(Smart Material)和智能遮罩(Smart Mask)的组合。但我要泼盆冷水:直接套用网上下的智能材质,出来的东西永远“差点意思”,因为它们是通用逻辑,不是为你的模型定制的。
我的做法是自建一套基础材质库,每个材质只负责一种物理状态。比如“铁-基础”“铁-边缘磨损”“铁-锈蚀”“皮革-基础”“皮革-磨损”分开做,然后用遮罩把它们叠起来。遮罩的生成主要靠Curvature + AO + 手绘三层。Curvature 抓边缘,AO 抓缝隙,手绘补那些程序化抓不到的地方(比如刀砍痕迹、特定方向的划痕)。这个“程序化打底 + 手绘精修”的思路,是做出 AAA 质感的关键。
3.3 各材质通道的绘制要点
金属甲片:基础色偏深灰,Metallic=1,Roughness 在 0.25-0.45 之间波动。关键是让粗糙度有变化——打磨过的地方更光滑,氧化和积灰的地方更粗糙。用 Curvature 遮罩在边缘加亮色(模拟金属磨出的高光),用 AO 遮罩在缝隙加暗色和锈迹。
刀身:这是全角色最讲究的部分。刀刃要做出“镜面 + 细微划痕”的层次。我的做法是 Roughness 压到 0.1 以下做镜面,然后叠一层极细的划痕(用 SP 的 Scratch 生成器,方向沿刀刃走向),划痕处 Roughness 提到 0.3。刀身和刀柄连接处要有明显的使用痕迹。
皮革与织物:Metallic=0,靠法线贴图表现纹理。皮革的 Roughness 在 0.5-0.7,织物在 0.7-0.9。这里有个技巧:织物的法线不要用太规则的图案,否则会有“贴图感”,要叠加噪波打散。
绑绳:细长的结构最容易糊。我会单独给绑绳分一块 UV,保证足够分辨率,然后用法线表现编织纹理,Roughness 给 0.8 左右。
3.4 颜色管理与导出设置
这一步最容易被忽略,但直接影响最终效果。SP 里要确认项目用的是sRGB还是Linear色彩空间,导出时按引擎要求选择。给 Unreal 的话,BaseColor 和 Emissive 导出 sRGB,Normal、Roughness、Metallic、AO 导出 Linear(非色彩数据)。导出预设我一般用Unreal Engine 4 (Packed)或Unity Standard Metallic,它会自动把 Roughness、Metallic、AO 打包到不同通道,省显存。
注意:导出前一定要在 SP 里用不同的环境光(HDRI)检查一遍。我习惯至少看三种光照:中性棚拍光、暖色夕阳、冷色月光。如果三种光下材质都成立,才算过关。
4. 完整实操流程与关键环节实现
4.1 项目初始化与贴图集规划
打开 SP,新建项目,导入低模。这里第一个决策是贴图集(Texture Set)怎么分。我的方案是按材质区域分:面部+头部甲胄一套、躯干甲片一套、手臂+护手一套、腿部一套、刀一套、布料内衬一套。每套独立烘焙、独立绘制,最后在引擎里合并。
为什么这么分?因为不同区域的材质逻辑差异大,混在一起遮罩会互相干扰。而且分开后每套可以用不同的分辨率,灵活控制性能。代价是贴图数量变多,但对于 AAA 角色来说,这点开销是值得的。
导入时记得勾选"Use UV Tile workflow"如果你用了 UDIM。烘焙参数里,AO 的射线距离(Ray Distance)要按模型尺度调,一般 0.5-2 厘米,太大会把不该遮的地方遮住。
4.2 基础材质铺设与遮罩生成
烘焙完成后,先别急着画细节。第一步是铺基础材质,把每个区域的“底色”定下来。我会给每个贴图集建一个填充层,设好基础色、Metallic、Roughness,然后开始加遮罩。
遮罩的生成顺序很重要:先加Curvature(抓边缘),再加AO(抓缝隙),最后手绘补漏。Curvature 的对比度要调,默认值往往太强,边缘会过曝。我一般把 Curvature 的 Balance 调到 0.5 左右,让边缘过渡自然。
这里分享一个我常用的技巧:用"Paint" 层 + "Geometry Mask"来快速区分不同部件。比如甲片和绑绳在同一个贴图集里,可以用 Geometry Mask 按材质 ID 快速选中,避免手绘遮罩的误差。
4.3 磨损与做旧的分层处理
AAA 角色的灵魂在“故事感”,而故事感来自磨损。我的磨损分三层做:
第一层是全局微磨损,用 Curvature 遮罩在所有边缘加一层浅色,Roughness 略微降低,模拟长期使用磨出的光泽。强度要克制,10%-20% 就够了。
第二层是重点磨损,手绘在刀经常摩擦的位置(比如刀鞘口、护手内侧)、甲片碰撞的位置。这些地方要露出底层金属色,甚至做出小凹坑。
第三层是环境做旧,比如泥点、血迹、烟熏。这些用 SP 的粒子笔刷或者贴花(Decal)来做,注意方向要符合重力逻辑——泥点往下流,烟熏往上飘。
每一层都要单独建文件夹,方便后期调整。我习惯给每层命名清楚,比如 "Edge_Wear_Global"、"Edge_Wear_Hand_Painted",这样改起来一目了然。
4.4 法线细节与高度信息的补充
烘焙出来的法线只包含大结构,微观细节(比如金属的锤打痕迹、皮革的纹理、织物的编织)需要额外补。SP 里可以用Normal 通道 + 笔刷来加,也可以用Fill 层 + 程序化纹理来铺。
我的做法是:金属用锤打纹理(Hammered)叠一层,强度 0.1-0.2;皮革用细胞噪波(Cell Noise)做纹理;织物用编织图案。这些细节的法线强度不能太高,否则在引擎里会显得“脏”。一般 Normal 强度控制在 0.3-0.5 之间。
高度信息(Height)主要用来做后续的曲率计算和引擎里的视差效果。SP 里画的高度会自动影响 Curvature,所以画磨损的时候顺便就把高度做了。
4.5 导出与引擎验证
导出前,先在 SP 里用"Export Textures"功能,选好预设。我一般导出三套:一套给 Unreal(Packed),一套给 Unity,一套原始通道(备用)。导出后立刻导入引擎验证,重点看三件事:法线方向对不对(有没有反)、粗糙度范围合不合理、金属度有没有误判。
在引擎里我会搭一个标准的三点光照场景,把角色放进去转一圈看。如果发现某个角度材质“崩了”,大概率是法线或者粗糙度的问题,回 SP 修。这个“导出-验证-回修”的循环,一个角色我通常要走三到五遍。
5. 常见问题与排查技巧实录
5.1 烘焙黑边与接缝错误的处理
烘焙黑边是最常见的问题,根源通常是低模的硬边没加倒角,或者高低模距离太远。解决办法:给硬边加 1-2 段倒角,调整 Cage 的偏移距离。如果已经烘了,可以在 SP 里用"Clone" 笔刷手动修,但这是下策,能重烘就重烘。
接缝错误一般是 UV 接缝处法线不连续导致的。可以在烘焙时开启"Average Normals",或者在 SP 里用"Projection" 笔刷跨接缝修。我的经验是:接缝尽量藏在结构转折处,能省掉 80% 的修接缝工作。
5.2 材质“塑料感”的成因与破解
塑料感的本质是粗糙度太均匀、金属度判断错误、或者法线细节不足。破解方法:给粗糙度加噪波打散,让它在合理范围内波动;检查金属度是不是该给 0 的给了 1;补足微观法线细节。我还会在 BaseColor 里加一点点色相变化,真实材质很少有纯色的。
5.3 贴图在不同光照下“崩坏”的排查
如果材质在某个光照下突然变得很怪,通常是这三个原因:法线贴图的方向错了(绿通道反转)、粗糙度范围超出了物理合理值、或者 BaseColor 太饱和。排查顺序:先看法线,再看粗糙度,最后调颜色。我习惯在 SP 里挂一个纯中性 HDRI 做基准,所有调整都在这个基准下做,然后再换其他光照验证。
5.4 常见问题速查表
| 问题现象 | 可能原因 | 排查与解决 |
|---|---|---|
| 边缘出现黑边 | 硬边无倒角/笼子偏移过大 | 加倒角,调 Cage 距离,重烘 |
| 材质像塑料 | 粗糙度太均匀/金属度错误 | 加噪波打散粗糙度,检查金属度 |
| 接缝处法线断裂 | UV 接缝法线不连续 | 开启 Average Normals,或跨接缝修 |
| 某光照下材质崩坏 | 法线方向错/粗糙度超范围 | 检查绿通道,校准粗糙度范围 |
| 细节糊成一片 | UV 密度不足 | 提高分辨率或重新分 UV |
| 金属反射发白 | 金属度给了非金属 | 确认金属区域 Metallic=1 |
| 织物有贴图感 | 法线图案太规则 | 叠加噪波打散 |
| 导出后颜色偏暗 | 色彩空间错误 | 确认 sRGB/Linear 设置 |
5.5 我踩过的几个坑
第一个坑是过度依赖智能材质。早期我总想找个“万能武士材质”一键套用,结果每次都不满意。后来才明白,智能材质只是起点,真正的功夫在遮罩和手绘。
第二个坑是忽略色彩管理。有次导出的贴图在引擎里整体偏暗,查了半天才发现是 sRGB 和 Linear 搞混了。从那以后我养成了导出前必查色彩空间的习惯。
第三个坑是UV 密度分配不均。有次面部和背部用了同一套 UV,结果面部特写糊得没法看。后来学会了按重要程度分档,这个问题再没出现过。
第四个坑是磨损做过头。新手容易觉得“越旧越高级”,结果整个角色像从垃圾堆里捡出来的。磨损要有主次,重点区域做足,其他区域克制,这样才有节奏感。
6. 提升质感的高级技巧与个人经验
6.1 用锚点(Anchor)实现材质联动
SP 的Anchor Point功能是进阶必备。它能让一个图层的遮罩信息传递给另一个图层,实现材质之间的联动。比如我用 Curvature 生成边缘遮罩后,用 Anchor 把它传给锈迹层,这样锈迹会自动出现在边缘,不用重复做遮罩。这个技巧能大幅提升效率,也让材质逻辑更统一。
6.2 程序化纹理与手绘的平衡
纯程序化出来的东西太“干净”,纯手绘又太慢。我的平衡点是:70% 程序化打底 + 30% 手绘精修。程序化负责大面积的均匀质感,手绘负责那些有故事性的细节(比如刀上的一道深痕、甲片上的一块特殊污渍)。这个比例是我试了很多次才找到的,既能保证效率,又能保证质感。
6.3 参考图的使用方法
做写实材质,参考图是命根子。但很多人参考图用得不对——只看颜色,不看物理属性。我的方法是:找参考图时,同时找“干净状态”和“使用后状态”的对比,观察材质是怎么从新变旧的。还要注意光照条件,尽量找中性光下的参考,避免被环境色误导。
6.4 团队协作中的命名与版本管理
如果是团队项目,命名规范极其重要。我的习惯是:图层名用 "材质_状态_位置" 的格式,比如 "Iron_EdgeWear_Shoulder"。贴图集命名用 "角色名_部位_分辨率",比如 "Samurai_Torso_4K"。版本管理上,每次大改存一个新版本,别覆盖,否则想回退的时候哭都来不及。
6.5 性能优化:贴图压缩与 LOD
最后说个容易被忽略的点:纹理做完不是终点,还要考虑运行时性能。引擎里贴图要压缩,不同平台用不同的压缩格式(PC 用 BC,移动端用 ASTC)。LOD 切换时,低级别 LOD 可以用更低分辨率的贴图。这些设置虽然不归纹理师管,但了解它们能帮你做出更合理的技术决策,比如哪些区域可以降分辨率。
我个人在实际操作中的体会是,PBR 纹理这活儿,软件操作只占三成,剩下七成是对真实世界的观察和理解。你得多看、多摸、多想——这块铁为什么这里亮那里暗,这块布为什么这里起毛那里平滑。把这些想明白了,SP 里的操作自然就顺了。最后再分享一个小技巧:每次做完一个角色,把它放在引擎里用最普通的光照看一遍,如果这时候还好看,那才是真的好看。