1. 从一张白模到能进引擎的武士:这套纹理流程到底在解决什么
很多人第一次接触 Substance Painter 做角色纹理,脑子里想的都是“打开软件、拖几个材质球、画两笔就完事”。真上手一个 AAA 级别的武士角色,才发现事情完全不是这么回事。一个完整的武士角色,身上有甲片、皮革束带、布料内衬、金属刀镡、绳索编结、木质刀鞘,甚至还有皮肤和毛发,这些材质在物理世界里的反射率、粗糙度、金属度差异极大。如果只是拿一张贴图糊上去,进引擎一打光,整个角色会像塑料玩具一样扁平,完全没有重量感和年代感。
这篇内容要聊的,就是怎么用 Substance Painter 配合 PBR 工作流,把这样一个高精度武士角色从白模一步步做出可交付的纹理资产。核心关键词是Substance Painter、PBR、纹理、工作流,但我不会只讲软件按钮在哪,而是把整条链路拆开:模型该怎么准备、UV 怎么排、材质怎么分层、遮罩怎么画、导出怎么配、进引擎怎么验证。适合已经会基本操作、但做出来的东西总感觉“差口气”的中级从业者,也适合刚入行想系统理解 PBR 角色纹理全流程的新人。
先说清楚一个前提:PBR 不是某个软件的功能,而是一套基于物理规律的着色约定。它要求你提供的贴图在物理上自洽——金属度要么是 0 要么是 1(中间值只用于过渡区域),粗糙度要符合真实材质的微观表面状态,法线要跟切线空间对得上。Substance Painter 只是帮你把这些通道画出来的工具,真正决定成品质量的是你对材质物理属性的理解。我见过太多人把金属度画成 0.5,结果金属部分既不反射也不漫反射,看起来像脏兮兮的泥巴。这就是没理解 PBR 底层逻辑的典型症状。
所以这篇文章的结构会围绕一条真实的制作链路展开:先讲资产准备阶段那些容易被忽略但致命的细节,再讲分层材质思路,然后是遮罩与细节处理的核心手法,接着是导出配置和引擎验证,最后补充一些我踩过的坑和效率技巧。每一部分都会解释“为什么这么做”,而不是只给步骤。
2. 资产准备:模型与 UV 没弄好,后面全是白费功夫
2.1 高模与低模的匹配度决定了烘焙成败
Substance Painter 的工作起点不是打开软件,而是在建模软件里把高模和低模准备好。武士角色的高模通常来自 ZBrush 雕刻,低模是拓扑后的游戏网格。这两者之间的匹配度直接决定烘焙出来的法线贴图质量。我见过最常见的问题就是低模的轮廓跟高模差太远,比如甲片边缘高模有精细的倒角,低模却是一个直角块面,烘焙时射线打不到对应位置,法线贴图上就会出现黑边或者错位的细节。
具体怎么判断匹配度够不够?我的经验是看低模的剪影能不能撑起高模的形体。武士的肩甲、胸甲这些硬表面部分,低模的转折边要尽量贴合高模的倒角走向。如果高模有 2 毫米的倒角,低模至少要有对应的支撑边,否则烘焙出来的边缘会糊。软性材质比如布料和皮革,低模可以稍微简化,但褶皱的大形体要保留,不然法线贴图会把细节压平。
还有一个容易被忽略的点:高低模的坐标必须完全重合。有些人在 ZBrush 里雕刻时移动过模型位置,导出后忘了对齐,结果烘焙出来的法线全是错的。我通常会在导出前用建模软件的吸附工具把高低模的原点统一,确保两者在世界坐标里严丝合缝。
2.2 UV 排布:不是摊开就行,要按材质和精度需求分区
UV 展开是很多人敷衍了事的环节,但它对最终纹理质量的影响极大。武士角色的 UV 排布要遵循两个原则:按材质分区、按视觉重要性分配精度。
按材质分区的意思是,金属甲片、皮革、布料、皮肤这些不同材质应该尽量放在不同的 UV 象限或区域。这样做的好处是导出贴图后,在引擎里可以针对不同区域设置不同的采样参数,也方便后续修改。如果所有材质混在一起,改一个地方可能影响到其他区域。
按视觉重要性分配精度,指的是角色脸部、胸甲正面、刀柄这些玩家视线停留时间长的区域,UV 要放大,给更多像素密度。背后的甲片、腰带内侧这些不太显眼的地方可以缩小。我一般会把角色正面核心区域的 UV 密度控制在 1024 像素每米以上,次要区域可以降到 512。这样一张 4K 贴图就能把细节集中在最需要的地方。
提示:UV 接缝要尽量藏在结构转折处或者被遮挡的位置。武士的甲片接缝可以藏在甲片交叠的缝隙里,布料的接缝可以放在腋下或背后。接缝放在显眼位置,后期画纹理时很难完全消除痕迹。
2.3 烘焙前的检查清单
在把模型导入 Substance Painter 之前,我会做一轮检查,这个习惯帮我省了很多返工时间。检查项包括:高低模命名是否规范(通常用 _high 和 _low 后缀区分)、低模是否有重叠 UV、法线方向是否统一朝外、模型是否有非流形几何体。非流形几何体在烘焙时会产生奇怪的射线投射结果,导致法线贴图出现黑块。
烘焙参数方面,武士角色我通常用 4K 分辨率,抗锯齿开到 4x 以上,射线距离根据高低模的间隙调整。如果高低模贴得很近,射线距离要调小,否则会打到不该打的地方。匹配方式选“按名称匹配”最稳妥,前提是高低模的命名对应关系正确。
3. 材质分层:像搭积木一样构建武士的每一寸表面
3.1 基础材质层:先定物理属性,再谈颜色
Substance Painter 的图层逻辑跟 Photoshop 类似,但每一层承载的是 PBR 通道信息。我的习惯是先铺基础材质层,把每个区域的金属度、粗糙度、基础色定下来,再去叠加细节。
武士的金属甲片,基础色通常是深灰偏蓝的钢铁色,金属度设为 1,粗糙度在 0.3 到 0.5 之间。这个粗糙度值不是随便填的,它对应的是经过打磨但未抛光的钢铁表面。如果甲片是旧化的,粗糙度要往上调,局部甚至到 0.7 以上,因为锈蚀和磨损会让表面变粗糙。皮革束带的基础色是深棕色,金属度 0,粗糙度 0.6 左右,因为皮革表面有微小的纤维结构,反射比较散射。
这里有个关键点:基础色贴图里不要画光影信息。有些人习惯在基础色里画阴影和高光,这在 PBR 工作流里是错的。光影由引擎的灯光系统计算,你只需要提供材质的固有颜色。如果基础色里带了阴影,进引擎一打光就会脏。
3.2 叠加层与遮罩:让磨损和污渍出现在该出现的地方
基础层铺完后,角色看起来还是很干净、很假。真实的武士装备会有磨损、污渍、边缘掉漆、缝隙积灰。这些效果靠叠加层加遮罩来实现。
以甲片边缘磨损为例:新建一个图层,填充金属底色更亮的钢铁色,粗糙度调低(模拟磨损后更光滑的金属),然后给这个图层加一个遮罩。遮罩用“金属边缘磨损”生成器,调整参数让磨损只出现在甲片的边缘和凸起处。这样做的物理逻辑是:甲片边缘在日常使用中摩擦最多,涂层最先脱落,露出底层金属。
污渍的处理类似。武士在战场上会沾染泥土、血迹、灰尘。我会用“脏旧”生成器配合手绘遮罩,把污渍集中在甲片的下半部分和缝隙处。这里要注意污渍的粗糙度通常比基底材质高,因为泥土和灰尘是粗糙的。如果污渍的粗糙度没调对,看起来会像一层油光发亮的膜,很假。
注意:遮罩的灰度值决定了效果的强度。纯白是完全显示,纯黑是完全隐藏,灰色是半透明。很多人画遮罩时非黑即白,导致磨损效果很生硬。适当用灰色过渡,磨损才会自然。
3.3 不同材质的专属处理思路
武士角色身上的材质种类多,每种的处理重点不一样。
金属甲片的核心是边缘磨损和表面划痕。我会用“金属划痕”生成器加手绘,在甲片正面画一些细长的划痕,粗糙度比周围略低,模拟刀刃划过留下的痕迹。甲片的凹陷处要加积灰,粗糙度拉高,颜色偏暗。
皮革束带的重点是褶皱处的颜色变化。皮革在弯折处颜色会变浅,因为表面涂层被拉伸。我会用曲率遮罩选中褶皱凸起处,叠加一层浅色,同时粗糙度略微降低。皮革边缘的磨损露出底层纤维,颜色偏黄褐,粗糙度很高。
布料内衬的处理相对简单,但要注意布料的编织纹理。Substance Painter 自带的布料生成器可以快速铺出编织感,但要注意缩放比例,太大像麻袋,太小像塑料。我通常会把生成器的缩放调到跟角色比例匹配,然后用遮罩控制只在特定区域显示。
刀鞘如果是木质的,基础色是深棕,粗糙度 0.5 左右,木纹用生成器加手绘。木质表面的划痕比金属浅,颜色偏白,因为木头内部比表面浅。
4. 遮罩与细节:决定成品是“能看”还是“耐看”的分水岭
4.1 生成器遮罩与手绘遮罩的配合逻辑
Substance Painter 的生成器遮罩很强大,但纯靠生成器做出来的东西有一股“软件味”,因为生成器的算法是均匀的、随机的,而真实的磨损是有逻辑的。我的做法是生成器打底,手绘修正。
举个例子:甲片的边缘磨损,生成器会根据曲率自动在凸起处生成磨损。但真实的甲片,磨损不会均匀分布在所有边缘,而是集中在经常摩擦的几个点,比如肩甲的外侧、胸甲的下缘。我会在生成器遮罩的基础上,用手绘笔刷把不需要磨损的地方涂黑,把需要加强的地方涂白。这样既有生成器的效率,又有手绘的针对性。
手绘遮罩时,笔刷的硬度和流量要配合。画大面积的污渍用软笔刷低流量,慢慢叠加。画边缘磨损用硬笔刷高流量,一笔到位。我习惯把笔刷的不透明度压到 20% 左右,一层层叠,这样容错率高,画错了也不明显。
4.2 法线细节与高度细节的分工
法线贴图负责表现表面的微观起伏,高度贴图(如果引擎支持视差或者曲面细分)负责更大的形体变化。在 Substance Painter 里,这两者要配合使用。
武士甲片上的锤打痕迹、划痕、凹坑,这些用高度信息画出来,烘焙到法线贴图里。而甲片之间的铆钉、绳索的编结,这些是几何体本身有的,不需要在法线里重复画。如果低模没有这些细节,才需要在法线里补。
这里有个常见错误:有人在法线贴图里画了很深的凹槽,但低模本身没有对应的几何体,进引擎后从侧面看就穿帮了。法线贴图只能模拟光照,不能改变轮廓。所以法线细节的强度要跟低模的几何复杂度匹配,低模越简单,法线细节越要克制。
4.3 材质 ID 与颜色 ID 的妙用
Substance Painter 支持导入材质 ID 贴图,这张贴图用不同颜色标记模型的不同材质区域。有了它,你可以一键选中所有金属部分或者所有皮革部分,快速应用材质或者遮罩。
制作材质 ID 贴图的方法有几种:在建模软件里给不同材质分配不同颜色导出,或者在 Substance Painter 里手动绘制。我通常会在建模阶段就把材质分好,导出 FBX 时带上材质信息,Substance Painter 会自动识别。如果模型是别人给的没有材质 ID,我会用“按 UV 象限选择”或者手动绘制的方式补上。
材质 ID 配合“按颜色选择”遮罩,效率提升非常明显。比如要给所有金属甲片统一加一层污渍,直接用材质 ID 选中金属区域,加污渍层,几秒钟搞定。如果手动选,可能要画半小时。
5. 导出配置:通道打包方式选错,引擎里全乱套
5.1 不同引擎的通道打包规则
PBR 工作流的贴图导出不是简单地把所有通道都导出来,而是要按照目标引擎的规则打包。常见的打包方式有几种:
| 引擎/框架 | 基础色 | 金属度 | 粗糙度 | 法线 | 环境光遮蔽 | 高度 |
|---|---|---|---|---|---|---|
| Unreal Engine | BaseColor | Metallic | Roughness | Normal | AO | Height |
| Unity HDRP | BaseColor | Mask Map (R/M/AO) | 同左 | Normal | 同左 | Height |
| Unity URP | BaseColor | Metallic | Roughness | Normal | AO | 无 |
| glTF 标准 | BaseColor | MetallicRoughness | 同左 | Normal | Occlusion | 无 |
Unreal 的打包方式最直观,每个通道一张贴图。Unity HDRP 用 Mask Map 把金属度、环境光遮蔽、细节遮罩打包到一张贴图的 R、G、B 通道,粗糙度放在 A 通道。glTF 把金属度和粗糙度打包到一张贴图的 B 和 G 通道。
导出前一定要确认目标引擎的打包规则,选错了进引擎就是一片混乱。我见过有人把 Unreal 的贴图导进 Unity HDRP,结果金属部分全变成了粗糙的塑料,就是因为通道对应关系错了。
5.2 导出参数与命名规范
Substance Painter 的导出预设可以自定义,我通常会建几套预设对应不同的引擎。导出参数里几个关键点:分辨率选 4K 还是 2K 看项目需求,格式用 PNG 还是 TGA 看引擎支持,法线贴图的格式要选 DirectX 还是 OpenGL(Unreal 用 DirectX,Unity 用 OpenGL,选反了法线会凹凸颠倒)。
命名规范也很重要。我习惯用“角色名_贴图类型_分辨率”的格式,比如“Samurai_BaseColor_4K”。这样在引擎里导入时一目了然,不会搞混。如果项目有命名规范文档,严格按文档来,不然后期整合时会被同事骂。
提示:导出前在 Substance Painter 里用“导出配置”窗口预览一下每张贴图的通道分配,确认无误再点导出。这个习惯能避免很多低级错误。
6. 引擎验证与迭代:贴图好不好,打光才知道
6.1 在引擎里搭建验证环境
贴图导出后,不要急着交付,先在引擎里搭一个验证环境。我通常会用中性灰的背景,打三盏灯:一盏主光从斜上方 45 度打下来,一盏补光从另一侧弱一些,一盏轮廓光从背后打。这个布光方式能同时检验材质的漫反射、高光反射和边缘反射。
武士角色进引擎后,重点看几个地方:金属甲片的高光是否锐利、粗糙度变化是否自然、法线细节在侧光下是否立体、污渍和磨损是否在正确的物理位置。如果金属看起来像塑料,检查金属度是不是没给到 1。如果高光太散,检查粗糙度是不是太高。如果法线看起来是反的,检查法线格式是不是选错了。
6.2 常见问题与修复思路
进引擎后最常见的问题我整理了一个排查表:
| 现象 | 可能原因 | 修复方式 |
|---|---|---|
| 金属像塑料 | 金属度未给到 1 或基础色太亮 | 检查金属度通道,基础色压暗 |
| 高光过散 | 粗糙度值偏高 | 降低粗糙度,检查粗糙度贴图是否被误打包 |
| 法线凹凸颠倒 | 法线格式选反 | 切换 DirectX/OpenGL 重新导出 |
| 接缝明显 | UV 接缝处纹理不连续 | 在 Substance Painter 里用接缝修复工具处理 |
| 整体发灰 | 环境光遮蔽过强或基础色饱和度低 | 调整 AO 强度,提高基础色饱和度 |
| 磨损位置不对 | 遮罩逻辑错误 | 检查生成器参数和手绘遮罩 |
6.3 迭代:根据引擎反馈回改 Substance Painter
引擎验证发现问题后,要回到 Substance Painter 修改。这里有个效率技巧:Substance Painter 支持实时链接到部分引擎,修改后引擎里自动更新,不用反复导出导入。如果不支持实时链接,就只导出修改的那张贴图,不要全部重导。
迭代时要注意版本管理。我习惯在 Substance Painter 项目文件里用“另存为”保留每个重要版本,比如“Samurai_v1”“Samurai_v2”。这样如果改坏了可以随时回退,不会把之前的成果弄丢。
7. 我踩过的坑和压箱底的效率技巧
7.1 那些年我在武士纹理上翻过的车
第一个大坑是金属度画了中间值。刚学 PBR 的时候,我觉得金属度 0.5 能让金属看起来“半反射”,效果应该更丰富。结果进引擎一看,金属部分既不反射环境也不漫反射,像糊了一层泥。后来才明白,金属度在物理上只有 0 和 1 两种状态,中间值只用于金属和非金属的过渡边缘,而且过渡区域要非常窄。
第二个坑是法线贴图强度过高。为了让甲片看起来更有细节,我把法线强度拉得很高,结果进引擎后角色表面像起了鸡皮疙瘩,光照下全是噪点。法线强度要跟低模的几何精度匹配,低模面数不高的情况下,法线强度控制在 0.5 到 1 之间比较稳妥。
第三个坑是忽略了粗糙度贴图的打包。有一次导出时忘了把粗糙度打包进正确的通道,进引擎后所有材质都变成了镜面反射,整个角色像镀了铬。从那以后我养成了导出前必看预览的习惯。
7.2 提升效率的几个实操技巧
技巧一:用文件夹管理图层。Substance Painter 的图层多了以后很乱,我会按材质类型建文件夹,比如“金属甲片”“皮革”“布料”,每个文件夹里放对应的基础层、磨损层、污渍层。这样找图层很快,也不容易误操作。
技巧二:善用对称。武士角色的甲片通常左右对称,画纹理时开启对称模式,画一边另一边自动同步。但要注意,磨损和污渍不应该完全对称,否则看起来很假。我的做法是基础材质用对称,磨损和污渍关掉对称手动画,这样既有对称的效率,又有不对称的自然感。
技巧三:建立自己的材质库。Substance Painter 支持保存材质预设,我把自己调好的钢铁、旧皮革、粗布等材质存成预设,下次做类似角色直接拖出来用,省去重新调参数的时间。材质库积累得越多,后续项目启动越快。
技巧四:定期清理项目文件。Substance Painter 的项目文件会随着图层增多变得很大,定期用“清理未使用资源”功能删掉废弃的图层和贴图,能减小文件体积,加快软件运行速度。
7.3 关于 PBR 工作流的一点个人理解
做了这么多年角色纹理,我越来越觉得 PBR 工作流的核心不是软件操作,而是对真实世界的观察。金属怎么反射、皮革怎么老化、布料怎么起皱,这些物理规律才是决定纹理质量的根本。Substance Painter 只是帮你把观察到的规律画出来的工具。
我现在的习惯是,做纹理之前先找参考图。武士甲片的参考、旧皮革的参考、刀鞘木纹的参考,找得越充分,画的时候越有底气。参考图不一定要跟角色一模一样,但材质的光照反应、磨损分布、颜色变化要有依据。
还有一点,不要追求一次做到完美。纹理制作是迭代的过程,先铺大关系,再抠细节,最后整体调整。我见过很多人卡在一个甲片的磨损上画了半天,结果整体一看比例不对,又得重来。先整体后局部,这个原则在纹理制作里同样适用。
最后说一个容易被忽略的点:纹理文件的管理。一个武士角色的纹理文件可能有几十张贴图,加上 Substance Painter 的项目文件、导出的中间文件、参考图,文件夹很容易乱。我习惯按“项目名/角色名/贴图/参考/源文件”的层级建文件夹,每个文件按规范命名。这个习惯看起来不起眼,但项目后期整合时能省大量找文件的时间。