Substance 3D Painter|贴图制作与导出
Substance 3D Painter|贴图制作与导出
适用版本:Substance 3D Painter v10.0.1(Windows 中文版)。文中的引擎预设只是常见起点,最终以公司项目的材质模板和导出预设为准,由坂琴写完粗稿然后交给ChatGPT优化。粗搞位于👉学习建模所记录的一些笔记 | 坂琴的小窝🍜
在游戏 PBR 管线中的职责
Painter 负责依据最终低模、UV 和 Mesh Maps 制作可在目标引擎复现的 PBR 纹理。合格交付不等于 Painter 视口里“好看”,而是材质数值有物理逻辑、分层可修改、通道含义清楚、导出后在引擎中表现一致。
从新建项目到引擎回测:详细流程
A. 接收资产并预检
- 只使用已经确认的最终三角化低模;检查对象名、材质名、纹理集数量、UV、法线和贴图预算。
- 明确目标引擎、法线方向、切线计算方式、通道打包、颜色空间、透明模式和文件命名。
- 如果 Mesh Maps 来自 Toolbag,确认分辨率、命名、纹理集和低模版本一致;如果决定在 Painter 内烘焙,就指定 Painter 为主烘焙器,避免两套结果混用后难以追踪。
- 备份原网格。拓扑、UV 或材质槽一旦改变,需要评估是否重烘以及已有蒙版能否继续使用。
B. 新建项目
- 打开 文件 → 新建,选择最终低模 FBX。
- 选择与目标引擎匹配的模板和法线格式。常见起点:Unreal 使用 DirectX(Y-);Unity 常见 OpenGL(Y+),但仍要以具体渲染管线和项目设置为准。
- 检查 按片段计算切线 / Compute Tangent Space Per Fragment。Adobe 的常见建议是 Unreal 流程启用;Unity 常规流程通常关闭,HDRP 需按项目设置核对。
- 先用工作分辨率,例如 1K/2K;最终导出时再按预算提高,避免制作阶段无意义占用显存。
- 新建后检查每个 纹理集 / Texture Set。一个材质定义通常生成一个纹理集,数量不对要回 DCC 修材质分配。
C. 烘焙或导入 Mesh Maps
- 进入 烘焙模式 / Baking Mode,或在当前版本对应的纹理集设置中打开烘焙。
- 指定高模,并按
_low/_high设置 按网格名称匹配 / Match by Mesh Name;先确认每组是否正确。 - 首轮低质量烘 Normal、AO、Curvature、Position、Thickness、World Space Normal、ID 等需要的图。
- 放大检查缝线、波浪、穿帮、薄片背面和部件串投;几何/法线问题回源文件修,不要急着用画笔盖住。
- 通过后再提高分辨率、抗锯齿和射线质量。原笔记的 64x、Dilation 8 和更高 Secondary Rays 只作课程参考。
- 如果使用 Toolbag 结果,将贴图导入项目资源,并在相应纹理集的 Mesh Maps 槽中逐一指派;不能只导入文件却不绑定。
D. 非破坏式 PBR 分层
- 建立文件夹:材质基础、大尺度变化、结构磨损、污渍/沉积、微细节和手工修正。
- 每种材质先确定 Base Color、Metallic、Roughness 和 Normal/Height 的基础状态,再加变化。
- 优先用 填充图层 / Fill Layer + 蒙版 / Mask + 生成器 / Generator;手绘层用于有明确设计意图的独特痕迹。
- 使用锚点/引用类功能时给图层明确命名,避免后续重排导致依赖失效。
- 定期按 C/Shift+C 单独检查各通道,按 B/Shift+B 检查 Mesh Maps,按 M 回到完整材质。
PBR 自检原则:
- Base Color 不应烘入灯光、高光或大面积 AO;
- 金属度通常按金属/非金属二元逻辑处理,过渡只用于边界混合、污垢或复合材质;
- 粗糙度承担大量材质辨识信息,要有大、中、小尺度变化,但变化必须有成因;
- Height/Normal 只表达表面方向与起伏,不能代替应该改变轮廓的几何;
- 不要用后期和戏剧化 HDR 掩盖材质数值问题。
E. 导出与引擎回测
- 进入 文件 → 导出贴图,选择项目批准的输出模板。
- 核对每个纹理集的分辨率、格式、位深、Padding 和法线格式。
- Base Color/Emissive 通常作为 sRGB;Roughness、Metallic、AO、Normal、Height 和通道打包图通常作为线性数据。
- 核对通道打包顺序。比如本文沿用原项目示例 R=Roughness、G=Metallic、B=AO,但其他项目可能使用 ORM(R=AO、G=Roughness、B=Metallic)。
- 在目标引擎使用正式材质模板导入,检查压缩类型、sRGB 开关、Normal 类型、Alpha、双面和透明设置。
- 在中性光、强掠射光、暗部和至少一个真实关卡环境中回测;发现差异要定位颜色空间、法线方向、压缩或材质节点,而不是盲目回 Painter 调颜色。
1. 导入前:在 3ds Max 中准备资产
模型与命名
项目命名示例:p_yundou_lod0。
| 段落 | 示例含义 | 备注 |
|---|---|---|
| p | prop,道具 | 原项目还用 b 表示 building/建筑。具体字母以项目规范为准。 |
| yundou | 熨斗的拼音/资产名 | 应使用团队统一的资产 ID,而不一定总用拼音。 |
| lod0 | 最高细节层级 | 通常 lod1、lod2、lod3 数字越大,面数越少。 |
LOD 的核心逻辑:根据物体与相机的距离或屏幕占比切换几何细节。lod0 通常最完整,但贴图是否随 LOD 降级、是否共用材质,要看引擎和项目方案。
不要把“轴归零”和“仅影响轴”混在一起
之前写的是“仅影响轴需要 XYZ 归零”,这句话容易误导:
- “仅影响轴 / Affect Pivot Only”只是在编辑枢轴,不等于清理模型变换。
- 导出前通常要检查位置、旋转、缩放,以及项目要求的 Pivot 位置。
- 若需要重置变换,应按项目流程使用 编辑 → 变换 → 重置变换 / Reset Transform(工作中也常称 Reset XForm),并在副本上验证蒙皮、修改器和法线是否受影响。
材质与纹理集 / Texture Set
Painter 会根据导入网格上的材质定义创建“纹理集 / Texture Set”。因此更重要的是:
- 材质命名清楚且稳定;
- 不同纹理集 / Texture Set 的材质分配正确;
- 不需要拆分的模型可以在一个 FBX 中;
- UV 是否允许重叠要按材质与 UDIM/纹理集方案决定。
✅ 修正:在 3ds Max 中“重置材质编辑器槽”不是 Painter 的通用导入要求。可能会在项目中会这样使用,而且有破坏现有材质对应关系的风险。若确实要做,先另存工程副本。
FBX 导出
- 导出需要贴图的整体模型。
- 保留正确的平滑组。
- 根据管线决定是否导出“切线和副法线 / Tangents and Binormals”。
- 确认三角化策略:烘焙和最终引擎应尽量使用一致的三角形方向。
- 不要把不需要的相机、灯光或隐藏辅助物一起带入。
2. 创建 Painter 项目
- 选择“文件 → 新建”,新建项目并选择低模 FBX。
- 选择模板、分辨率和法线格式。
- 检查生成的“纹理集 / Texture Sets”是否与材质分配一致。
- 如果已在 Toolbag 烘焙“网格贴图 / Mesh Maps”,可按命名规则导入,并分配到“纹理集设置 / Texture Set Settings”。
- 如果准备在 Painter 内烘焙,则进入“烘焙模式 / Baking”或“纹理集设置 → 烘焙网格贴图”,不需要先从 Toolbag 导入同类结果。
DirectX 与 OpenGL
| 格式 | 常见记法 | 绿色通道 |
|---|---|---|
| OpenGL | Y+ | 正方向 |
| DirectX / Direct3D | Y- | 与 OpenGL 相反 |
选择规则:以最终渲染器或游戏引擎为准。 如果方向错了,通常可以通过反转绿色通道修正,但更推荐在项目创建和导出模板阶段就统一。
之前笔记写的是“有要求就反转 Y”过于笼统。不是有要求就反转,而是输入、项目和输出的法线方向不一致时才处理。
3. 烘焙网格贴图 / Mesh Maps
之前笔记记录的课程配置:
- 膨胀宽度 / Dilation Width:8;
- 消除锯齿 / Antialiasing → 超采样 / Supersampling:64x;
- 烘焙 AO 时提高次生射线 / Secondary Rays;
- 忽略背面 / Ignore Backface 设为总是 / Always。
整理后的用法:
- 先用较低分辨率和较低抗锯齿测试。
- 重点检查法线、AO、曲率、位置和 ID 图。
- 确认“包围框 / Cage”和匹配方式没有穿帮后,再提高质量。
- 64x 超采样成本很高,不是每个资产都必须;以锯齿是否可见和机器耗时为准。
- “忽略背面 / Ignore Backface”与射线设置会影响薄片、封闭结构和近距离零件,不能无条件设成最大或“总是 / Always”。
4. 显示设置与材质检查
- 制作阶段先在中性环境检查材质;
- 完成后再开启阴影与后期效果;
- 色调映射、颜色校正和曝光会改变观感,不要用它们掩盖 Base Color 或 Roughness 的问题;
- 最终至少换两到三个不同 HDR 检查材质稳定性。
5. 材质制作的分层思路
原笔记列出的层次很实用,可以整理成从“大到小”的顺序:
A. 基础材质
- 基础层;
- 大体颜色;
- 基本金属度;
- 基础粗糙度。
B. 大尺度变化
- 亮部与暗部;
- 上下方向的颜色/积尘差异;
- 大块粗糙度变化;
- 材质区域之间的分界。
C. 使用痕迹
- 边缘磨损;
- 锈迹;
- 暗部脏迹;
- 灰尘;
- 划痕或磨痕。
D. 微细节与收尾
- 高度层;
- 小范围颜色变化;
- 金属度细节;
- 粗糙度的光滑、中间值与粗糙区域;
- 适量 Sharpen。
真实感通常不是“多加一层污渍”,而是让颜色、粗糙度、高度和磨损有一致的成因。每一层都问自己:它为什么出现在这里?
6. 常用快捷键
视图与显示
| 快捷键 | 功能 |
|---|---|
| F1 | 同时显示 3D 与 2D 视图 |
| F2 | 只显示 3D 视图 |
| F3 | 只显示 2D 视图 |
| F4 | 交换 2D/3D 视图位置 |
| Tab | 隐藏/显示 UI,扩大视口 |
| Shift + 鼠标右键 | 旋转环境光 |
| M | 显示完整材质 |
| C / Shift + C | 下一个/上一个纹理集通道 / Texture Set Channel |
| B / Shift + B | 下一个/上一个网格贴图 / Mesh Map |
之前笔记写“C 切换显示材质、B 切换模型贴图”。整理后更准确:C 在各材质通道间切换,B 在 Mesh Maps 间切换,M 回到完整材质显示。
画笔
| 操作 | 快捷方式 |
|---|---|
| 调整画笔大小 | Ctrl + 鼠标右键,水平拖动 |
| 调整画笔硬度 | Ctrl + 鼠标右键,垂直拖动 |
| 调整画笔流量 | Ctrl + 鼠标左键,水平拖动 |
| 调整画笔旋转 | Ctrl + 鼠标左键,垂直拖动 |
| 反转当前灰度值 | X(在遮罩等灰度工作流中) |
图层、蒙版与导出
| 快捷键 | 功能 |
|---|---|
| Ctrl + G | 将当前选中图层放入文件夹/组 |
| Alt + 鼠标左键点击蒙版 | 在视口中单独显示该蒙版 |
| Ctrl + Shift + E | 打开“文件 → 导出贴图”窗口 |
原笔记中的 “E 回到绘图”“Alt + 遮罩快速到蒙版面板”“Ctrl + Shift 在 UV 里整体比例放大”描述缺少操作对象或鼠标按键,暂时不写成默认快捷键。
7. 自定义输出模板 / Output Template
打开路径:文件 → 导出贴图 → 输出模板,再使用加号新建模板。Painter v10.0.1 中文版中的栏目名称以本机为准。
文件名变量
| 变量 | 含义 |
|---|---|
| $project | Painter 项目文件名 |
| $mesh | 导入的网格文件名 |
| $textureSet | 当前材质或纹理集 / Texture Set 名称 |
✅ 修正:原笔记的 $projecy 是拼写错误。变量最好通过 Painter 界面的变量按钮插入;不同版本可能显示为 $textureSet 或 $textureset,不要只靠手打。
输出图类型
| 类型 | 用途 |
|---|---|
| Gray | 一张灰度图,例如 AO、Metallic、Roughness、Height。 |
| RGB | 一张 RGB 颜色图,例如 Base Color 或 Normal。 |
| R + G + B | 三个独立灰度通道打包进一张 RGB 图。 |
| RGB + A | 一张 RGB 图加一个独立 Alpha 灰度通道。 |
| R + G + B + A | 四个独立灰度通道打包进 RGBA。 |
✅ Alpha 只是一个灰度数据槽,不天然等于透明度。把 Opacity 放进 A 是常见约定,但仍然是约定。
原项目的模板示例
Normal
- 文件名:$textureSet_Normal;
- 类型:RGB;
- 内容:“转换贴图 / Converted Maps”中与目标引擎一致的“OpenGL 法线 / Normal OpenGL”或“DirectX 法线 / Normal DirectX”。
Base Color + Opacity
- 文件名:$textureSet_BaseColor;
- 类型:RGB + A;
- RGB:Base Color;
- A:Opacity 灰度通道;
- 如果资产没有透明度,可以不输出 Alpha,避免无意义增加文件体积或引擎设置复杂度。
Mix 通道图
- 文件名:$textureSet_Mix;
- 类型:R + G + B;
- R:Roughness;
- G:Metallic;
- B:混合 AO / Mixed AO。
格式选择
- TGA:兼容传统游戏管线,常用 8 bit 和 Alpha。
- PNG:无损、文件较小,适合许多普通贴图。
- TIFF/EXR:适合更高位深或特殊管线。
最终格式、位深、颜色空间和 Alpha 都应按目标引擎决定。
8. 导出前检查
- [ ] 输出目录正确。
- [ ] 选中了正确的输出模板 / Output Template。
- [ ] 纹理集 / Texture Sets 没有漏选。
- [ ] 文件名变量展开后不会重名。
- [ ] 法线 / Normal 是目标需要的 DirectX 或 OpenGL。
- [ ] Base Color 使用正确颜色空间;Roughness/Metallic/AO 按线性数据处理。
- [ ] Mix 图的 R/G/B 通道与引擎材质节点一致。
- [ ] 透明材质才输出和启用 Opacity/Alpha。
- [ ] 分辨率、格式、位深和 Padding 符合项目规范。
公司交付阶段门
- [ ] 使用最终三角化低模,纹理集数量与材质槽一致。
- [ ] 所需 Mesh Maps 全部存在、绑定正确且没有明显串投/接缝。
- [ ] 图层和文件夹有可读命名;关键效果可调、可追踪,不依赖无法解释的手工涂改。
- [ ] Base Color 无烘焙光影,Metallic/Roughness 符合材质逻辑。
- [ ] 贴图分辨率、通道、位深、Alpha 和文件名符合资产清单。
- [ ] sRGB/线性数据设置与引擎材质节点一致。
- [ ] 法线格式和切线空间已在目标引擎验证。
- [ ] 通道打包有文字记录,不能只靠记忆颜色。
- [ ] Painter 工程、导出预设和最终纹理都能由下一位同事复现。
复习
- 一个材质定义通常对应一个纹理集 / Texture Set。
- 法线方向看目标引擎,不靠猜。
- C 看通道,B 看 Mesh Map,M 看完整材质。
- 通道打包只是数据装箱,顺序必须与引擎解包一致。
- $project 拼写别再写错;变量尽量从 UI 插入。
- 最后换多个 HDR 检查,别让单一灯光骗过眼睛。
课程时间点(保留原记录)
- P10 约 32 分钟:OpenGL/DirectX 与导入烘焙图。
- P10 约 116 分钟:新建、导入模型、导入贴图、纹理集与烘焙流程。
- P10 约 136 分钟:正式讲制作思路。





