Substance 3D Painter|贴图制作与导出

适用版本:Substance 3D Painter v10.0.1(Windows 中文版)。文中的引擎预设只是常见起点,最终以公司项目的材质模板和导出预设为准,由坂琴写完粗稿然后交给ChatGPT优化。粗搞位于👉学习建模所记录的一些笔记 | 坂琴的小窝🍜

在游戏 PBR 管线中的职责

Painter 负责依据最终低模、UV 和 Mesh Maps 制作可在目标引擎复现的 PBR 纹理。合格交付不等于 Painter 视口里“好看”,而是材质数值有物理逻辑、分层可修改、通道含义清楚、导出后在引擎中表现一致

从新建项目到引擎回测:详细流程

A. 接收资产并预检

  1. 只使用已经确认的最终三角化低模;检查对象名、材质名、纹理集数量、UV、法线和贴图预算。
  2. 明确目标引擎、法线方向、切线计算方式、通道打包、颜色空间、透明模式和文件命名。
  3. 如果 Mesh Maps 来自 Toolbag,确认分辨率、命名、纹理集和低模版本一致;如果决定在 Painter 内烘焙,就指定 Painter 为主烘焙器,避免两套结果混用后难以追踪。
  4. 备份原网格。拓扑、UV 或材质槽一旦改变,需要评估是否重烘以及已有蒙版能否继续使用。

B. 新建项目

  1. 打开 文件 → 新建,选择最终低模 FBX。
  2. 选择与目标引擎匹配的模板和法线格式。常见起点:Unreal 使用 DirectX(Y-);Unity 常见 OpenGL(Y+),但仍要以具体渲染管线和项目设置为准。
  3. 检查 按片段计算切线 / Compute Tangent Space Per Fragment。Adobe 的常见建议是 Unreal 流程启用;Unity 常规流程通常关闭,HDRP 需按项目设置核对。
  4. 先用工作分辨率,例如 1K/2K;最终导出时再按预算提高,避免制作阶段无意义占用显存。
  5. 新建后检查每个 纹理集 / Texture Set。一个材质定义通常生成一个纹理集,数量不对要回 DCC 修材质分配。

C. 烘焙或导入 Mesh Maps

  1. 进入 烘焙模式 / Baking Mode,或在当前版本对应的纹理集设置中打开烘焙。
  2. 指定高模,并按 _low/_high 设置 按网格名称匹配 / Match by Mesh Name;先确认每组是否正确。
  3. 首轮低质量烘 Normal、AO、Curvature、Position、Thickness、World Space Normal、ID 等需要的图。
  4. 放大检查缝线、波浪、穿帮、薄片背面和部件串投;几何/法线问题回源文件修,不要急着用画笔盖住。
  5. 通过后再提高分辨率、抗锯齿和射线质量。原笔记的 64x、Dilation 8 和更高 Secondary Rays 只作课程参考。
  6. 如果使用 Toolbag 结果,将贴图导入项目资源,并在相应纹理集的 Mesh Maps 槽中逐一指派;不能只导入文件却不绑定。

D. 非破坏式 PBR 分层

  1. 建立文件夹:材质基础、大尺度变化、结构磨损、污渍/沉积、微细节和手工修正。
  2. 每种材质先确定 Base Color、Metallic、Roughness 和 Normal/Height 的基础状态,再加变化。
  3. 优先用 填充图层 / Fill Layer + 蒙版 / Mask + 生成器 / Generator;手绘层用于有明确设计意图的独特痕迹。
  4. 使用锚点/引用类功能时给图层明确命名,避免后续重排导致依赖失效。
  5. 定期按 C/Shift+C 单独检查各通道,按 B/Shift+B 检查 Mesh Maps,按 M 回到完整材质。

PBR 自检原则:

  • Base Color 不应烘入灯光、高光或大面积 AO;
  • 金属度通常按金属/非金属二元逻辑处理,过渡只用于边界混合、污垢或复合材质;
  • 粗糙度承担大量材质辨识信息,要有大、中、小尺度变化,但变化必须有成因;
  • Height/Normal 只表达表面方向与起伏,不能代替应该改变轮廓的几何;
  • 不要用后期和戏剧化 HDR 掩盖材质数值问题。

E. 导出与引擎回测

  1. 进入 文件 → 导出贴图,选择项目批准的输出模板。
  2. 核对每个纹理集的分辨率、格式、位深、Padding 和法线格式。
  3. Base Color/Emissive 通常作为 sRGB;Roughness、Metallic、AO、Normal、Height 和通道打包图通常作为线性数据。
  4. 核对通道打包顺序。比如本文沿用原项目示例 R=Roughness、G=Metallic、B=AO,但其他项目可能使用 ORM(R=AO、G=Roughness、B=Metallic)。
  5. 在目标引擎使用正式材质模板导入,检查压缩类型、sRGB 开关、Normal 类型、Alpha、双面和透明设置。
  6. 在中性光、强掠射光、暗部和至少一个真实关卡环境中回测;发现差异要定位颜色空间、法线方向、压缩或材质节点,而不是盲目回 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 项目

  1. 选择“文件 → 新建”,新建项目并选择低模 FBX。
  2. 选择模板、分辨率和法线格式。
  3. 检查生成的“纹理集 / Texture Sets”是否与材质分配一致。
  4. 如果已在 Toolbag 烘焙“网格贴图 / Mesh Maps”,可按命名规则导入,并分配到“纹理集设置 / Texture Set Settings”。
  5. 如果准备在 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。

整理后的用法:

  1. 先用较低分辨率和较低抗锯齿测试。
  2. 重点检查法线、AO、曲率、位置和 ID 图。
  3. 确认“包围框 / Cage”和匹配方式没有穿帮后,再提高质量。
  4. 64x 超采样成本很高,不是每个资产都必须;以锯齿是否可见和机器耗时为准。
  5. “忽略背面 / 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 分钟:正式讲制作思路。

参考核对