Substance Painter 做卡通风格化毛发,很多同学一上来就铺一整层噪点,或者直接拖一个皮毛智能材质,结果要么脏,要么假,要么像抹了一层泥巴。问题不在笔刷不够多,而是没有把“SP 材质球”和“卡通质感”之间的逻辑理顺。
这篇文章只围绕一件事:在 Substance Painter 里做一套能直接用在猫、狗、狐狸这类动物模型身上的卡通风格化毛发皮毛材质球。我会从 SP 的材质球原理、图层栈结构、生成器遮罩、笔刷手绘、颜色/粗糙度/高度细节,一路讲到导出和批量复用,重点是能落地,不是堆概念。
先给结论:SP 做卡通皮毛,核心不是某个笔刷或某个滤镜,而是“底色 + 遮罩变化 + 手绘补细节”这个三层结构。把这套结构建立起来,换一只动物,本质上就是换一套贴图的事。
1. 核心能力速览
关于 Substance Painter 的毛发皮毛类材质球,先看一张能力速览表。这里的参数是 SP 桌面版的常规工作流,不一定对应某个插件或小工具,但适用于大多数卡通角色建模流程。
| 项目 | 说明 |
|---|---|
| 制作工具 | Substance 3D Painter(SP 2021 及以上版本) |
| 样式目标 | 卡通风格化、手绘感、半写实 |
| 适用模型 | 猫、狗、狐狸、狼等四足动物及卡通角色 |
| 核心功能 | 毛发走向、毛色层次、皮毛高光、透明/镂空毛发细节 |
| 主要输出贴图 | Base Color、Roughness、Height、Normal、AO |
| 是否支持批量 | 支持,智能材质 + 导出模板 + Python API |
| 常用笔刷 | 内置 Fiber 笔刷、自定义 alpha、图章工具 |
| 常用生成器 | AO、Curvature、Position、WS Normal、噪声类生成器 |
| 适配渲染器 | Blender、Maya、Unity、UE 等 PBR 渲染流程 |
需要说明的是,SP 本身不是毛发解算器。想在骨骼动画里看到一根根真正的毛发飘动,还是要依靠 Blender Hair、XGen、Yeti 这类系统。SP 材质球解决的是“贴图层面上的皮毛质感”,通过颜色变化、粗糙度变化、高度变化和透明通道来模拟毛发层叠效果。
2. 卡通皮毛材质球设计逻辑
先说一个很多新手容易踩的坑:卡通皮毛不等于低精度写实皮毛,更不等于把真实动物身上的“毛发细节”直接贴上去。写实皮毛追求的是信息量极大,而卡通皮毛追求的是有限信息、明确色块、干净边缘。
在设计 SP 材质球之前,要先确定三件事。
第一,视角距离。如果是手游角色,模型很小,材质球需要的是大色块对比,甚至只需要 Base Color 加 Roughness 两个通道就能撑住。如果是展示模型,摄像机可以贴脸,材质球就必须加入高度细节和法线细节,否则看起来会过于平面。
第二,毛发层级。卡通动物模型的头部、背部、腹部、尾巴,毛发长度和方向都不一样。SP 材质球不能用一个全局遮罩搞定所有区域,需要按纹理集或按遮罩区域分别处理。头部短毛、背部中等长度、尾巴蓬松,这是同一套材质球下最少要拆出的三个层次。
第三,边缘处理。卡通质感的皮毛,很重要的特征是边缘有锯齿状或尖刺状的轮廓,但轮廓又不能太碎。SP 里通常用 Height 通道和 Base Color 通道配合,在模型剪影位置画上高对比度的边缘毛刺。这个环节如果省略,角色看起来就像穿了一件紧身衣,而不是有毛毛的感觉。
理解了这三点,后面在图层栈里操作时,就不会迷失在生成器参数里。
3. 模型与 UV 准备
材质球本身能做的内容再多,模型底子不合格也会白费。SP 里做卡通皮毛,对模型和 UV 有四个基本要求。
3.1 模型面数不需要太高
卡通皮毛靠的是贴图和高度通道,不需要在模型上建模出一根根毛。模型做好大体轮廓即可,四足动物的身体、四肢、头部、尾巴,按生物结构分好区块,面数能稳定支撑平滑效果就够。
3.2 UV 展开必须按结构切岛
UV 展开时,耳朵、尾巴、四肢、头部之间要切开,让每块 UV 岛尽可能保持独立且比例正常。动物模型的头尾和身体因为方向差异大,如果挤在一个壳里,画毛发走向时很容易出现方向断层。
一个更稳妥的做法是,在不同贴图集上按部位拆 UV shelve,这样可以使用多个材质分区绘制。
3.3 用网格检查纹理快速验证
在 SP 里处理 UV 之前,可以先用网格纹理或检查 BGRA 纹理观察 UV 密度和接缝。重点看尾巴和四肢的 UV 是否被过度拉伸。如果这些区域 UV 密度不均,最终导出的毛发贴图会出现模糊或拉伸失真。
3.4 在 SP 中检查法线朝向
材质球的毛发方向通常依赖模型法线。如果模型内外法线反了,或法线方向不平滑,后面用 WS Normal 生成器做毛发遮罩时会得到完全反向的结果。导入 SP 后,先开 Normal 视图检查一遍,出现大面积蓝色翻转就说明模型法线有问题。
4. 图层栈与生成器:材质球主体搭建
这一章是整篇文章的核心。我会从新建项目开始,讲清楚卡通皮毛材质球应该如何从零搭建。这里不讨论某个现成的智能材质,而是从图层栈逻辑入手,因为理解了逻辑之后,你才能做出自己的 SP 毛发材质球。
4.1 新建项目与初始纹理设置
在 SP 里导入模型后,建议先设置 2048 或 4096 的贴图尺寸。卡通风格用 2048 通常足够;但如果模型细节比较多,而且要做近景展示,可以用 4096。文档贴图集模板使用 PBR 金属粗糙度模式,贴图格式选 PNG,颜色空间保持默认。
4.2 第一层:底色铺毛
卡通皮毛材质球的第一层不是直接画毛发,而是铺一层干净的底色。这一步决定整只动物的主色调,比如橘猫的橘、哈士奇的灰白、柯基的黄白。
操作方式:新建“填充层”,把 Base Color 设置为平均色。这里不能用纯色,要在填充层上叠加一个微弱的噪声遮罩,让底色产生轻微的不均匀感。卡通也不需要过度变化,建议噪声强度在 10%-20% 之间。
这一步的容易出现的问题是:底色太干净,导致后续上毛发层时过渡不自然。所以要加入一层非常轻的“渐变”或“噪声”通透度,让颜色有一定偏差。
4.3 第二层:主色块分区
卡通皮毛通常有两三种颜色,比如背部深色、腹部浅色、头部白色。这个阶段要用手绘遮罩或者多边形填充的方式,把大色块切出来。
我推荐的做法:新建一个“填充层”,设置第二种颜色,然后在遮罩上用中等硬度的笔刷,沿模型背部绘制。绘制时把视口旋转到侧 45 度,方便观察颜色分界。色块边缘不需要平滑,卡通风格甚至保留一点手绘笔触是对的。
4.4 第三层:高度通道制造皮毛体积
这一步是卡通毛发材质球和普通卡通材质球的差别所在。普通卡通材质球在高度和曲率上很干净,而皮毛材质球必须让高度通道产生毛绒感。
新建一个“填充层”,只输出到 Height 通道。把高度值调低,通常建议 0.2-0.4 之间,然后叠加噪声遮罩。这里不要用太细密的噪声,因为卡通毛发是成簇的,不是一根一根的。建议选择 Grunge 类噪声,把噪声缩放调到 5-15,让遮罩产生大小不一的团块。
4.5 第四层:AO 与曲率辅助
继续添加生成器图层。在 SP 的图层菜单里添加“Ambient Occlusion”和“Curvature”生成器,用它们的遮罩作为皮毛之间夹缝的暗部。AO 强度建议在 70%-90%,曲率的暗部强度在 30%-50%。
如果你的 SP 版本支持多个生成器组合,可以把 AO 和 Curvature 结果连到同一个填充层的高度和颜色通道上。这样模型的眼部、耳根、下颌缝隙等位置会有自然的闭塞感。
4.6 第五层:毛发走向遮罩
用一个“Position”或“WS Normal”生成器作为遮罩,在填充层上做出渐变式毛发分层。这个方法的本质是利用模型的世界空间坐标,让毛发方向顺着模型表面产生方向性变化。
也可以手动创建灰度渐变纹理导入 SP,作用在图层遮罩上,再配合噪声让渐变边缘产生毛刺。这种方式的优点是可控性强,适合做背部到尾部的长毛渐变。
到这一层,新的卡通毛发材质球已经有一个基础的体积感和色彩层次。后面需要进入手绘细节。
5. 笔刷手绘:毛发方向与细节强化
生成器能解决大范围的毛簇变化,但卡通皮毛的“灵魂”在于手绘笔触。这一步需要进入 SP 的绘制状态,选择纤维笔刷或自定义 alpha,逐笔把毛发方向、高光、颜色杂毛画出来。
5.1 选择 Fiber 笔刷
SP 内置的 Fiber 笔刷是最容易上手的毛发工具。在画笔库中搜索 Fiber,能看到不同密度和长度的预设。用于卡通毛发时,建议选择密度中等的笔刷,并把笔刷的“硬度”降低到 50% 左右,避免出现生硬边缘。
如果内置 Fiber 笔刷不够用,可以自己准备一张带毛流方向的白底黑笔触 alpha 图,导入到 SP 的 alpha 库。这种自定义 alpha 是画毛发最核心的资源。
5.2 绘制方向:顺着骨骼与肌肉走
毛发走向要从模型的骨骼结构出发,头部毛发向两侧分,颈部向后背过渡,背部向尾巴方向顺,四肢向下,尾巴向外扩散。
绘制时建议开启对称。SP 里可以直接使用镜像对称工具,也可以用视口对称选项。四足模型大多左右对称,开启对称后可以节省一半时间。
具体操作:
- 选择 Fiber 笔刷。
- 在图层栈顶新建一个“绘制层”。
- 将绘制通道设置为“Color”或“Height”。
- 选择较暗的杂色或高光颜色,顺毛发方向快速扫动。
- 多次叠加,让笔触产生层次。
5.3 手绘高光与颜色杂毛
卡通皮毛的毛色并不是单一色,背部会有一层更亮的绒毛,腹部颜色更浅,耳根和眼窝会有深色杂毛。用绘制层叠加这些变化时,建议把画笔的不透明度调到 20%-30%,少量多次,避免一笔画死。
一个小技巧:把笔刷的流量从 100 降到 30 之后,同一个位置反复描画几次,会产生像真实毛发一样的叠加深浅变化。这个效果在卡通材质里非常出彩。
5.4 边缘毛刺处理
模型剪影边缘的毛刺是卡通皮毛质感的关键。可以用 Fiber 笔刷高度模式,在模型的轮廓位置向外提起小段毛刺。如果 SP 笔刷本身无法伸到模型外部,可以靠 Height 贴图在渲染时提供假轮廓。
对于 Blender 或 UE 用户,SP 导出的 Height 贴图可以接到凹凸节点或置换节点上,在渲染时产生微微膨胀的毛发边缘。
6. 材质预览与导出验证
材质球做完以后,不建议直接回到渲染器才发现问题。SP 内部可以先用 Iray 或软件渲染模式预览,观察皮毛的整体效果。
6.1 在 SP 中切换渲染模式
SP 的渲染模式切到 Iray,光照选择“Studio”或“Product”。Iray 预览中 Height 通道的凸起效果会非常明显。如果高度值过高,可能是因为前面高度层叠得太厚,可以反向调节。
6.2 导出模板配置
SP 的导出窗口可以保存为自定义导出预设。常见的卡通皮毛导出配置如下:
{ "exportPath": "export", "exportList": [ { "mapPrefix": "T_Animal", "mapList": [ { "shortName": "Base_Color", "channels": ["diffuse"] }, { "shortName": "Roughness", "channels": ["roughness"] }, { "shortName": "Height", "channels": ["height"] }, { "shortName": "Normal", "channels": ["normal"] }, { "shortName": "AO", "channels": ["ambientOcclusion"] } ] } ], "defaultResolution": "2048x2048", "outputFormat": "png" }上面的 JSON 只是说明 SP 导出模板的结构,实际点击“导出纹理”时,可以在导出窗口里直接勾选通道并保存模板。
6.3 在 Blender 中验证
导出后在 Blender 里接一个基础的 PBR 材质节点,把 Base Color、Roughness、Normal、Height 分别接入对应接口。然后在 Blender 的材质属性里打开“位移”,选择“Bump”或“Displacement”。这样能快速确认贴图是否完整、方向是否正确、是否有接缝问题。
如果在 SP 里颜色和高度看着很好,但导出后效果变平,最可能的原因是贴图压缩格式不同,或渲染器没有启用置换/凹凸。
7. 智能材质批量复用与自动化导出
做一套卡通皮毛材质球,只给一只猫用,效率太低。SP 的高效之处在于可以把整个图层栈保存为智能材质(Smart Material),之后拖到任意模型上都会保留生成器和绘制层。如果模型分区一致,效果基本不用重新调整。
7.1 保存智能材质
图层栈顶部的文件夹选择为“智能材质”保存。快捷键对应菜单“文件 > 保存为智能材质”。保存后,在“材质”资源面板中就可以看到自定义的皮毛智能材质。
需要注意,手绘层的笔触和对称模式可能会依赖具体模型,其他模型 UV 结构不同时,手绘层位置需要手动修正。
7.2 Python API 自动化导出
如果有一批已经展好 UV 的模型,可以通过 SP 的 Python API 自动化导入、烘焙、应用材质、导出。这是一种可选的高阶方案,适合批量工作流。
import substance_painter import substance_painter.project as project import substance_painter.export as export # 打开一个已有项目 project.open("/path/to/your_project.spp") # 导出纹理,使用上面保存的模板 export.list_exports()这段 Python 脚本只是最基础的 API 演示,实际使用时需要先查看 SP 对应版本的 Python API 文档中 export 和 project 模块的参数。
7.3 命令行批处理
SP 支持命令行调用,适合服务端或无人值守批量导出。不同版本的命令行参数不完全一样,建议先查版本号再执行。
# 示例:命令行导出指定资源 SubstancePainter --export-map "Base Color" --input-mesh "/path/to/mesh.fbx" --project "/path/to/project.spp"这里一定要强调的是,命令行参数在不同 SP 版本中可能有差异,第一次使用前要运行--help或查询官方文档。
8. 常见问题与排查方法
SP 做毛发材质球,最容易遇到的问题集中在模型 UV、遮罩方向、图层透明度、导出贴图缺失这几个方向上。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 毛发方向乱、颜色撕裂 | UV 未按结构拆岛 | 在 SP 里查看 UV 壳的分布 | 回到建模软件重新展开 UV,按头部、四肢、尾巴拆分 |
| 渲染时边缘没有毛刺 | 渲染器未启用置换或凹凸 | 检查渲染器材质接口是否连接 Height | 将 Height 贴图接到 Bump/Displacement 节点 |
| 皮毛看起来“脏” | 噪声遮罩强度过高 | 检查各图层的噪声不透明度 | 将噪声不透明度降到 30% 以下 |
| 导出后没有 Height 贴图 | 导出模板未勾选 Height | 在导出设置里勾选 Height 通道 | 保存新的导出模板 |
| 颜色分层边缘太硬 | 手绘遮罩硬度太高 | 检查笔刷硬度 | 将笔刷硬度降到 30%-50%,或加一层模糊滤镜 |
| 背部和腹部颜色过渡不自然 | 色块分区缺少中间调 | 新建渐变填充层 | 在两种颜色之间增加一层过渡的中间色 |
| 智能材质拖到新模型后位置偏移 | 另一模型的 UV 分布不同 | 检查纹理集与 UV 比例 | 重新调整手绘层或使用生成器重算 |
| SP 论坛和美术群里最常见的问题:导入 FBX 后模型纹理集是空的 | 模型未指定材质 ID | 在建模软件中把材质 ID 分开命名 | 给身体、头、耳朵等分配不同材质 ID 后重新导入 |
9. 最佳实践、合规边界与使用建议
最后说几点工程化的建议,这些都来自实际项目里的经验。
第一,第一次做毛发材质球时,不要直接拿最高精度模型去试。先用一个面数中等、UV 结构清晰的测试模型跑通流程,确认材质球效果满意后,再套用到正式角色上。这样能避免大量重复烘焙和反复调整。
第二,模型文件、导出贴图、SP 工程文件不要混在一个目录里。建议目录分成 Mesh、Texture、Project、Render 四块,方便批量任务和版本管理。
第三,如果做商业项目,使用参考素材和导入的 alpha 贴图时要注意版权。网上下载的免费皮毛材质、毛发笔刷,有些只限个人学习,不能用于商业发行。自己画的笔刷和通过 SP 生成的材质,一般不存在授权问题,但如果是扫描真实动物素材,还要注意动物照片或纹理的版权和肖像权问题。
第四,涉及真实动物、宠物形象时,要确认素材来源和用户授权。如果是给客户的猫狗做数字形象,需要确认客户拥有宠物照片的使用权。这一点和声音克隆、换脸类工具的使用边界类似,都必须先确认授权,再进入制作和商用环节。
第五,团队成员共用这套材质球时,建议把智能材质和 alpha 笔刷统一放在共享资源库中,并在命名上注明版本。例如Fur_Cartoon_Cat_v01.spsm这样,可以避免“最终版改改”这类文件混乱。
第六,在发布最终成品前,一定做一次多角度、多种光照条件下的效果复核。SP 里的 Iray 预览和最终渲染器效果不一定一致。尤其是在 Blender Cycles 或 UE 里,光照强度、粗糙度响应都有差异,导出前至少要跑一遍 Blender 预览验证。
如果想让卡通皮毛材质球更有表现力,后续可以继续扩展的方向有:把 Height 通道接成位移在渲染器里生成真正的皮毛轮廓;在 SP 中用透明通道制作发丝组;结合顶点色区分同一材质球下不同区域的毛色;或者把材质球和自动生成的 AO 烘焙脚本结合,做成一批模型一键产出的资产管线。
这套流程做完后,猫狗狐狸这类卡通角色的皮毛质感,基本都能用同一套 SP 材质球思路解决。最值得先动手验证的,是“底色 + 噪声遮罩 + Fiber 手绘”这三个步骤的配合,把这三层玩明白了,再谈更复杂的细节也不迟。