Substance 3D Designer · 完整图文教程
16 章 · 416 个节点 · 可离线阅读

Substance 3D Designer 完整图文教程
从零基础到程序化材质实战 · 16 章 · 52 张自绘图示 · 附节点速查表 / 术语表 / 学习资源 · 每章配套练习与达标参考图

这不是一份「节点说明书」,而是一条完整的学习路径:先建立灰度思维与物理材质(PBR)的直觉, 再逐个掌握真正会被反复用到的节点,最后用一套可参数化的图(Graph)做出能直接交付给引擎的贴图(Texture)。 每一章都给出参考图、要达到的目标与可自测的练习。

16 章正文 52 张现场生成图示 416 个节点速查(可搜索) 15 个配套练习 术语:中文(English) 单文件 · 离线可读

00如何使用这份教程

它适合谁

  • 完全没碰过 Substance 3D Designer(下称 SD)的新手:从第 01 章顺序读,边读边开软件。
  • 会用 SD 但做不出「高级感」的中级用户:直接跳到第 04、06、07、08 章——绝大多数「材质假」的问题都出在这四章。
  • 要教别人或带团队的人:第 13、14 章是规范与交付清单,顶栏的「学习资源」板块是可直接转发的免费资源清单。

怎么用最有效

① 先读,后做

每章末尾都有 练习 卡片,写明了操作步骤和达标标准。 读完不练,等于没读——SD 的手感只能靠做出来。

② 对照参考图自检

练习里的「参考 / 达标标准」列出了具体特征。把你的结果和插图并排看, 差异在哪里,问题就在哪里。

③ 遇到节点就查

顶栏的「节点速查表」板块收录了 416 个节点(直接读自本机的 SD 16.0.4 节点库,全部带中文详解)。 忘了某个节点干什么、或者只知道想要的效果却不知道用哪个节点,切到那个板块搜—— 按名字、按用途、按效果都能搜。

术语约定

本教程统一采用「中文(English)」的写法,例如 混合(Blend)、高度图(Height)、 环境光遮蔽(Ambient Occlusion)。但行业里确实存在一批「中文译名反而不如英文原名清楚」的词, 这类词保留英文并用中文解释,例如:

保留英文为什么不翻译本教程里的说法
Slope Blur「坡度模糊」容易被误解成普通的模糊;它本质是沿坡度方向做侵蚀(Erosion)Slope Blur(沿坡度侵蚀)
FX-Map它是节点名,也是图类型名;中文没有约定俗成的译法FX-Map(象限迭代图)
Flood Fill「洪水填充」在 2D 绘图里指填色算法,在 SD 里指的是「按连通区域分组」Flood Fill(连通区域填充)
Tile Sampler「瓦片采样器」会被误认为是采样贴图Tile Sampler(图案阵列散布)
Pixel Processor中文译名不统一Pixel Processor(逐像素运算节点)
Substance graphAdobe 官方术语,SD 里的「图」图 / 材质图(Substance graph)
.sbsar文件格式名.sbsar(发布后的可调材质资产)

学习路线图

route_map
十六个章节的依赖关系与每个阶段的产出。阶段 0~1 建议一周内过完,阶段 2(节点语汇)是投入最大、回报也最大的部分。
第 0 阶段 · 概念(1~2 天)    第 01 章       灰度思维 / PBR 贴图集 / 节点思维
        │
第 1 阶段 · 上手(2~4 天)    第 02~03 章   界面分区 / 节点与连线 / 输出节点
        │
第 2 阶段 · 节点语汇(2~4 周)第 04~10 章   噪声 → 滤镜 → 混合 → 遮罩 → 派生 → 颜色 → 散布
        │
第 3 阶段 · 工程化(1~2 周)  第 11~14 章   参数化 / 子图 / 性能 / 导出交付
        │
第 4 阶段 · 作品(长期)       第 15 章      完整项目:从参考图到可交付材质
        │
随查 · 工具书(顶栏切换)      独立板块      节点速查表(416 个可搜索)/ 术语表 / 学习资源

安装与准备

  1. 获取软件:Substance 3D Designer 通过 Adobe Creative Cloud 订阅获取(有 30 天试用)。 「Substance 3D 系列」里,Designer 负责做材质,Painter 负责往模型上画,Stager 负责打光出图, 三者的关系在 01 章会说清。
  2. 硬件:SD 的计算量几乎全在 GPU 上(按 F9 可切到 GPU 引擎,速度差距非常明显), 所以显卡是第一优先项。显存 6 GB 是舒服的起点,8 GB 以上可以放心开 2K/4K 图。
  3. 建议先改的偏好设置(Edit → Preferences):
    • General → Cooking Size Limit:默认 8192,保留即可;它限制的是图的最高烘焙分辨率。
    • General → Memory → Image Cache:默认「自动」约等于系统内存的 75%。一旦缓存溢出到临时目录, 渲染速度会掉一个数量级——如果你经常做 4K 图,适当上调。
    • Engine:确认显卡被识别为 GPU 引擎;Unity / Unreal 的官方插件只能用 CPU 引擎,这点在交付时会遇到。
    • Graph:建议打开「连线自动插入转换节点(auto-insert conversion nodes)」,能省掉大量手动转换。
  4. 三件必须做的准备工作:
    • 准备一个参考图收集习惯:手机开闪光灯拍地面、墙面、木头、金属。闪光灯能拍到细微污渍与划痕—— 这些才是让材质「真」的东西。
    • 通读一遍 Adobe 的《The PBR Guide》(免费),它是本教程 01 章的理论基础。
    • 去 帮助 → 示例图(Sample Substance graphs)下载官方示例 .sbs 文件, 拆开看别人的连线方式。这是免费的、最高价值的学习材料。

01核心概念:灰度思维、PBR 与节点思维

这一章几乎没有操作,但它决定了你后面每一个决定的正确性。90% 的「我做的材质看起来假」, 根源都在这一章的三个概念上。

1.1 SD 到底在做什么

传统贴图流程是「画」:你有一个模型,展好 UV,然后拿画笔在 2D 上画出颜色、高光、法线。 SD 的流程是「算」:你搭一张图(Graph),描述「这一块砖应该长什么样」, 软件按你描述的规则计算出所有贴图。区别在于:

手绘 / 照片贴图Substance 3D Designer 程序化
修改形状每张贴图都要重画改一个参数,全部贴图自动重算
做变体再画一遍拖一个滑块,一分钟出 20 种
分辨率画的时候定死随时重新输出到 512 / 2K / 4K,细节跟着重新计算
一致性法线、AO 与颜色容易互相矛盾全部由同一张高度图派生,物理上必然一致
上手成本低(会画画就行)高(要理解节点、灰度、PBR)
批量生产效率低极高(这正是 3A 项目用它的原因)

注意最后一行:SD 真正的价值不在于「能做得多漂亮」,而在于一次投入、无限复用。 一个参数化好的砖墙材质,可以派生出石墙、混凝土、砌块、地砖——这才是它被行业普遍采用的原因。 所以从第一天起,你就要用「我是在造一台机器,不是在画一张图」的心态来搭图。

1.2 第一概念:灰度思维(Grayscale Thinking)

SD 最反直觉的一点是:你 80% 的工作时间都花在一张黑白的灰度图上。 高度图(Height)不是「贴图之一」,它是整个材质的大脑。

原因很简单:材质的所有视觉信息,本质上都是「表面的形状 + 表面的反射特性」。 形状由高度图描述,而法线(Normal)、环境光遮蔽(Ambient Occlusion)、曲率(Curvature) 全都是从高度图数学推导出来的。你把高度做对了,其余贴图自动就对了。

breakdown_hero
同一块砖墙的六张贴图并排:基础色 / 高度 / 法线 / 粗糙度 / 环境光遮蔽 / 曲率。 把它们放在一起看,就能理解「一套贴图」是什么意思——六张图描述的是同一个表面的六个不同属性, 彼此必须一致(高度凸起的地方,法线、AO、曲率都应该对得上)。
derivative_pipeline
从一张高度图派生出整个贴图集。①高度图是唯一需要「手工设计」的东西;②把它当成模型打光看形体是否成立; ③Sobel 求导得到法线;④多尺度遮挡得到 AO;⑤二阶导得到曲率,用于分离凸边与凹缝;⑥曲率 × AO 是金属边缘磨损类效果的经典组合。

所以 SD 里最常见的「一次一级」工作流是这样的:

① 大形体  Shape        →  砖块、木板、石板的大轮廓(黑=低,白=高)
② 中细节  Detail       →  倒角(Bevel)、灰缝、破损、边缘磕碰
③ 小细节  Surface      →  颗粒、划痕、纤维、噪点、锈斑
        ↓
   高度图完成(Histogram Scan 统一黑白对比)
        ↓
④ 派生     Normal / AO / Curvature
⑤ 上色     Base Color(靠 Gradient Map + 遮罩)
⑥ 反射特性 Roughness / Metallic

1.3 第二概念:PBR 与贴图集(Texture Set)

PBR(Physically Based Rendering,基于物理的渲染)意味着渲染器用同一套物理规律处理所有材质。 这带来两个后果:(1)你的贴图必须写「物理量」而不是「看起来的颜色」; (2)乱填的数值会立刻表现为「假」。目前有两套主流工作流,你必须知道自己用哪一套。

贴图(英文名)中文金属/粗糙度流程
Metal/Roughness
高光/光泽度流程
Specular/Glossiness
色彩空间
Base Color基础色✔ 绝缘体反照率 + 金属反射率色—sRGB
Diffuse漫反射色—✔ 纯反照率,裸金属处为纯黑sRGB
Metallic金属度✔ 0=绝缘体 1=裸金属(是遮罩)—Linear(线性)
Roughness粗糙度✔ 0=镜面 1=全哑光—Linear
Specular高光色—✔ 金属反射率 + 绝缘体 F0sRGB
Glossiness光泽度—✔ = 1 − RoughnessLinear
Normal法线✔✔Linear · 建议 16 位
Height高度 / 位移✔✔Linear · 建议 16 位
Ambient Occlusion环境光遮蔽✔✔Linear
Curvature曲率✔ 数据图✔ 数据图Linear · 16 位
Emissive自发光✔✔sRGB
Opacity / Alpha不透明度✔✔Linear

还有一个你必须建立直觉的概念:粗糙度不是「亮度」,粗糙度是「故事」。 一张全图 0.5 的粗糙度看起来塑料感极强;而真实世界里,同一块地砖的上半部分被踩得发亮(低粗糙度)、 边缘积了灰(高粗糙度)、有一道划痕(变化)。粗糙度图上的变化,就是这张材质可信度的来源。

pbr_concepts
PBR 的物理直觉。上排三个球与下方的微观面示意说明:粗糙度控制的是微观小平面(Microfacet)朝向的混乱程度, 它决定了高光是「集中成一点」还是「散成一片」。下排是整个 PBR 里真正需要记住的六条规则。
pbr_selector
两套 PBR 工作流的贴图清单速查:左栏是主流的金属 / 粗糙度流程(Metal / Roughness), 右栏是高光 / 光泽度流程(Specular / Glossiness)。先确认你的引擎用哪一套,再决定做哪些贴图—— 混用两套流程是最常见的返工来源。
pbr_basics
从零开始逐张加贴图,看材质球怎么一步步「立起来」:①只有基础色 ②降低粗糙度出现高光 ③加入法线,细节真正站起来 ④加入基础色贴图 ⑤加入 AO,缝隙变暗 ⑥加入高度位移,轮廓出现起伏。 这张图解释了「为什么每张贴图都不能省」——省掉任何一张,材质都会退回到前一层的样子。

1.4 第三概念:节点思维(Node Thinking)

如果你做过 Photoshop,第一件要改的习惯是:把「图层」翻译成「节点与连线」。

graph_anatomy
一张材质图(Material Graph)的解剖。左侧是生成器(Generator),中间是滤镜(Filter)与混合(Blend), 右侧是输出(Output)。每个节点是一个操作,连线是数据流,整张图是一个有向无环图(DAG)。
Photoshop 里的做法SD 里的等价做法
新建图层,用画笔涂一块放一个生成器节点(Shape / Gradient / Noise)
图层混合模式选「正片叠底」Blend 节点,把 Blending Mode 设为 Multiply
加图层蒙版把灰度图接到 Blend 的 Mask(遮罩)输入
调整图层不透明度Blend 节点的 Opacity 参数
滤镜 → 高斯模糊Blur HQ Grayscale 节点
色阶 / 曲线Levels / Histogram Scan / Curve 节点
复制图层组做成子图(Subgraph),用实例节点(Instance node)复用
图层组、文件夹框架(Frame)+ 注释(Comment)

由此得出 SD 最重要的思维方式:任何一处颜色或形状,背后都必须能追溯到「它是怎么被算出来的」。 当你发现某个地方不对,你不是去「擦掉重画」,而是去改上游的某一个节点或参数。 这就是为什么「图要干净」在 SD 里不是审美问题,而是能不能继续迭代的工程问题。

workflow
专业工作流的完整链路:形状 → 细节 → 表面 → 高度图完成,再由高度图与遮罩派生出全部贴图。 右下的「反面教材」列出了手绘法线 + 手绘 AO 的典型翻车方式。

1.5 两种连接类型:一张图里的「线」

SD 里的连线是有类型(Type)的,连错会报错或者静默出问题。

连接类型官方颜色装的是什么数据注意
灰度 Grayscale灰色连接点 单通道数据:遮罩、高度、粗糙度、金属度、AO、曲率 绝大多数节点只吃这一种
颜色 Color黄色连接点 RGB 三通道:基础色、自发光、以及法线 颜色运算比灰度贵约 4 倍
双兼容 Grayscale/Color一半灰一半黄 由接入的数据决定自己是哪种 Blend 的前景/背景、Levels 的输入都是这一类

1.6 SD 在 Substance 3D 生态里的位置

Designer

做材质本身。程序化生成贴图集,输出 .sbsar 可调材质。你在这里。

Painter

往模型上画。可以直接加载 Designer 做的 .sbsar,在模型上刷、混合多个材质。 Designer 做「通用材质」,Painter 做「这个具体模型的独特性」。

Stager

打光、渲染、出作品图。做完材质后用它在干净的环境里验证效果、出展示图。

练习练习 01 · 建立你的参考图库与「形体优先」的第一次观察

目标:打开 SD,随便新建一张图,放一个 Perlin Noise 节点,把它接到 Output(用法选 Height)。反复调 Scale 与 Subdivision,只在 2D 视图里看它;然后接一个 Height to Normal,再看一次。

  1. 建立参考文件夹,按「地面 / 墙面 / 木头 / 金属 / 织物 / 自然」分类,先塞 20 张你自己用手机闪光灯拍的照片。
  2. 对着同一张参考图,分别用文字写出它的「大形体 / 中细节 / 小细节 / 污渍」四层,各写一句。
  3. 再打开 帮助 → 示例图,下载任意一个官方 .sbs,只做一件事:数一数它有多少个 Output 节点。
  4. 解释给你自己听:为什么同一张噪声图,接到 Height 和接到 Roughness 上,看起来完全不是一个东西。

参考 / 达标标准

  • 你开始用「形体」而不是「花纹」描述材质;你能说出 SD 的图是「可重算的规则」而不是「一张图」
  • 参考图库里有 20 张以上分类好的照片,且每张都写得出四层结构的文字描述
  • 能正确指出官方示例里 Output 节点的数量与各自的 Usage(用法)
  • 关于「噪声接 Height 还是 Roughness」你能给出正确解释:Height 描述形状,
  • 同一张噪声接 Height 会让表面凸起(可以用打光看出来),接 Roughness 只会让反射变化而形状不变

02界面与操作:把工具摸熟

这一章的目标是让你在 10 分钟内不假思索地完成:找到节点、连好线、看到结果、调整参数。 SD 的界面分区非常固定,只要记住「左边找节点、中间连线、右边调参、下面看结果」就够了。

2.1 六个区域

ui_layout
Substance 3D Designer 的工作区分区示意。①库(Library)②图视图(Graph View)③属性(Properties) ④图参数(Graph Parameters)⑤3D 视图 ⑥2D 视图与直方图。右侧同时展示了「可发布参数」与 3D 预览球。
区域英文原名你在这里做什么
资源管理器Explorer管理图(Graph)、文件夹、导入的位图资源。左上角的树状结构。
库Library节点库。按分类浏览,或者用搜索框直接搜节点名。这是你最常看的面板。
图视图Graph View主战场。放节点、连线、整理结构。
属性Properties选中节点的参数。所有调节都在这里。
图参数Graph Parameters你「发布(Expose)」出来的可调参数,也是 .sbsar 上用户能调的滑块。
2D 视图2D View显示任意节点的灰度 / 颜色输出,右侧带直方图(Histogram)。
3D 视图3D View把当前材质套到一个球 / 平面 / 自定义模型上,在打光环境里看最终效果。验收必须看这里。

2.2 图视图里的四件基本操作

加节点
在图视图空白处按 空格 或 Tab 调出搜索框,输名字回车。也可以从左侧库直接拖进来。
连线
从一个节点的输出插座拖到另一个节点的输入插座。拖动时软件会高亮所有兼容输入。
移动 / 对齐
框选后拖动。选中多个节点时工具栏会出现对齐按钮(左对齐 / 顶端对齐 / 等距分布)——用它,不要手工摆。
预览某节点
单击节点,在右下 2D 视图中查看;或右键节点 → View Output。

2.3 插座的颜色与类型

SD 的插座(Socket)按数据类型着色,理解它就能避免 80% 的连线报错:

颜色类型典型输出能接什么
灰(Grayscale)灰度噪声、遮罩、高度、粗糙度所有灰度输入
黄 / 彩(Color)颜色基础色、自发光、Gradient Map颜色输入
灰 / 彩双兼容Grayscale 或 Color多数滤镜节点的输入两种都能接,按接入的类型工作

2.4 节点上的信息条

每个节点的下方会显示它的当前分辨率与位深,这是排查问题最快的手段:

1024x1024  L16      ← L = 灰度(Luminance)  C = 颜色(Color)
                      8 = 8 位整数  16 = 16 位整数  16F = 16 位浮点  32F = 32 位浮点

当你发现某张贴图「糊了」或者「有奇怪的色带」,正确做法是:从输出节点向上游逐级看标签, 找到第一个分辨率或位深不对的节点。这条排查法在本章练习里会用到。

2.5 第一次完整操作:把一张噪声送到输出

  1. 新建一个 Substance 图:在资源管理器里右键 → New → Substance graph,模板选 Standard Material。
  2. 图视图里按 空格,输入 perlin,回车。得到 Perlin Noise 节点。
  3. 再按 空格,输入 output,回车。得到 Output 节点。
  4. 把 Perlin Noise 的输出拖到 Output 的 Input。单击 Output 节点,在 2D 视图里看到黑白云。
  5. 单击 Perlin Noise,在右侧属性面板把 Scale 从 4 调到 16,看 2D 视图的变化。
  6. 单击 Output 节点,在属性面板找到 Usage(用法),把它设成 Height。
  7. 切到 3D 视图,看这张灰度图真的变成了表面的起伏。

这七步包含了 SD 的全部基本循环:找节点 → 连线 → 看结果 → 调参数 → 确认用法。 后面所有章节都是在这个循环上叠加更多的节点。

2.6 3D 视图的用法

3D 视图不是「可有可无的预览」,它是唯一能判断材质好坏的窗口。用法要点:

  • 默认是一个材质球(Material ball)。可以切换成平面(Plane)、圆柱、自定义网格。
  • 必须转动光源方向多看几个角度。在顶光下看着完美的材质,侧光下可能一片死平。
  • 必须同时检查正视与掠射(视线贴近表面)。掠射角下菲涅耳(Fresnel)反射会显著增强, 这是检验粗糙度是否合理的关键角度。
  • 环境贴图(Environment)可以换成更接近目标场景的 HDRI。做室内木地板就用室内环境去验证。
mat_balls
八种课程材质的 3D 预览球(全部为本文档脚本用 GGX 微面光照实时渲染)。 从左上到右下:砖墙、木地板、金属板、石墙、掉漆金属、地形、皮革、木桶(综合)。 请注意每一张的粗糙度变化方式都不同——金属板是拉丝的各向异性,皮革是凹凸导致的明暗破裂, 地形是坡度导致的粗糙度差异。这就是「粗糙度讲故事」的具体样子。

2.7 界面规范:从第一天就像专业人士一样搭图

图会越长越大。到了 200 个节点以后,「能不能看懂自己两个月前做的图」就成了效率问题。 Adobe 官方的最佳实践(Graph Creation Etiquette)总结成一张清单:

结构

  • 所有输入放左侧、输出放右侧,并在竖直方向对齐
  • 数据流统一从左到右
  • 把大形体的节点放左边,细节节点放右边,噪声源沿下方摆放
  • 用框架(Frame)分组:形状 / 材质属性 / 输出

可读性

  • 节点重命名为有语义的名字(01_brick_mask 而不是 Tile Generator 3)
  • 框架命名与节点标签用同一套词
  • 关键节点加注释(Comment)说明「为什么」
  • 大图用导航图钉(Navigation Pin,F2)
  • 长连线用 Alt+Shift+拖拽 重新走线

练习练习 02 · 界面熟练度与分辨率排查

目标:不看教程,独立完成「新建图 → 加三个不同类型节点 → 连到两个不同 Usage 的 Output → 在 3D 视图里看到效果」的全过程,全程只用快捷键调出节点。

  1. 故意制造一个「分辨率事故」:放一个 Bitmap 节点(导入任意一张小图),把它接到链路上, 观察整条链路与输出节点的分辨率标签变成了多少,然后再把它改成 Relative to parent 看发生了什么。
  2. 把某一段链路的节点输出格式强制改成 16 位整数,对比 8 位与 16 位在高度图渐变上的差异 (提示:把 2D 视图放大到 800% 看色带 / 阶梯)。
  3. 把一个 Blend 节点的背景输入设为 8 位、前景输入设为 16 位,观察输出是多少位,并解释原因。

参考 / 达标标准

  • 你能在不看文档的情况下完成基本建图流程;你能解释「为什么贴图糊了」并定位到具体节点
  • 能复现并解释 Bitmap 节点造成的分辨率劫持
  • 能看出 8 位高度图在缓变区域的色带(Banding),并知道高度与法线应用 16 位
  • 能正确说出 Blend 跟随背景输入这一规则

03图(Graph)的解剖:节点、连线、输出与参数

这一章把第一章的「节点思维」落实成具体的结构。读完你应该能回答三个问题: 一张图由什么组成?输出节点决定什么?参数在哪里调、怎么变成别人能用的滑块?

3.1 一张图的完整结构

graph_anatomy
一张材质图的解剖:生成器(Generator)→ 滤镜(Filter)→ 混合(Blend)→ 输出(Output)。 每个节点是一个操作,每条连线是一次数据传递,整张图构成有向无环图(DAG)。

就四类东西:

节点 Node
一个操作。有输入插座、参数、输出。SD 里所有操作都是节点,没有「菜单命令」这种东西。
连线 Link
把上游的输出交给下游的输入。连线是有类型的(灰度 / 颜色 / 法线 / 材质),类型不匹配会报错。
输出 Output
特殊的节点,标记「这一路数据最终要成为哪张贴图」。一张图至少要有一个输出节点,否则无法发布。
参数 Parameter
节点的可调值。它可以从节点「发布」到图级别,成为最终 .sbsar 上用户能拖的滑块。

SD 官方把「每一处都记录它是怎么算出来的」称为图(Graph)的核心价值。这和图层(Layer)思维的最大区别是: 图层里你随手涂的一笔,三个月后你完全不知道当时为什么涂;而图里每一个像素都能追溯到某个参数。

3.2 图的类型(Graph Type)

SD 里所有「图」都是同一个类别的像素图(Pixel Graph,官方叫 Substance graph / 复合图), 但通过类型属性(Type)告诉软件它是干什么用的:

类型(Type)用途常见输出
Standard Material标准的方形平铺材质——你 90% 的时间都在这基础色 / 粗糙度 / 法线 / 高度 / AO …
Decal Material贴花:带透明度的叠加材质(血迹、涂鸦、破损)基础色 + 不透明度
Atlas Material图集:一张图里排布多个不同的图案基础色 / 法线 / 遮罩
Filter滤镜:给 Painter 用的「处理已有贴图」的图处理后的贴图
Texture Generator纯纹理生成(不构成完整材质)任意通道
Mesh-Based Generator基于网格生成(配合 3D 模型)按网格排布的图案

3.3 输出节点(Output)与用法(Usage)

输出节点看起来只是一个「终点」,但它身上有一个决定命运的属性:Usage(用法)。 它有三重作用:

  1. 告诉 3D 视图「这张图该往哪个着色器通道上贴」;
  2. 告诉 Unity / Unreal 的官方插件「这张图该进哪个贴图槽」;
  3. 决定导出时的文件名建议与色彩空间建议(贴图通道自动识别 sRGB / Linear)。
output_map
输出节点的用法(Usage)与主流引擎贴图槽位的对应关系。sRGB 一栏是导入设置的关键: 带颜色的图要开 sRGB,数据类贴图(法线/粗糙度/金属度/AO/高度)必须关闭 sRGB。

输出节点还有几个常用的属性:

属性含义建议
Identifier唯一标识符,导出文件名与脚本调用都用它不要留默认的 output_1,改成 normal、roughness
Label人类可读标签与 Identifier 语义一致:Normal / Roughness
Description说明文字写「用于什么、有什么约定」
Usage用法,见上图必填,且一个输出只选一个
Color space色彩空间标记颜色类 = sRGB;数据类 = Linear
Group分组,用于「材质链接模式」把多通道折叠成一个胶囊做多通道材质时按 Group 归类

3.4 基础参数(Base parameters):每个节点都有

除了节点自己的参数,每个节点、每张图都共享一组「基础参数」。理解它们,你才能控制分辨率、位深与平铺:

参数作用默认 / 取值范围
Output Size输出尺寸。这不是节点,是参数图:相对父级;节点:相对输入。用 log₂ 表示,10 = 1024 px
Output Format位深与数据类型8 bit / 16 bit / HDR 16F / HDR 32F,默认 8 bit
Pixel Size像素代表的物理尺寸(配合 Physical size)做真实比例材质时使用
Pixel Ratio像素长宽比:拉伸或方形一般保持方形(Square)
Tiling Mode平铺模式:无 / 水平 / 垂直 / 双向做四方连续材质时设为双向
Random Seed随机种子。决定「随机」的结果,同样的种子永远得到同样的结果可继承,可点骰子按钮换一个

分辨率继承(Inheritance)——这是全 SD 最重要的机制

三种继承方式:

  • 绝对(Absolute):不管别人多大,我就是这么大。发布 .sbsar 时绝对值会被「锁死」。
  • 相对输入(Relative to input):跟随我的主输入(Primary input)。这是节点的默认值。
  • 相对父级(Relative to parent):跟随我所在的图(或实例节点)。这是图的默认值。

相对值用 log₂ 表示,范围 −12 ~ +12,每一级就是 ×2 或 ÷2。举几个例子:

父级 1024×1024,节点相对值 (0, 0)        →  1024×1024
父级 1024×1024,节点相对值 (1, 1)        →  2048×2048   (像素数 ×4,开销也 ×4)
父级 1024×1024,节点相对值 (-1, -1)      →  512×512     (做低频噪声时非常值得)
父级 1024×1024,节点相对值 (1, -1)       →  2048×512    (非方形,做条带类图案)

位深怎么选

贴图建议位深原因
Base Color / Diffuse / Roughness / Metallic / AO8 位够用,省显存;粗糙度的缓变区域若出现色带再升 16 位
Height(高度)16 位8 位只有 256 级,缓坡会出现明显阶梯,位移时会变成台阶
Normal(法线)16 位法线是向量数据,8 位的量化误差会让平滑表面出现块状色斑
Curvature / Position / World Space Normal / Thickness16 位都是数据图,精度直接影响遮罩质量

Adobe 官方的性能建议是「不需要 16 位时就用 8 位」。另外注意:SD 的 CPU 引擎(SSE2)并不真正支持 16 位颜色与 8 位灰度, 只有 GPU 引擎支持全部 8/16 × 灰度/彩色的组合;而 Unity / Unreal 的官方插件只跑 CPU 引擎。

3.5 参数、发布(Expose)与 .sbsar

参数有三个层次,这是 SD 从「一张图」变成「一个产品」的关键:

  1. 节点参数:某个节点上的旋钮。只在这张图里有效。
  2. 图参数(Graph Parameters):从节点参数「发布」出来的。发布后,它就从节点上搬到了图级别, 外部(Painter、引擎、脚本)可以改它。
  3. .sbsar 上的参数:发布成资产文件后,这些参数就是最终用户看到的 UI。
参数类型外部编辑器用途举例
Float滑块污渍量、磨损程度、对比强度
Integer步进框 / 滑块砖的行数、瓦片的列数、种子
Boolean复选框是否启用破损、是否启用苔藓
Color取色器基础色基调
Vector2 / 3 / 4多格输入二维偏移、UV 缩放

发布时可以设置:唯一标识符(不能有空格)、标签、分组(用 / 做子组)、描述/提示、 默认值、最小值、最大值、是否钳制(Clamp)、步进、以及「Visible If」条件显示。

3.6 .sbs 与 .sbsar

.sbs.sbsar
是什么可编辑的工程文件(包)发布后的材质资产(编译产物)
能看内部吗能,完整图层/图/资源不能反编译;但可以拖进别的图当节点用
分辨率你在图里定的动态——由调用方决定,可以 512 也可以 4K
参数全部可改只有发布过的参数可改
适用制作、迭代、团队协作交付、给 Painter/引擎/他人使用
发布方式—资源管理器右键包 → Publish .sbsar file…(Ctrl+P)

发布前的自检清单(Adobe 官方也强调)

  • 所有分辨率设为相对父级(否则 .sbsar 失去动态分辨率能力);
  • 每个输出节点都填好了 Identifier / Label / Usage;
  • 参数已命名、分组、设好范围与默认值;
  • 图里没有断开的红线(错误连线);
  • Bitmap 节点的输出尺寸保持绝对,否则发布时位图会被压缩到 256×256;
  • 纯工具用的辅助子图把 Exposed in SBSAR 设为 No,不要把内部图暴露给用户。

3.7 子图(Subgraph)与实例(Instance)

当你在图里发现「这一段我在别处也要用」,就把它做成子图:

  1. 在资源管理器里新建一张图(比如叫 util_bevel),内部只有 Input 与 Output 节点;
  2. 把要复用的那段逻辑在里面搭好,输入接到 Input 节点,结果接到 Output 节点;
  3. 回到主图,把这张图从资源管理器拖进主图 —— 得到的就是它的实例节点(Instance node)。

实例节点的规则:

  • 它有自己独立的一套参数值。同一个子图放三次,可以有三种砖行数——这正是复用的意义。
  • 它也有自己独立的输出尺寸 / 位深 / 平铺设置。
  • 颜色标签告诉你它的来源:深红=来自 .sbs(可以「打开引用」查看内部), 绿色=来自 .sbsar(已编译,只能看到参数,看不到内部)。
  • 想改内部逻辑?改一次子图,所有实例同步生效。但所有实例的参数值不会因此改变,这是好事。

练习练习 03 · 建立一个可复用的「倒角(Bevel)」子图

目标:做一张叫 util_bevel 的子图: 输入一张灰度高度图,输出「加了倒角的高度图」。实现思路:用 Blur HQ Grayscale 把输入模糊, 再用 Blend 的 Max(或 Min 做反向)与原图合并,让边缘出现斜面。

  1. 在子图里加两个 Input 节点(原图、模糊强度)与一个 Output 节点,确保子图自己可以独立预览。
  2. 回主图,把 util_bevel 拖进来用三次(分别处理砖块、灰缝、破损), 每份给不同的模糊强度,确认它们互不影响。
  3. 给这个子图加两个可发布参数:bevel_size(Float,0~16,默认 4)与 bevel_strength (Float,0~1,默认 0.6),并在子图内部用 Get Float 节点引用它们。

参考 / 达标标准

  • 子图能独立预览;主图里三次引用互不干扰;发布参数能正常拖动并实时看到倒角变化
  • 参考达标标准:原高度图的边缘出现约 2~6 像素的斜面,2D 视图放大到 400% 能清楚看到过渡带, 且过渡带不是一条硬边而是渐变
  • 你能说清楚「为什么倒角比直接模糊更正确」:模糊会把整个高度图都糊掉(尖角变成圆的、平面也变软), 而倒角只作用于边缘,平面区域保持平坦

04生成器(Generators):从「无」造出形状与图案

生成器是一张图的源头。SD 官方把节点库里的生成类节点放在 Texture generators(纹理生成器)分类下, 并进一步分为 Noises(噪声)与 Patterns(图案)两大族。

node_map
节点家族地图。①生成器 ②滤镜 ③混合 ④派生 ⑤遮罩 ⑥散布 ⑦进阶。 建议按 ①→⑥ 的顺序练熟,再进入 ⑦;顺序反了会非常痛苦。

4.1 噪声(Noise):程序化纹理的地基

噪声不是「随便的随机」。真正的噪声有几个必须理解的属性:

频率 Scale
单位面积内的变化次数。数值越大 = 越细碎。这是最常调的参数。
倍频 / 八度 Octaves
把「高频细节」按振幅递减叠加到「低频大形」上的层数。层数越多细节越丰富,但也越贵。
粗糙度 / 增益 Gain / Roughness
每一层振幅的衰减速度。拿到 0.5 是自然衰减;偏大就变得粗糙扎手。
种子 Seed
换一个种子就换一张完全不同的随机图,但同一张图永远可复现。
可平铺 Tileable
高质量噪声默认是四方连续的(左右、上下能无缝拼接)。这是做材质的基本要求。
noise_family
噪声家族。左上起:值噪声、柏林噪声、分形求和、脊状分形、Voronoi F1(距离)、 Voronoi F2−F1(等距边界)、Voronoi 单元随机、云状噪声(对比增强后)。注意每种噪声的性格完全不同: Perlin 像云,Cells/Voronoi 像细胞或碎石,F2−F1 天生就是「缝」。
节点中文性格 / 适合做什么
Perlin Noise柏林噪声云雾、自然渐变、有机起伏。SD 里最常用的噪声
Value Noise值噪声比 Perlin 更「块状」,做格子化/像素化质感
Gaussian Noise高斯噪声纯随机噪点,做颗粒、磨砂、胶片噪点
Fractal Sum Base分形求和多个八度叠加,参数控制最细,做地形类基础
Fractal Sum分形求和(进阶)可自定义每层噪声类型与权重
Clouds / Clouds 2云状噪声即开即用的云朵感,做烟、雾、陈旧污渍
Cells / Cells 1..4细胞 / 泰森多边形碎石、鳞片、细胞、龟裂的骨架
Voronoi / Voronoi Fractal泰森多边形同上,可控性更强,可输出距离
White Noise / White Noise Fast白噪声逐像素纯随机。做细颗粒,比高频率 Perlin 便宜得多
Grunge 系列脏迹预制的污渍/陈旧图案,做「脏」的快捷方式
3D Perlin Noise / 3D Noise三维噪声做体积感、无接缝的三维扰动(配合 3D 视图节点)

八度(Octaves):为什么叠加比单一频率好

把同一张噪声从 1 个八度加到 7 个八度,你能清楚看到「细节层次」是怎么一层层长出来的:

octaves
同一张分形噪声,八度数从 1 递增到 7。1 个八度只有大形(像没画完的气球), 4~5 个八度开始有真实感,7 个八度细节丰富但计算量显著上升。 结论:一般 4~6 个八度是性价比最高的区间,多余的高频可以改用一张 White Noise 以极低成本叠上去。
frequency
细节层级金字塔:把「大形体 → 中细节 → 小细节 → 微观颗粒」四层分开看。
一张有说服力的材质,四层的频率必须拉开差距——如果四层都差不多细, 叠起来只会糊成一团。这也是第 07 章那张「新手 vs 熟练」对照图里最左边的错误。

4.2 图案(Patterns):受控的形状

噪声给你「自然但不可控」,图案给你「可控但不自然」。真实材质永远是两者结合。

shapes
基础形状族。①圆 ②方 ③柔边圆盘 ④多角星(角度 × 径向组合)⑤三角 ⑥胶囊 ⑦环 ⑧多边形 ⑨径向衰减(最适合当遮罩)。这些都可以用 Shape、Polygon、Gradient、 Gradient Radial 等节点做出来,或用 Shape Splatter 的 SDF 函数构造。
节点中文要点
Shape形状内置圆/方/星/多边形等,参数化程度高,带柔边与旋转
Polygon / Polygon 2多边形边数可调,做多角形、齿轮、多边形砖
Gradient 系列渐变线性 / 径向 / 角度 / 菱形。做方向性遮罩、圆柱渐变
Checker棋盘调试 UV 与分辨率的最佳工具,也能做格子图案
Stripes条纹木纹、布纹、拉丝金属的基频
Tile Generator瓦片生成器规则排列的核心节点:行数/列数/缝隙/图案随机
Brick Generator砖块生成器专门做砖墙,交错排列一步到位
Tile Sampler图案阵列散布把「一个图案」散布成阵列,支持随机旋转/缩放/位移。散布类最重要节点
Text / SVG文字 / 矢量图文字标牌、Logo、矢量图案。也可导入外部 SVG
Uniform Color纯色做常量、做纯黑纯白(金属度、遮蔽等)
gradients
四种最常用的渐变:线性 / 径向 / 菱形 / 角度。渐变是「遮罩」的原材料—— 把渐变接到 Blend 的 Mask 上,就能让效果沿某个方向逐渐出现或消失, 这是做「从下往上的水渍」「从中心向外的磨损」这类效果的唯一正解。

4.3 形状怎么变成「高度」

hierarchy
细节层级金字塔:大形体 → 中细节 → 破碎 → 材质定义,以及每一层在 SD 里对应哪些节点。
顺序不能颠倒:脏迹、破损永远是加在「已经完整的形状」之上的。 另外注意这个金字塔左边的图——它演示了「只用一层噪声」与「四层叠加」的区别。

生成器输出的形状默认是「白=有、黑=无」的遮罩。把它直接接到高度输出是可以的, 但那样的高度只有两个值(纯黑与纯白),做出来的东西像纸片。要让形状变成实体,必须:

  1. 限制取值范围:用 Histogram Scan 或 Levels 把白值从 1.0 压到 0.7~0.85, 留出「凸起」的空间;
  2. 加倒角(Bevel):用 Blur + Blend(Max) 在边缘做出斜面;
  3. 把不同层级的高度用 Max 相加,而不是用 Add:Add 会把白值累加出现纯白峰值(Peaking), Max(变亮)才是「谁高用谁」。这是最经典的初学者错误之一。

练习练习 04 · 造一张能看出「三种频率」的高度图

目标:只用生成器类节点(不允许用 Blend 以外的滤镜), 做一张可以清楚看出「大形体 / 中细节 / 小细节」三层的高度图。

  1. 第一层:Tile Generator 或 Brick Generator 造出规则排列的方形/砖形, 用 Histogram Scan 把白值压到 0.75 左右。
  2. 第二层:叠一张 Perlin Noise(Scale 约 8~16,4~6 个八度),用 Blend 的 Overlay 低不透明度(0.2~0.35)叠加,制造轻微的表面不平。
  3. 第三层:叠一张 White Noise Fast 加 Blur HQ,用 Multiply 以 0.15 的不透明度 叠加极细颗粒。
  4. 全程用 Max 而不是 Add 叠高度,并在 3D 视图里转动光源检查有没有出现纯白削顶。

参考 / 达标标准

  • 高度图在黑(缝隙)与白(凸起)之间有明显层次;2D 视图的直方图(Histogram)不是只有两端两个尖峰, 而是分布在整个区间
  • 参考达标标准:把高度图接上 Height to Normal 后,法线图上三条频率的痕迹都能分辨出来; 3D 视图里转动光源,表面有从大到小的三层起伏,且没有大块死白的区域
  • 你能解释:为什么第三层的白噪声必须先用 Blur 处理,直接接上去会怎样(提示:法线会碎、放大后像砂纸)

05滤镜(Filters):改造已有的图

生成器造出原料,滤镜负责把原料变成能用的东西。SD 的滤镜在官方节点库里分成 调整(Adjustments)、混合(Blending)、模糊(Blurs)、通道(Channels)、 效果(Effects)、法线贴图(Normal Map)、平铺(Tiling)、变换(Transforms)八类。 本章只讲你每天都会用的那些。

5.1 模糊(Blur):不只是「糊一下」

blur_radius
同一张图在不同模糊半径下的结果。小半径(2~5)用于做倒角、软化硬边; 中等半径(11~24)用于做形体扭曲、大面积软遮罩;大半径(48)几乎只剩形状轮廓, 常用于「把细节抹掉只留下大形」再与原图相减,从而提取细节。

节点中文 / 说明典型用途
Blur HQ Grayscale高质量灰度模糊(默认选择)倒角、软化、软遮罩、提取大形
Blur HQ Color高质量颜色模糊彩色图软化,做色彩过渡
Non-Uniform Blur非均匀模糊(按方向与强度各向异性)木纹、拉丝金属、风蚀痕迹的关键节点
Non-Uniform Directional Blur非均匀方向模糊沿指定方向拉丝,可控性更强
Directional Blur方向模糊运动模糊感、笔触感、沿方向拉长
Anisotropic Blur各向异性模糊拉伸方向与强度分别控制
Slope Blur Grayscale坡度模糊——沿坡度方向做侵蚀岩石、被水冲刷的沟壑、边缘磨损
Multi Directional Warp多方向扭曲复杂的有机边缘形变

最实用的三个技巧

  1. 提取细节:原图 减去 模糊后的原图 = 只有边缘和颗粒的「高频图」。 这个技巧用于单独控制细节的强度,做「磨损」「凸出」类效果。
  2. 做倒角:原图 与 模糊后的原图 取 Max → 边缘出现斜面。倒角的大小就是模糊半径。
  3. 用模糊代替缩小:需要「大形」时,先缩小分辨率(相对值 −2)再模糊,比在原尺寸上大半径模糊快得多。

5.2 调整(Adjustments):把灰度「调对」

判断一张灰度图有没有「调对」,最快的办法是看它的直方图(Histogram)—— SD 的 2D 视图右侧就自带一个。一张健康的图,数值应该铺满整个区间;如果两个尖峰挤在中间, 那它一定「灰蒙蒙」。

hist_plot
直方图长这样。横轴是从黑到白,纵轴是每个亮度上的像素数量。
三个要看的点:①左侧是否贴住 0(有没有纯黑)②右侧是否贴住 1(有没有纯白) ③中间是否断开或过度堆积。这张就是「中间调堆积、两端空着」的典型病态直方图。
histogram
直方图(Histogram)的四种状态。①原始:数值堆在中间调,既没有纯黑也没有纯白,看起来「灰蒙蒙、没有对比」; ②Auto Levels 拉伸到全 0~1,立刻精神了;③Histogram Scan 重映射,可以自由控制黑白点; ④线性灰阶作为参照。新手图「平」的头号原因就是没有做这一步。
节点作用什么时候用
Levels黑白点 + 中间调(Gamma)精调对比;也常用它把一个区间的值压进另一个区间
Histogram Scan用一个「位置 + 对比」把灰度阈值化最高频使用的调整节点:做硬边遮罩、限制高度范围、清理灰边
Histogram Range把输入区间线性映射到输出区间整体压低或抬高数值,不影响对比
Histogram Select从灰度里挑出某个数值区间把随机的灰值变成互斥的几组遮罩
Auto Levels自动拉伸到全 0~1快速救图;注意它永远输出满量程,可能过度
Curve曲线编辑器(可自由画映射曲线)非线性的精细控制,做自定义响应
Invert Grayscale反相1 − x。做「反遮罩」最常用
Blend(低不透明度)用不透明度做线性插值「把两张图按比例混」比 Add/Multiply 更可控
HSL / Color Correction色相 / 饱和度 / 明度调整给颜色图做统一色调修正

5.3 变换(Transforms)与平铺(Tiling)

节点用途
Transform 2D平移 / 旋转 / 缩放 / 翻转。也可用它的输出尺寸做「分辨率隔离」
Mirror镜像。做对称图案、把一张图变成「蝴蝶」
Quad Transform把图分成四块分别变换,做四方连续的关键工具
Make It Tile Patch把一张非无缝图「补」成无缝(含柔化边界)
Make It Tile Photo照片级无缝化,适合导入的位图
Smart Auto Tile自动寻找最佳接缝位置做无缝化
Non-Square Transform处理非方形贴图(长条、条带类材质)
tiling
四方连续(Tileable)的检验方法:把图案平铺 3×3 看有没有接缝。 ②是程序化噪声(天生无缝),③是把一张非无缝图直接平铺的结果,接缝非常明显。 任何要在模型上重复平铺的材质,都必须通过这个 3×3 检查。

5.4 形变类效果(Effects):让边缘「活」起来

完美的几何边缘看起来像塑料。真实世界的边缘是扭曲的、被侵蚀的、随手做出来的。 这三个节点是解决这个问题的核心:

warp
方向扭曲(Directional Warp):用一张图(强度图)去「推」另一张图的像素。 ①是输入图(Voronoi 边界),②是驱动它的强度图,③是输出——原本笔直的边界被推成有机的、撕裂的形状。 参数要点:Warp Angle 控制推动方向,Intensity 控制推动距离; 用它处理「太规整」的图案是 SD 里最有价值的一步操作。
slope_blur
Slope Blur(沿坡度侵蚀):把噪声接到 Slope 输入,节点会沿着噪声的坡度方向 反复取最小值(Min 模式),形成被水流冲刷出的沟壑。①输入高度 ②坡度驱动图 ③输出。 这是做岩石、沙地、风化金属、以及任何「被侵蚀」质感的关键节点。 参数要点:Samples(采样数)拉高、Intensity 放低,效果才自然; 在噪声与 Slope Blur 之间插一个 Blur HQ 会让边界更有机。
节点做什么关键参数
Directional Warp用强度图沿一个方向推像素Intensity、Warp Angle、Mode
Vector Warp用颜色图(RG 通道 = XY 位移)推像素适合在 Painter / 引擎里做流动
Slope Blur Grayscale沿坡度侵蚀 / 堆积Samples(采样数)、Intensity、Mode(Min=侵蚀 / Max=堆积)
Multi Directional Warp多个方向叠加扭曲做复杂的有机破面
Warp用强度图做全向扭曲比 Directional Warp 更「糊」,但更自然

5.5 通道(Channels)与法线类滤镜

Channel Shuffle
通道重组 / 合并。把一张图的 R 通道搬到另一张图的 G 通道, 或者把三个灰度图合成一张 RGB(做 ORM 打包时必用)。
Grayscale to Color
灰度转颜色(三通道同值),让灰度数据能进入颜色链路。
Normal
合并 / 调整法线。可以用它叠加额外的法线细节、调制法线强度。
Normal Blend
把两张法线图合并(等效于叠加两层凹凸)。
Height to Normal
最重要的一步:由高度图生成切线空间法线图。参数里的 Normal Format 就是 DirectX / OpenGL 的绿通道开关。
Edge Detect
边缘检测。从形状或高度图里提取出「边界线」,

练习练习 05 · 把「太规整」的图案变自然

目标:复用练习 04 的规则排列高度图(或重新用 Brick Generator 做一张), 目标是让它的边缘不再笔直。

  1. 叠一张 Perlin Noise(Scale 约 6~12)作为强度图,接到 Directional Warp, 把砖块的边缘推歪。Intensity 从 0.05 开始试,直到「能看出被推歪但砖块仍可辨认」。
  2. 再叠一张 Clouds 接到 Slope Blur Grayscale,Mode 选 Min, Samples 设 16~32、Intensity 设 0.2~0.4,做出沿边缘的侵蚀。
  3. 用 Levels 或 Histogram Scan 重新统一对比,把取值范围压回 0.05~0.9。
  4. 把非无缝的一版和加了 Make It Tile Patch 的一版各平铺 3×3 对比。

参考 / 达标标准

  • 砖块/图案的边缘不再笔直;直方图仍然跨满整个 0~1 区间;3×3 平铺看不到接缝
  • 参考达标标准:对照
    tiling
    上面平铺对比图
    的第 ② 张——即使图案是手工造的, 平铺 3×3 后也不应出现明显的直线接缝;对照
    warp
    方向扭曲图
    的第 ③ 张, 边缘应该是连续的波浪而非锯齿
  • 进阶自测:把 Directional Warp 的 Intensity 一路拉大到 0.5,观察图案「化掉」的过程—— 这就是这个节点的失效边界,记住它在哪

06混合(Blend):SD 里最重要的一个节点

Adobe 官方文档在 Blend 节点那一页的开头写着:「Blend 是所有原子节点里最有用的一个。」 这句话不是客套。你做的每一张材质里,绝大部分「叠细节、加污渍、做磨损、上颜色」的动作, 最终都落在 Blend 节点上。这一章要讲透它。

blend_structure
Blend 节点的四个输入与四个关键参数。注意背景(Background)是「主输入(Primary)」, 它决定了整条链路往下传的分辨率与位深。前景与背景必须是同一类型——灰色配彩色会直接报错。

6.1 四个输入与四个参数

输入 / 参数类型说明
Foreground(前景)灰度/颜色上层图像。就是「要往上叠的东西」
Background(背景)灰度/颜色 · 主输入底层图像。它决定输出跟随谁的分辨率与位深
Opacity(不透明度输入)灰度可选。用一张灰度图动态控制混合强度——这就是「遮罩」
Alpha(透明度通道)灰度只有当输入是带 Alpha 的颜色图时才有意义
Opacity(参数)Float与 Opacity 输入相乘。输入给「哪里生效」,参数给「生效多少」
Blending mode整数(静态)混合模式。静态参数 —— 发布 .sbsar 后用户改不了,要用 Switch 绕开
Alpha blending整数(静态)四种:使用源 Alpha / 忽略 Alpha / 直通 Alpha / 预乘 Alpha
Cropping areaFloat4(静态)裁剪区域。被裁掉的地方只显示背景。

6.2 混合模式全表

下面是 Adobe 官方「Blending modes」页面记录的 12 种模式,按官方顺序列出:

blend_modes
十五种混合模式的效果对照(本文档脚本按各自的数学定义逐一计算)。 前两张是输入:前景是一张 Fractal 噪声,背景是一张左上暗、右下亮的对角渐变。 请重点观察:Multiply 只会变暗、Screen 只会变亮、Max/Min 是「取高/取低」、 Overlay 保留对比、Difference 取差值。看懂这一张图,你就理解了 SD 里绝大多数叠加行为。
模式中文习惯译名数学 / 行为典型用途
Copy复制前景覆盖背景(按不透明度)替换、开关式切换
Add (Linear dodge)相加 / 线性减淡Bg + Fg,超过 1 截断加亮、加光
Subtract相减Bg − Fg,小于 0 截断为纯黑挖掉一块、做凹陷
Multiply正片叠底Bg × Fg,结果只会更暗叠污渍、颗粒、暗化,最常用之一
Add sub加/减(中线分割)前景 > 0.5 的部分相加,< 0.5 的部分相减做「推/拉」双向位移
Max (Lighten)变亮 / 最大值取两者较高值叠高度图(不会削顶)、取凸起,最常用之一
Min (Darken)变暗 / 最小值取两者较低值做侵蚀、挖缝隙、限制范围
Switch开关Opacity=0 时前景那一路完全不计算;=1 时背景完全不计算性能优化的关键:关闭不用的分支
Divide划分Bg ÷ Fg反相性的提亮,做「去污渍」
Overlay叠加Bg < 0.5 时做 Multiply,> 0.5 时做 Screen保留对比地叠纹理,最常用之一
Screen滤色1 − (1−Bg)(1−Fg),结果只会更亮提亮、加高光、加发光
Soft light柔光前景亮于 50% 则提亮,暗于 50% 则压暗温和地叠细节,不破坏整体明暗

6.3 用不透明度(Opacity)做「多一点 / 少一点」

这是最容易被忽略、但用途最广的一招:保持混合模式不变,只调不透明度, 就能把任何效果从「完全没有」连续调到「满强度」。这比换模式更可控。

blend_opacity
同一组输入(Screen 模式)在不透明度 0 / 0.25 / 0.5 / 0.75 / 1.0 下的连续变化。 注意 0.25~0.5 区间通常最耐看——很多新手把细节叠到 100%,结果材质看起来又脏又糊。 专业做法是「叠到 30% 觉得刚好,那就用 20%」。

6.4 遮罩(Mask):混合的「局部化」

不使用遮罩的混合是全局的(整张图一起变)。一旦把一张灰度图接到 Opacity 输入, 混合就变成了「只在白的地方生效、黑的地方不生效、灰的地方按比例」。这就是遮罩。

blend_focus
遮罩的威力。前景是 Voronoi 距离图,背景是 Fractal 噪声。 Multiply 只压暗、Max 取较高者(做堆叠)、Min 取较低者(做侵蚀)、Overlay 保留对比。 把这张图和下文的遮罩章节连起来看,你会明白:SD 里的高级技巧,本质都是高级遮罩。

6.5 三种「混合」节点的分工

节点处理的数据什么时候用
Blend灰度 / 颜色99% 的场景。叠高度、叠粗糙度、叠颜色都用它
Normal Blend法线叠加法线细节(例如在大法线上再叠一层布料纹理的法线)
Material Blend材质(多通道组)把两套完整材质(含所有通道)一次性混合,用于「砖墙 + 苔藓」这类材质级合成

练习练习 06 · 用混合模式做出「被踩旧的地砖」

目标:做一张方形地砖的高度图(Tile Generator,4×4), 然后用 Blend 节点做出「中间被踩得发亮、边缘积灰、角落有磕碰」三种不同的老化。

  1. 踩踏发亮:叠一张 Perlin Noise,用 Blend 的 Multiply 以 Opacity 0.3 叠到粗糙度上(不是高度)。
  2. 边缘积灰:用第 07 章的思路先拿到「缝隙遮罩」(提示:可用 Curvature 或 Voronoi 边界), 把它接到 Blend 的 Opacity 输入,再叠一张 Dirt/Grunge 噪声到基础色和粗糙度上—— 同一张遮罩喂给两个 Blend 节点。
  3. 角落磕碰:用 Min 模式把一块噪声从高度图里「挖掉」一小块。
  4. 全程遵守一条纪律:先把「完美的新地砖」做完(高度 / 法线 / 基础色 / 粗糙度都成立), 再开始叠老化。不要一边做形体一边撒脏迹。

参考 / 达标标准

  • 三种老化能分别辨认;粗糙度图上确实看得出来「中间亮(光滑)边缘灰(粗糙)」的差异; 同一张遮罩同时驱动了两个通道
  • 参考达标标准:对照
    blend_modes
    混合模式对照图
    ,确认你用的每种模式产生的明暗方向正确 (Multiply 的结果绝不可能比两个输入都亮);对照
    mat_balls
    预览球图
    里的「石墙」, 它的粗糙度变化是「坡上粗糙、凹处也粗糙、平面较光滑」,而不是全图一个值
  • 自查:把你的粗糙度图单独看(不加颜色),能看出「故事」吗?如果它是一片均匀的灰, 说明你只是把节点连上了,没有在做设计

07遮罩(Masking):高级材质=高级遮罩

这是全教程里最重要的一章。原因很简单:

在 SD 里,「我怎么把 A 叠到 B 上」几乎从来不是难点;难点永远是「我怎么精确地描述出 A 该出现在哪里」。 后者就是遮罩。你看到的每一个「高级材质」,拆开来看都是一堆非常讲究的遮罩。

7.1 遮罩是什么

遮罩就是一张灰度图,白(1.0)= 完全生效,黑(0.0)= 完全不生效,中间的灰 = 按比例生效。 它可以接到任何节点的遮罩输入,也可以接到 Blend 的 Opacity 输入。制作遮罩的手段只有那么几类, 本章把它们全部列清楚。

masking
九种最常用的遮罩来源。①Voronoi 距离图(做同心/远近衰减)②Voronoi F2−F1 等距边界(天然就是「缝」) ③硬边遮罩(阈值陡)④软边遮罩(阈值缓)⑤反相遮罩(1−x)⑥噪声遮罩(做天然随机) ⑦AO 遮罩(凹处)⑧Curvature 遮罩(凸边/凹角)⑨线性渐变遮罩(做方向性)。 把这九张图刻在脑子里,你做遮罩时就能条件反射地选对工具。
遮罩来源怎么得到典型用途
噪声遮罩Perlin / Clouds / Grunge 直接输出自然随机的污渍、斑块、磨损分布
阈值化遮罩噪声 + Histogram Scan把连续噪声变成「有/无」的硬边区域。最常用的一步
距离遮罩Distance / Voronoi F1离边缘多远、离中心多远的衰减
边界遮罩Voronoi F2−F1 或 Edge Detect缝、线条、轮廓线
凸/凹遮罩Curvature,取 >0.5 或 <0.5做边缘磨损、缝隙积灰的行业标准做法
遮挡遮罩Ambient Occlusion凹处变暗、积尘、积水
方向遮罩Gradient Linear / Gradient Radial / Gradient Axial从下往上的水渍、从中心向外的磨损、雨水冲刷方向
坡度遮罩高度图求导(Sobel)或 Curvature Sobel积水(低处)、积雪(平顶)、苔藓(背光面)
区域遮罩Flood Fill 家族给每个独立的图案块编号,做「每块都不一样」

7.2 把「灰蒙蒙的噪声」变成「可用的遮罩」

原始噪声几乎不能直接用。它必须经过「阈值化 / 重映射」才能变成语义明确的遮罩。 核心工具就是 Histogram Scan(也常配合 Levels 与 Histogram Range)。

Histogram Scan 的两个参数

Position
阈值中心。0.5 表示「以中灰为界」
Contrast
过渡带的宽度。越大越硬(接近二值),越小越软

想看「硬边遮罩」就把 Contrast 拉到 0.9 以上; 想要柔软的渐变就压到 0.1~0.3。

一个极其常用的组合

Noise → Histogram Scan(拿到不规则斑块)→ Blur HQ(柔化边界) → 用来驱动磨损 / 污渍。

这个三步链在几乎每一个商业材质里都能找到。把它做成一个子图, 以后直接拖。

7.3 Curvature:边缘磨损的行业标准做法

物体最先被磨损的永远是凸出的边和角。SD 里找到凸边的方法就是 Curvature(曲率): 它输出 0.5 表示平面,大于 0.5 是凸起,小于 0.5 是凹陷。

edge_damage
用 Curvature 驱动的边缘老化全流程。①原始高度(已带倒角)②Curvature 曲率图 ③提取凸边(>0.5 的部分)④提取凹角(<0.5 的部分) ⑤噪声破损 ⑥凸边 × 噪声 = 破损遮罩(关键乘积) ⑦高度 − 破损 = 磕碰过的砖 ⑧细长划痕(用各向异性噪声)⑨凹处积灰(凹角遮罩 × 污渍噪声)。
注意第 ⑥ 步:直接拿噪声当破损会得到「满地图随机破洞」;把噪声乘上凸边遮罩, 破损才会精确地发生在应该发生的地方。这一个乘法就是新手与熟练工的分水岭。

7.4 Flood Fill:给每个独立的块一个「身份」

当你的图里有多个互相独立的图案块(一排砖、一堆石子、一地落叶),你经常需要「每一块都不同」。 Flood Fill(连通区域填充)就是干这个的。它本身输出一张「随机灰度图」, 其中同一个连通区域内的像素拥有相同的值。

节点输出什么用途
Flood Fill每个区域一个随机灰度值让每块砖的高度/颜色/粗糙度都不同
Flood Fill to Grayscale分区灰度(同上,含更多控制)区域级随机
Flood Fill to Index每个区域的编号给区域编号后再做数学运算
Flood Fill to Random Grayscale每个区域一个随机灰度随机亮度
Flood Fill to Random Color每个区域一个随机颜色随机色调(做彩色石子)
Flood Fill to Position每个区域的位置让每个区域的效果方向不同
Flood Fill to Gradient每个区域内部的渐变「每块砖从左上到右下逐渐变暗」
Flood Fill to BBox Size每个区域包围盒的尺寸按大小区分区域(大石子 vs 小石子)
Flood Fill Mapper把每区域的值映射成指定的几个值让区域只取「几种」样子,而不是连续随机

7.5 反相、组合与「遮罩的布尔运算」

遮罩之间也需要做逻辑运算,而且 SD 里没有布尔节点——你用 Blend 节点来当逻辑门:

想要的效果用 Blend 的什么模式数学
A 与 B 都满足(交集)MultiplyA × B
A 或 B 满足(并集)Maxmax(A, B)
A 且非 B(差集)先把 B Invert,再 MultiplyA × (1−B)
取反(补集)Invert Grayscale 节点1 − A
限定在某一范围内生效A × B − 再 Multiply 一条「范围遮罩」—
优先 A,其次 BMax(若两者都是遮罩);或 Switch(性能更好)—

7.6 组合遮罩:让效果「合理」的三个范例

  1. 边缘磨损 = 凸边遮罩(Curvature > 0.5)× 位置遮罩(靠近外轮廓)× 随机噪声。 三个相乘,磨损才会既在边缘、又在部分区域、还是随机分布的。
  2. 屋顶积雪 = 朝上遮罩(法线朝上,可用 World Space Normal 的 Z 或高度图的坡度) × 高度阈值(越高越容易积雪)× 噪声(让边缘不规则)。
  3. 地面积水 = 低位遮罩(高度图 < 阈值)× 水平遮罩(坡度接近 0)× 噪声(水洼形状)。
mistakes
三组「新手 vs 熟练」对照。①只有单一频率 → 糊成一团;大中小频率叠加 → 层次分明。 ②四方不连续 → 平铺出接缝;四方连续 → 无缝平铺。 ③法线强度过大(40)→ 塑料感/破面;法线强度合理(5)→ 自然。
这三个错误占据了新手作品问题的一大半,请对照自己的图逐条自查。

练习练习 07 · 做一张「边缘磨损 + 缝隙积灰 + 随机划痕」的完整老化遮罩组

目标:在练习 06 的地砖(或练习 04 的砖墙) 基础上,做出三个相互独立、可以分别开关的遮罩,并分别驱动高度、基础色与粗糙度。

  1. 先确保有倒角:如果边缘是硬的,先补上倒角再继续(否则这一步做不出来)。
  2. 凸边磨损遮罩:Curvature → Histogram Scan(Position 0.55,Contrast 0.5) 拿到凸边;再 Multiply 一张阈值化噪声(Histogram Scan 后的 Grunge 或 Perlin),得到「部分边缘才磨损」。
  3. 缝隙积灰遮罩:取 Curvature < 0.5 的部分(用 Invert 或直接 Histogram Scan Position < 0.5), 再 Multiply 一张低频大块噪声(让灰不是均匀铺满每条缝)。
  4. 随机划痕遮罩:用一张高对比、方向性强的噪声(提示:Directional Noise 或 Stripes 加 Directional Warp), Histogram Scan 到极硬(Contrast 0.95),只留下少数几条细线。
  5. 把这三个遮罩分别接到对应的 Blend 的 Opacity 输入上:磨损挖高度、积灰改基础色与粗糙度、划痕改粗糙度。
  6. 给每个遮罩加一个可发布参数(Float 0~1)作为「强度」,并用 Switch 或 Blend 的 Switch 模式做总开关。

参考 / 达标标准

  • 三个遮罩分别可见、互不干扰、可以单独关掉;磨损只出现在边缘,积灰只在缝里,划痕是少数几条细线
  • 参考达标标准:对照
    edge_damage
    边缘老化全流程图
    —— 你的第 ⑥ 步(凸边 × 噪声)应该能对应上它的 形状特征;如果磨损看起来像「整个表面都被磨了」,说明你漏掉了那个乘法
  • 进阶自测:把 Curvature 换成 AO 再试一次。你能说清楚「什么效果该用 Curvature、什么效果该用 AO」吗? (提示:Curvature 找的是凸起的棱——适合磨损;AO 找的是被遮挡的凹处——适合积灰/积尘/积水)

08派生贴图:法线、AO、曲率是怎么算出来的

现在你已经能做出漂亮的高度图了。这一章讲怎么把它「翻译」成引擎需要的其它贴图, 以及每一步的物理含义。理解了原理,你才知道参数该往哪个方向调。

derivative_pipeline
从一张高度图派生全套贴图。①高度图 ②把它当模型打光(看形体是否成立) ③Height to Normal → 法线 ④Ambient Occlusion → 缝隙变暗 ⑤Curvature → 凸边/凹边分离 ⑥曲率 × AO 合成做金属边缘磨损。

8.1 法线(Normal):把高度「编码」成方向

法线贴图不存储高度,它存储的是每个像素上的表面朝向(一个单位向量)。 渲染器用这个朝向去计算光照,于是平面看起来就有了凹凸。

normal_channels
法线的解剖。①高度图 ②生成的法线(OpenGL / Y+ 向上) ③R 通道(法线的 X 分量)④G 通道(法线的 Y 分量)⑤B 通道(法线的 Z 分量) ⑥DirectX 版本(绿通道翻转)。注意 R 与 G 通道本身就是很好的「方向遮罩」—— R 亮表示朝右的斜面,G 亮表示朝上的斜面,这是做「雨水从上方冲刷」这类方向性效果的材料。
整张法线的底色是淡紫色(RGB ≈ 0.5, 0.5, 1.0),因为平坦表面的法线方向就是 (0, 0, 1)。
节点作用关键参数
Height to Normal最常用。由高度图生成切线空间法线Normal Format(DirectX / OpenGL 绿通道翻转)、强度
Height to Normal World Units按真实物理尺寸计算,跨材质强度一致需要设置真实的物理尺寸(Physical size)
Normal调整 / 合并法线强度缩放、方向旋转
Normal Blend把两张法线合并(叠加两层凹凸)—
Normal Combine另一套法线合并方式,控制更细—
Normal Invert / Normal Normalize反相 / 归一化修数据问题用
Normal to Height / Normal To Height HQ反向:从法线估算高度处理外部导入的法线资源时用

8.2 环境光遮蔽(Ambient Occlusion):缝隙为什么变暗

AO 描述的是「这个点能看到多少天空」。凹缝里的点被周围挡住,接收到的环境光就少,因此变暗。 SD 用 Ambient Occlusion(或 HBAO / RTAO 版本)从高度图估算。

ao_curv
高度、AO 与曲率的关系。①高度 ②AO(缝隙与凹处变暗)③Curvature 曲率 ④Curvature 取白色部分(凸起)⑤Curvature 取黑色部分(凹陷)。 注意 AO 和 Curvature 长得像但用途完全不同:AO 用于「让暗的地方更暗」, Curvature 用于「找到该磨损的棱」和「找到该积灰的缝」。
节点说明
Ambient Occlusion (HBAO)基于水平线的环境光遮蔽,速度快,适合大部分情况
Ambient Occlusion (RTAO)光线追踪式,质量更好但更慢;做重要的材质时用
Curvature曲率。0.5 = 平面,>0.5 凸,<0.5 凹
Curvature Smooth输入是法线的曲率版本,更平滑
Curvature Sobel用 Sobel 算子求曲率,边缘更锐利
Edge Detect边缘检测,直接输出线条
Bevel给形状加倒角——注意这个节点本身就是「做倒角」的正规工具

8.3 关于高度图的一个专业分歧

业界对「高度图该不该包含高频细节」有两种实践,你要理解各自的理由:

做法 A:高度只留宏观形体

高频细节放在法线里,高度图只描述大形。 这是《The PBR Guide》的建议,理由是:用视差/位移贴图时高频细节会撕裂或产生自遮蔽瑕疵, 而法线贴图能便宜地表现高频。实时游戏里这是主流。

做法 B:高度保留全部细节

高度图就是「真实表面」,法线从它派生。 这在用光线追踪位移(ray-traced displacement)或做影视级渲染时是正确的, 因为那时高度会被真正用来位移几何体,细节越多越好。

实践结论:做游戏资产时按 A 做,但要保证高度图仍然完整到能生成好的 AO 与法线。 真正的技巧是:故意把高度图的对比压到 0.05~0.9 而不是 0~1,给派生留空间。

8.4 排错清单:法线出问题时的检查顺序

症状最可能的原因怎么修
整体凹凸方向反了(凸的看起来像凹的)DirectX / OpenGL 绿通道搞反改 Normal Format,或导出时翻转绿通道
表面像塑料 / 有大片亮斑法线强度过大,或高度图存在纯白削顶降低强度;用 Histogram Scan 把白点压到 0.9
放大后有块状色斑 / 阶梯8 位精度不足把该节点与输出格式改成 16 位
细节「糊成一团」高度图本身缺少高频,或模糊过度回到高度图检查频率层次(第 04 章)
Tile 后出现规则的十字接缝高度图不四方连续用 Make It Tile Patch,或改用天生无缝的程序化噪声
导入引擎后法线方向不对导出时色彩空间被当成 sRGB导入设置里关闭 sRGB

练习练习 08 · 从高度图产出完整的五张贴图并逐一验证

目标:用你练习 04/05 做的高度图, 产出 Height / Normal / AO / Curvature / Base Color / Roughness 六张贴图,并逐个在 3D 视图里验证。

  1. 把高度图归一化到 0.05~0.9(而不是 0~1),再生成法线,对比归一化前后的法线差异。
  2. 生成 AO 与 Curvature,分别用 Histogram Scan 提取出「凹处」和「凸边」两张遮罩, 并确认它们和高度图上的位置一致(把 2D 视图放大到 400% 逐块比对)。
  3. 故意把法线强度分别设成 2 / 10 / 40,在 3D 视图里对比,记录下「哪个值最接近真实」。
  4. 把法线格式在 DirectX 与 OpenGL 之间切换,观察 G 通道与 3D 视图里光照方向的变化。

参考 / 达标标准

  • 六张贴图齐全、位深选择正确(高度/法线 16 位)、AO 与 Curvature 能各自提取出可用的遮罩
  • 参考达标标准:对照
    normal_channels
    法线解剖图
    —— 你的法线底色应是淡紫色 (0.5, 0.5, 1), R 通道能看出左右朝向,G 通道能看出上下朝向,B 通道几乎全白(只有极陡的地方才变暗)
  • 对照
    ao_curv
    AO 与曲率图
    —— 你的 AO 在缝隙处变暗但平面上接近纯白, Curvature 在棱上是亮的、缝里是暗的、平面上是中灰
  • 你能说出:为什么法线强度 40 是错的(提示:需要从「斜率 = Δ高度 / Δ距离」的物理含义解释)

09颜色与粗糙度:把灰度变成可信的材质

高度图做完了,形体就定了。这一章决定「它看起来是什么材料」。 核心工具只有一个:Gradient Map(渐变映射),配合你上一章做的遮罩来使用。

mat_brick
砖墙材质完整贴图集。①高度 ②基础色 ③法线 ④粗糙度 ⑤金属度(全黑=非金属)⑥AO。 请仔细看基础色与粗糙度这两张:颜色不是平涂的,每块砖的色调都略有不同(Flood Fill 随机); 粗糙度在缝隙处(灰浆)明显比砖面粗糙。这两处「变化」就是这张材质可信的来源。

9.1 黑白铺色:Gradient Map 才是上色的主角

新手最常见的错误是「用画笔涂色」。在 SD 里正确的做法是:先用灰度表示「哪里是什么」, 再用 Gradient Map 把灰度区间映射成颜色。

灰度 0.0 ────────── 0.5 ────────── 1.0
        │              │              │
        ▼              ▼              ▼
     深棕灰          砖红           浅米黄
        └──────── Gradient Map ───────┘
                      ▼
                  基础色(彩色)

Gradient Map 的优势:它把你所有的灰度结构一次性翻译成颜色。 你调整一个渐变上的色标,整张贴图同步变化;你换一个渐变,同一张灰度图立刻变成完全不同的材质 (砖墙 → 石灰石 → 混凝土)。这也是做参数化色彩的基础。

节点用途
Gradient Map按输入灰度在渐变上取色。上色的主力工具
Gradient (Dynamic)可被节点驱动的动态渐变(能响应其它数据)
HSL色相 / 饱和度 / 明度调整
Color Correction更完整的色彩校正(曝光、伽马、色阶、色相)
Replace Color / Replace Color Range把某个颜色替换成另一个
Color To Mask按颜色挑出遮罩(从参考图里提取区域时有用)
Hald CLUT用一个 Hald 查找表整体套用调色(做电影级调色)
PBR Albedo Safe Color保险丝:把基础色限制在 PBR 安全范围内(约 30~240 sRGB)
PBR BaseColor / Metallic Validate检查并修正不合法的金属基础色
PBR Dielectric F0 / PBR Metal Reflectance提供物理正确的 F0 与常见金属反射率

9.2 金属度(Metallic):它是一张遮罩,不是一个数值

金属度几乎永远只有两个值:0(绝缘体)或 1(裸金属)。 中间值是给「过渡状态」用的——比如油漆剥离露出底下的钢、生锈的铁、半金属矿石。

pbr_material_response
六组 PBR 响应实验。①粗糙度梯度 0.02→1.0(左镜面、右哑光) ②金属度黑白渐变(左绝缘体、右导体)③金属的基础色就是反射率色(金的 F0 ≈ 0.95/0.78/0.35) ④绝缘体的高光接近白色且弱 ⑤同一材质换光照角度 ⑥抛光不锈钢 + 法线。
最重要的一张是 ③:很多人在做金属时把基础色填成「黄色」,结果渲染出来是个金色塑料。 正确做法是在基础色里填反射率(F0)数值——金是 (1.000, 0.766, 0.336), 铜是 (0.955, 0.638, 0.538),铝是 (0.913, 0.921, 0.925)。
金属F0 / 反射率(线性)提示
金 Gold≈ 1.000 / 0.766 / 0.336明显偏红黄
铜 Copper≈ 0.955 / 0.638 / 0.538比金更红
铝 Aluminium≈ 0.913 / 0.921 / 0.925接近中性,略偏冷
银 Silver≈ 0.972 / 0.960 / 0.915最亮、最中性
铁 Iron≈ 0.562 / 0.565 / 0.578明显更暗

9.3 粗糙度(Roughness):材质可信度的真正来源

一张全图都是 0.5 的粗糙度,会让最精致的模型看起来像塑料玩具。

粗糙度的设计原则是「每一次变化都要有物理原因」:

表面状态粗糙度理由
被踩踏、被手摸过的区域低(更光滑)摩擦把微观凸起磨平了
积灰、积垢的区域高(更粗糙)灰尘颗粒散射光线
裸露的金属棱角低(发亮)金属被磨出镜面
锈蚀区域高氧化层是多孔的
潮湿区域低水填平了微观凹陷
油漆未干的流挂、油污低且不均匀液体表面张力使表面光滑
mat_metal
金属板材质。①高度(拉丝 + 凹坑 + 四角铆钉)②基础色(金属反射率色,接近中性灰) ③法线 ④粗糙度(拉丝方向造成的各向异性条纹 + 凹坑处变粗糙)⑤金属度(几乎全白) ⑥AO。
注意它的粗糙度图:拉丝方向上的细条纹与凹坑造成的粗糙变化同时存在, 这两者叠加出来的高光才是「金属」的感觉。

9.4 光照:为什么必须在多个角度检查

同一张材质在不同光照下可以有完全不同的表现,而你在 SD 里只对着一个光源调,很容易调出「见光死」。 养成这几个习惯:

  • 至少换三个光源方向:正面偏上(默认)、侧向 90°、背面逆光。
  • 一定要看掠射角:把相机压到几乎贴着表面。菲涅耳效应在掠射角最强, 粗糙度的错误在这个角度会暴露得最彻底(塑料感通常在这里现形)。
  • 换环境贴图:做室内地板就用室内 HDRI;做户外岩石就用天空 HDRI。 环境越接近目标场景,你的判断越准。
  • 换模型:球体只看到表面,圆柱能看到拉伸,平面能看到平铺。三种都看一遍。
mat_wood
木材材质。①高度(注意木纹是沿一个方向拉伸的环纹) ②基础色(按木板随机分配色调)③法线 ④粗糙度 ⑤AO ⑥曲率。
木纹的关键在于「各向异性」——用 Non-Uniform Blur 沿一个方向拉伸, 再加上沿纤维方向的细噪声。这是 SD 里做木头、拉丝金属、织物、笔触的共同手法。

9.6 常见材质的完整贴图集参考

下面三组是同一套流程做出来的不同材质,可以当作「做到什么程度算合格」的对照标准。 注意它们的粗糙度图——这是区分「像」与「不像」的关键一张。

mat_tile
地砖材质。①高度(瓷砖与灰缝的落差)②法线 ③AO(缝隙明显变暗) ④曲率 ⑤基础色(每块砖略带色差)⑥粗糙度。
砖面偏光滑、灰缝偏粗糙,这个反差就是「踩起来有质感」的来源。
mat_terrain
地形材质。①高度(脊状分形 + 细节噪声)②基础色(按坡度与高度分层: 低处沙、中段草、陡坡裸岩、顶部积雪)③法线 ④AO ⑤曲率 ⑥粗糙度。
地形是「用遮罩分层上色」的最佳范例——颜色不是画上去的,而是由坡度与高度算出来的。
mat_balls
八种材料在同一套光照下的对照(砖墙 / 木地板 / 金属板 / 石墙 / 掉漆金属 / 地形 / 皮革 / 木桶)。
把这张图当「色卡」用:做某个材质时先来这里看同类材质的粗糙度与金属度大致在什么范围。

9.5 上色的推荐顺序

先做粗糙度 → 再上基础色
  (Charlie Foreman 的建议:把基础色先设成黑色,这样反射的变化看得最清楚;
    粗糙度这关过了,再回头把基础色补上,并复用同一套遮罩)
      │
      ▼
① 底色铺陈     Gradient Map 把高度 → 基调色
② 区块差异     Flood Fill 随机色 × 低不透明度 → 每块石头/砖都不同
③ 脏迹与污渍   遮罩 × Grunge 噪声 → 角落、缝隙、下半部分
④ 局部材质替换 遮罩 → 露出底下的另一种材料(锈、木、金属)
⑤ 整体校正     HSL / Color Correction 统一色调
⑥ 保险丝       PBR Albedo Safe Color 限制到安全范围

练习练习 09 · 用同一张高度图做出三种完全不同的材质

目标:复用你练习 08 的高度图, 只用改变颜色与粗糙度的做法,产出「红砖 / 灰混凝土 / 老旧砂岩」三种结果,并且在 3D 视图里都能站得住。

  1. 红砖:Gradient Map 用红棕→浅米黄;粗糙度 0.55~0.75;金属度全 0。
  2. 灰混凝土:Gradient Map 换成冷灰→浅灰(几乎无彩); 粗糙度整体抬高到 0.7~0.9 但在被磨的地方(凸边遮罩)降到 0.45。
  3. 老旧砂岩:Gradient Map 用暖沙色,加入更明显的区块随机色(Flood Fill to Random Color,低不透明度); 粗糙度变化幅度加大(0.35~0.95)。
  4. 每一种都在 3D 视图里用三个光照角度 + 一次掠射角检查,记录哪一种在掠射角下最先「露馅」。
  5. 把基础色接到 PBR Albedo Safe Color,对比开与关的差异。

参考 / 达标标准

  • 三种材质在 3D 视图里都能一眼区分开,且没有一种出现「塑料感」或「过曝白」
  • 参考达标标准:对照
    mat_brick
    砖墙贴图集
    与
    mat_wood
    木材贴图集
    —— 你的基础色应该有明暗层次但不超过安全范围;你的粗糙度应该能看出「故事」而不是一片均匀灰
  • 对照
    pbr_material_response
    PBR 响应图
    的第 ③ 张 —— 如果你的材质里有金属, 基础色填的必须是反射率色而不是「看起来的颜色」
  • 你能解释:为什么把粗糙度整体设在 0.5 会让材质看起来像塑料(提示:真实材料在微观上, 不同区域的粗糙度差异远大于 0.5 这个单点值)

10散布与排布(Scattering):把「一个」变成「很多个」

到此为止你做的材质都是「规则排列」的。但真实世界是混乱的:卵石有大有小、 落叶有疏有密、地砖有歪有正、锈斑从不均匀。这一章讲 SD 里做「自然分布」的节点族。

10.1 从规则到自然:三种排布方式

方式节点特点典型用途
规则排列Tile Generator、Brick Generator、Tile Random 2 行列整齐,可控性最强,最便宜砖、瓦、地砖、砌块
阵列 + 随机扰动Tile Sampler 行列框架内随机旋转 / 缩放 / 位移 / 颜色,性价比最高碎石地、鹅卵石、木地板拼缝
自由散布Splatter、Splatter Circular、Shape Splatter 没有行列表格约束,最自然,也最贵落叶、碎屑、沙砾、掉漆

10.2 Tile Sampler:SD 里最重要的散布节点

Tile Sampler 的思路是:你给它「一个图案」(可以是最多 6 个输入), 它在 X/Y 方向排成阵列,但每个格子里的图案可以随机旋转、缩放、位移、翻转、变色调。 这就是「规律中带随机」的最佳平衡点。

tile_sampler
Tile Sampler 的工作方式。左边是「一个图案」(一颗石头), 右边是它在 4×4 阵列中的散布结果——每个实例都被随机旋转、缩放、轻微位移。
关键参数分组:X/Y Amount(阵列数量)· Pattern Size(图案尺寸)· Size Random(尺寸随机)· Rotation Random(旋转随机)· Position Random(位置随机)· Color/Luminance Random(明暗随机)· Mask Random(部分格子不填充)。
参数组作用调参经验
X Amount / Y Amount阵列的行列数数值越大越细碎;通常配合 Pattern Size 一起调
Pattern Size单个图案占据格子的大小小于 1 会留出间隙(做圆润石子),大于 1 会互相挤压重叠
Size Random / Rotation Random尺寸 / 旋转的随机幅度这两个是「自然感」的主要来源,不要设 0
Position Random在格子内偏移能有效打破「阵列感」,建议 0.2~0.5
Mask Random随机让部分格子为空做出「有疏有密」,配合噪声遮罩更自然
Color Random / Luminance Random每个实例的色调 / 明暗随机这一步做了,材质立刻从「复制品」变成「一堆不同的东西」

10.3 Splatter 家族:更自由的分布

节点说明
Splatter沿方向散布,适合做洒落、泼溅
Splatter Circular圆形区域散布,适合做环状排布、井盖、花环
Shape Splatter / Shape Splatter 2新一代散布主力。用 SDF(有向距离场)描述形状,可以把多个形状一次性散布并自动处理互相挤压
Shape Splatter to Mask把散布结果的遮罩单独取出
Shape Splatter Blend把散布结果与其它图混合
Shape Splatter Data Extract提取每个形状的编号 / 位置 / 尺寸等数据
Scatter on Spline沿样条/路径散布(做藤蔓、链条、铁轨)
Atlas Scatter从图集(Atlas)里散布多种不同的图案

10.4 FX-Map:程序化排布的老牌工具

在 Tile Sampler 出现之前,SD 里做程序化排布靠的是 FX-Map。 理解它仍然有价值——它是 SD 里唯一真正「递归」的机制。

fxmap
FX-Map 的象限(Quadrant)机制。左:Quadrant 节点把画布切成 2×2(四个子象限), 递归下去就能得到 4ⁿ 个格子——这就是为什么一个节点就能得到 256 个格子。 中:配合 Iterate 与条件,只细分部分象限,得到不规则的布局。 右:每个象限都可以接不同的分支,做「有的格子放砖、有的放破损、有的放污渍」。
节点(FX-Map 内部)作用
Quadrant唯一能增加「深度/层级」的节点。把当前区域切成 2×2; 每个 Quadrant 就是一层树。它内置多种图案:Square / Disc / Paraboloid / Bell / Gaussian / Thorn / Pyramid / Brick / Gradation / Waves 等
Iterate重复器:把右侧输入的图像在同一层上重复 N 次。 每次重复的功能表达式会分别求值,用 $number(从 0 开始)区分第几次
Switch按选择器在两条输入里选一条,选择器通常由函数驱动
Parameter SetFX-Map 的「原动力」,定义象限树的核心区域图

FX-Map 里可用的内置变量:$pos(当前图案的出生位置,原点在左上)、 $depth(层级)、$depthpow2、$number(第几个图案)。 注意 $number 只来自最近一个 Iterate 节点。

10.5 组合范例:一地的鹅卵石

  1. 用 Shape 或 Shape Splatter 2 做一颗石头(带一点不规则的边缘)。
  2. 接 Tile Sampler:X/Y Amount = 8,Size Random = 0.35,Rotation Random = 1, Position Random = 0.4,Mask Random = 0.15。
  3. 用一张低频噪声接到 Tile Sampler 的 Mask 输入,让石头的分布「有疏有密」。
  4. 用 Flood Fill to Random Grayscale 给每颗石头一个随机高度, 再用 Histogram Scan 让它们「有高有低」。
  5. 用 Slope Blur 加一张噪声做侵蚀,让石头边缘被磨圆、缝隙里出现沙粒。
  6. 上色:Gradient Map(石头色系)+ Flood Fill to Random Color(每块色调不同)。
  7. 粗糙度:石头表面较粗糙,但被磨过的地方(Curvature 凸起)更光滑。

练习练习 10 · 做一片「石子 + 沙土 + 少量落叶」的地面

目标:做出一个有明显「层次」的地面材质: 底层是沙土,中层是散布的石子,最上面压着几片落叶。

  1. 沙土底层:两张不同频率的噪声(一张做沙粒、一张做土块)用 Overlay 与 Multiply 叠加, 粗糙度偏高(0.75~0.9)。
  2. 石子层:用 Tile Sampler 散布(至少 6×6),开 Size Random 与 Rotation Random, 用噪声驱动 Mask 让分布不均匀;用 Flood Fill to Random Grayscale 让它们高度不同。
  3. 落叶层:用 Shape 做一个不规则的叶形(提示:Shape 的 Polygon 加 Directional Warp 能出叶形), 用 Splatter 或第二个 Tile Sampler 少量散布(数量要明显少于石子), 并让它们压在石子之上(高度用 Max 叠,而不是 Add)。
  4. 三层的颜色要能区分,但统一在一个色调系统里(用同一套 Gradient Map 家族,只换色标)。
  5. 用 Slope Blur 让石子与沙土的交界自然过渡,避免「剪纸感」。

参考 / 达标标准

  • 三层能清楚分辨;石子有明显的大小与朝向差异(说明开了随机);落叶数量明显少于石子且压在石子上; 整体在 3D 视图的三个光照角度下都成立
  • 参考达标标准:对照
    tile_sampler
    Tile Sampler 示意
    —— 你的石子应该像右侧那样有随机旋转与缩放, 而不是像左侧一样排列整齐;对照
    slope_blur
    Slope Blur 示意
    , 石子与沙土的交界应该有被冲刷的过渡带
  • 自查:把石子的 Size Random 设为 0 再看一遍——如果「能看出是网格排列」,说明你之前的自然感全靠随机参数, 换个噪声驱动 Mask 会更好

11参数化(Parametric):把图变成可复用的材质生成器

到这里你已经能做出一张好看的材质了。但它的价值仍然是「一张图」。 这一章要做的是把它变成一台机器:别人拖几个滑块,就能得到几十种变体。

parametric
参数化的三步。①在「图参数」面板里新增参数并设好类型与范围 ②在节点里用 $参数名 引用,或在函数图里用 Get 节点读取 ③发布成 .sbsar,在 Painter / 引擎里实时拖动。右下角是关键的六条心法。

11.1 哪些东西应该被参数化

不是所有东西都值得做参数。判断标准是:「用户会不会想改它?」以及「改了之后材质是否仍然成立?」

应该参数化不应该参数化
结构的数量(砖的行数 / 列数、瓦片密度)噪声的具体 Scale(这是「细节设计」,用户改了只会变难看)
缝隙 / 灰浆的宽度法线强度的绝对值(应该由高度图控制)
随机种子(用于产生上万个变体)内部使用的遮罩阈值
污渍 / 磨损 / 苔藓的强度与开关每个中间节点的尺寸与位置
基础色调(Color 类型)重复的内部常量
整体粗糙度偏移、金属度阈值调试用的临时值

11.2 怎么发布参数(Expose)

  1. 单个发布:选中节点,在属性面板找到想发布的参数,点参数右侧的下拉菜单 → Expose as new graph input。此时该参数会出现在「图参数」面板,节点上也会多一个 $ 标记。
  2. 批量发布:属性面板顶部的「多发布(Multi-expose)」按钮 → Batch expose parameters…, 可以一次勾选多个参数,并给它们批量命名(可加组前缀)。
  3. 设好属性:标识符(Identifier,不唯一会有警告)、标签、分组(用 / 做子分组)、 描述、类型/编辑器、默认值、最小值、最大值、是否钳制、步进。
  4. 预览:图参数面板的「Preview」模式可以模拟外部(.sbsar)里 UI 的样子与限制。 注意:预览里的改动不点 Apply 就不会保存。

11.3 在图里引用参数

简单的做法:在节点的参数框里直接输入 $参数名。

Tile Generator 的 Amount X 参数框里填:  $brick_rows
Blend 的不透明度里填:                   $dirt_amount
Color 类参数在 Gradient Map 里引用:      $tint

需要做运算时用函数图(Function graph)或 Value processor,用 Get 节点把参数取出来再算。

11.4 内置变量速查

变量类型含义可用范围
$sizeFloat2当前分辨率(像素)所有节点
$sizelog2Float2当前分辨率的 log₂ 值所有节点
$pixelratioInteger0 = 拉伸,1 = 方形所有节点
$tilingInteger0 无 / 1 水平 / 2 垂直 / 3 双向所有节点
$physicalsizeFloat3图的物理尺寸所有节点
$uvtileInteger2UDIM 索引(多 UV 块工作流)所有节点
$posFloat2当前位置 / 像素位置FX-Map 与 Pixel Processor
$depth / $depthpow2Float象限深度 / 其倒数幂FX-Map
$numberInteger第几个图案(从 0 开始)FX-Map
$timeFloat引擎启动至今的秒数全局(Designer 内无法动画)
$normalformatInteger环境的法线格式全局(Designer 内无效)

11.5 随机与种子(Seed)

  • Random Seed 是基础参数,所以它也会继承(相对父级 / 相对输入 / 绝对)。 节点上有骰子按钮可以快速换一个值。
  • 噪声与图案节点有自己的种子参数。同一个种子永远给出同样的结果—— 这正是「可控的随机」,是做变体的基础。
  • 在 FX-Map 的 Quadrant 节点上,Inherit Random 让该象限的种子继承自象限树的上一个节点。
  • 发布时的注意:旧版有「随机种子暴露」设置,现在改为把图的随机种子属性设为 绝对(Absolute)即可阻止它在 .sbsar 里被暴露。
  • 做「上万个变体」的标准做法:把一个 Integer 类型的 random_seed 参数发布出去, 接到各处噪声节点的种子输入上。

11.6 用 Switch 做「功能开关」

想让用户能「关掉破损」?不要用 Multiply 乘 0——那样前方的节点仍然会计算。用 Switch:

Boolean 参数 use_damage  ──► Switch 节点的 Selector
                                │
        A 路:原始高度图 ────────┤
        B 路:带破损的高度图 ────┘
                        ▼
                    输出(未选中的那一路完全不计算)

Blend 节点的 Switch 混合模式也能达到同样效果:Opacity = 0 时不计算前景, Opacity = 1 时不计算背景。节点库里还有一整套专门的 Switch / Multi Switch 节点(在 Filters → Blending 分类下)。

练习练习 11 · 把一张材质改造成「五参数生成器」

目标:选你目前最好的一个材质(建议用练习 09 或 10 的结果), 把它改造成带五个可发布参数的生成器,并验证每个参数都能正常工作。

  1. 参数 1 tiling(Integer,1~8,默认 4):控制结构的行列数,接给 Tile Generator / Tile Sampler。
  2. 参数 2 dirt_amount(Float,0~1,默认 0.4):控制污渍叠加的不透明度。
  3. 参数 3 damage_amount(Float,0~1,默认 0.3):控制破损强度。
  4. 参数 4 damage_enabled(Boolean,默认 true):用 Switch 做总开关, 确认关闭后破损那一路确实不参与输出(提示:关掉后 3D 视图里的破损应该完全消失,且渲染时间下降)。
  5. 参数 5 random_seed(Integer,0~9999,默认 17):接给各处噪声的种子。
  6. 给每个参数设好最小值 / 最大值并勾选钳制,然后在图参数面板的 Preview 模式里逐个拖动验证。
  7. 最后把参数按语义分组(例如 structure/、weathering/),并写描述文字。

参考 / 达标标准

  • 五个参数都能实时生效且不会把材质拖坏(拖到极值也不出现破面或全黑)
  • Boolean 开关关闭后,输出中破损完全消失
  • 随机种子连续改 5 个值,每次都得到明显不同但都成立的结果
  • 参考达标标准:对照
    parametric
    参数化三步图
    —— 你的「图参数」面板应该长得像图中 ① 那样 (标识符有语义、类型正确、范围明确),而不是一堆 param1 / param2
  • 自查:把 tiling 从 1 拖到 8,观察渲染时间的变化。 如果拖到 8 时明显卡顿,说明你的图在上游有昂贵节点(Flood Fill?FX-Map?), 需要按第 13 章的方法优化

12进阶节点:函数图、Pixel Processor、FX-Map 与样条

当内置的滤镜与混合做不到你想要的效果时,你就要进入这一层。 重要提醒:这一章的内容在你的前 20 个材质里可能都用不到。 先把第 04~11 章练熟再来,顺序反了会很痛苦。但一旦需要,它们能解锁别人做不到的效果。

12.1 原子节点(Atomic nodes)——SD 的真正底层

节点库里的 200 多个节点,其实全都是由 28 个原子节点组合而成的。 原子节点是引擎内置的、不可再分的积木。理解这份名单,你就能看懂任何一张复杂的图:

类别原子节点
图结构Input grayscale · Input color · Input value · Output
生成Uniform color · Gradient (Dynamic) · Bitmap · SVG · Text
处理Blend · Blur · Sharpen · Emboss · Distance · Levels · Curve · Gradient map · HSL · Grayscale conversion
几何Transformation 2D · Directional warp · Directional blur · Warp
通道Channels shuffle · Normal
计算Pixel processor · Value processor · FX-Map

另外还有一组纯粹的「整理工具」,它们不算节点(不参与计算),但对可读性极其重要:

Frame(框架)
把一段逻辑框起来并命名,可以上色。
Comment(注释)
贴在节点旁边说明「为什么这么做」。
Dot node / Portal(点节点)
连线的中继站,用来整理长连线。悬停连线时按 Alt+左键可直接插入。
Pin(导航图钉)
在图里放置可跳转的锚点,大图必备(F2)。

12.2 函数(Functions)与函数图:SD 里没有「代码」

一个非常重要的认知纠正:当前版本的 SD 里,函数不是用文本代码写的,而是用节点搭出来的。 Adobe 官方文档的原话是:「在 Designer 里,函数保持同样的节点化方式,而不是使用代码行。」

函数图里的主要节点族

族节点举例
常量 ConstantFloat / Float2 / Float3 / Float4 / Integer(1-4) / Boolean
变量 VariablesSet · Get Float1..4 · Get Integer1..4 · Get Boolean · Is defined
向量 / 分量Vector Float2/3/4 · Swizzle Float1..4
采样 SamplersSample Grey · Sample Color(Float2 位置 → Float4 颜色)
类型转换 CastTo Float / Float2 / Float3 / Float4 · To Integer…
运算 OperatorAdd · Subtraction · Multiplication · Scalar Multiplication · Division · Negation · Modulo · Dot Product
逻辑 LogicalAnd · Or · Not
比较 ComparisonEqual · Not Equal · Greater · Greater or Equal · Lower · Lower or Equal
数学函数 FunctionAbsolute · Floor · Ceil · Sine · Cosine · Tangent · Arc Tangent 2 · Cartesian · Square Root · Logarithmic · Exponential · Pow 2 · Linear Interpolation(就是 lerp) · Minimum · Maximum · Random
控制流 ControlSequence · If…Else

函数节点库(预制函数)

除了原子函数节点,SD 还提供了一大批「预制函数节点」,按分类组织(这些才是实际用得最多的):

分类常用成员
MathsClamp · Saturate · Smoothstep · Step · Sign · Fmod · Frac · Round float1 · Truncate float · One minus · Reflect · Normalize · Length · Distance · Average · Merge float3/4 · Cross product
Conversion[0,1] to [-1,1] · [-1,1] to [0,1] · [a,b] to [0,1] · [0,1] to [1,0](反相)· Sawtooth wave · Triangle wave · Degrees to radians · Height balance
RandomRandom uniform [a,b[ · Random discrete [a,b] · Normal distribution · Global random · Hash 11 / 21 / 22 / 31 / 32(从坐标生成稳定随机值)
Easings21 个缓动函数:Ease in/out/in-out × circ / cubic / expo / quad / quart / quint / sine
ColorsRGB to linear / linear to sRGB · HSV/HSL/HSI/HCL to RGB 及反向 · Temperature to RGB · Random color · ACES / AgX / Hejl 色调映射
TransformationCartesian to polar / Polar to cartesian · Rotate vec2 · Rotation matrix · Scale matrix · Tile matrix
VariousSwitch float / integer …(2/4/8 输入) · Curve · Non-square output size · Roughness
SDF functionsPrimitives(21 个几何体:Sphere / Cube / Torus / Cone / Rock…)· Operators(Union / Subtraction / Intersection / Smooth 版本 / Rounding / Shell / Symmetry)· Transforms(Rotate / Scale / Twist / Bend / Elongate / Flip)· Material(Set color / metalness / roughness)

12.3 Pixel Processor:逐像素运算

Adobe 称它为「功能最丰富的节点」。它的工作方式是:你为每一个像素写一段函数图, 函数返回什么,这个像素就是什么。输入图像通过 Sample color / Sample grayscale 采样。

Color mode
决定输出是灰度还是彩色。
Per pixel function
每个像素要计算的函数(Float 或 Float4)。
$pos
Pixel Processor 里特有的内置变量:当前像素的归一化位置(Float2)。 这是你实现「按坐标计算」的关键。

典型用途:手工实现坐标映射(极坐标、镜像、多格重复)、按 UV 生成数学图案、 自定义的通道运算、以及任何「输入一个坐标、输出一个值」的逻辑。

12.4 FX-Map:象限与递归

FX-Map 节点内部挂着一张特殊的图,结构是四叉树(Quad-Tree), 官方描述它是一种「马尔可夫链(Markov Chain)」式的图。引擎会自上而下、再自左向右遍历整棵四叉树。

内部只有三种节点(加上定义区域图的 Parameter Set):

节点作用关键点
Quadrant把当前区域切成 2×2,唯一能增加层级的节点 递归 4 层就是 4⁴ = 256 个格子。这就是一个节点顶 256 个节点的原因。
内置图案:Square / Disc / Paraboloid / Bell / Gaussian / Thorn / Pyramid / Brick / Gradation / Waves / Half Bell / Ridged Bell / Crescent / Capsule
Iterate把右侧图像在同一层重复 N 次 每次重复的功能表达式分别求值,用 $number(从 0 开始)区分
Switch按选择器二选一选择器通常由函数驱动

FX-Map 专属变量:$pos(图案的出生位置,原点左上)、$depth(层级)、 $depthpow2、$number(第几个图案,从 0 开始,只来自最近一个 Iterate)。

12.5 样条与路径(Splines & Paths)

SD 的 Spline & paths tools 分类提供了在 2D 图里画曲线并沿曲线散布 / 映射的能力, 用于做藤蔓、链条、绳索、铁轨、拉链、缝线、刺绣这类「线性元素」。

类别常用节点
Spline tools(26 个)Spline (Cubic) · Spline Circle · Spline 2D Transform · Spline Append · Spline Bridge · Spline Render · Spline Fill · Spline Warp · Spline Select · Scatter on Spline Grayscale/Color(沿曲线散布)· Spline Sample Height / Thickness · Spline Mapper
Path tools(10 个)Mask to Paths(把遮罩转成路径)· Paths to Spline · Paths Polygon · Paths Warp · Paths Select · Paths Vertex Processor · Paths 2D Transform

12.6 什么时候你「真的」需要这些进阶节点

需求先用什么不够用时才用
按坐标生成图案Gradient + BlendPixel Processor
散布大量元素Tile SamplerShape Splatter 2 / FX-Map
每个区域随机不同Flood Fill to Random GrayscaleHash 函数 + Pixel Processor
参数联动运算在参数框里写 $param函数图 / Value processor
沿曲线排布Tile Sampler + Directional WarpSpline tools
做 3D 形状再投影Shape + 高度叠层SDF functions + Shape Splatter 2 / 3D Viewer

练习练习 12 · 用函数图实现「石头大小按距离衰减」

目标:在不写任何代码的前提下,用函数图 + Get 节点, 实现「离画面中心越远的石头越小」的效果。

  1. 用 Gradient Radial 或 Pixel Processor 拿到一张「到中心的距离」灰度图。
  2. 把这张距离图接到 Tile Sampler 的 Size 输入(或通过函数运算后接入)。
  3. 建一个函数图:用 Get Float 读取你发布的 size_falloff 参数, 再用 Linear Interpolation 在「中心尺寸」与「边缘尺寸」之间插值, 用 Clamp 限制范围。
  4. 把这个函数图接到 Tile Sampler 的尺寸输入上,拖动参数验证效果。
  5. (进阶)用 Hash 21 手工实现一个「每块石头随机旋转」的版本,与 Tile Sampler 自带的随机对比。

参考 / 达标标准

  • 离中心越远石头越小,且变化是连续的(不是突然跳变)
  • 拖动 size_falloff 从 0 到 1,效果从「完全均匀」平滑过渡到「强烈衰减」
  • 你能解释:为什么函数图必须用 Get Float 节点而不是写 getFloat("$...") (提示:当前版本的 SD 函数是节点化的,文本语法属于已废弃的旧机制)
  • 进阶:你能说出 Hash 函数与噪声节点在做「随机」时的本质区别 (提示:Hash 是「确定的坐标→值」映射,无空间相关性;噪声有空间连续性)

13性能与规范:让图能被别人接手

一张能跑但跑得很慢、或者只有你能看懂的图,在项目里等于不存在。 这一章讲两件事:怎么让它跑得快,怎么让它被人看懂。

13.1 缓存(Cache)与「为什么改了参数就卡」

SD 会为当前图里每一个已渲染的节点保留一张完整分辨率、未压缩的图像。这就是缓存。 理解了这一点,很多性能现象就能解释了:

  • 改动某个节点,它以及它下游的所有节点都会被重算——因为上游变了。
  • 所以把可调参数放在图的末端,是性能优化里回报最高的一件事。 同一个「污渍强度」,放在第一个节点上会让整张图重算,放在最后一步的 Blend 不透明度上几乎瞬时。
  • 实例节点(Instance node)会为被引用图的所有内部节点生成缓存,算完输出后释放内部缓存,只保留输出。 这也是子图能省内存的原因。
内存相关设置默认值说明
General → Memory → Image Cache自动(≈ 系统内存 75%) 一旦溢出到临时目录,速度会掉一个数量级。做 4K 图时适当上调或改用更大的机器
Engine → GPU cache limit2048 MB为渲染阶段预留的显存
General → Cooking Size Limit8192 px图分辨率的上限,防止误设超大分辨率炸内存

13.2 分辨率:最有效的优化杠杆

分辨率的开销是面积级的:边长翻倍,像素数 ×4,计算时间大致也 ×4。 所以最重要的优化手段就是「在不影响结果的前提下,把中间节点的分辨率降下来」。

节点类型建议分辨率理由
低频噪声(大形体、云状大块)相对 −1 或 −2(即 1/2 或 1/4)它本来就没什么高频信息,全分辨率纯属浪费
大半径 Blur先降分辨率再模糊大半径模糊在低分辨率上做,效果几乎一样但快得多
Flood Fill / Slope Blur / FX-Map尽可能降这些是最贵的节点,降到 1/2 就能省 75% 的时间
输出节点相对父级保证 .sbsar 的动态分辨率能力
高频细节(颗粒、划痕)全分辨率(或只对需要的地方提高)降了就看不出细节了

13.3 常见的性能杀手

杀手为什么慢替代方案
Grunge 系列的噪声Adobe 自己说它们是「复合噪声,细节丰富得多,代价是慢得多」 降低分辨率;或用普通噪声 + 扭曲自己合成
把 Perlin Scale 拉到几百当噪点用高频 Perlin 极慢 改用 White Noise / White Noise Fast + Blur
不必要地开 Alpha blending多一整套通道计算 只在真的需要透明时才开
FX-Map 里大量图像采样显存↔内存交换 改用 Tile Sampler / Shape Splatter
Flood Fill 在高分辨率 + 大量区域连通性遍历是 O(像素数) 降分辨率后再放大;减少区域数
用 Multiply 乘 0 来「关闭」效果前方节点仍然全量计算 用 Switch 节点 / Blend 的 Switch 模式
频繁切换父级分辨率会重算整张图、缓存与所有缩略图 用导出对话框的批量(Batch)选项卡临时覆盖导出分辨率
用 CPU 引擎比 GPU 慢很多 按 F9 切到 GPU(注意 Unity/Unreal 官方插件只能用 CPU 引擎)

13.4 找瓶颈的方法

  1. 打开控制台 / 状态栏,查看每个节点的计算耗时标记。耗时异常的节点会有醒目的时间标签。
  2. 按 Shift+D 临时禁用可疑节点(禁用后它会把主输入直接传下去), 看总时间是否骤降——这是最快的定位方法。
  3. 找到之后:优先降分辨率,其次简化逻辑,最后才考虑换节点。
  4. 切换父级分辨率来测性能是不好的习惯(它会重算所有东西)。更好的做法是复制一份图专门用来压测。

13.5 图的可读性规范(Graph Creation Etiquette)

Adobe 官方有一页专门讲这个,核心是「让别人(以及三个月后的你)能看懂」。落地成清单:

布局

  • 数据流从左到右
  • 所有输入节点放最左侧,所有输出节点放最右侧,并竖直对齐
  • 框架(Frame)分组:形状生成 → 材质属性 → 输出
  • 大形体的节点靠左,越来越细的细节靠右
  • 噪声源沿着图的下方摆放
  • 用对齐工具(H 水平 / V 垂直 / S 分布),不要手工摆

命名与注释

  • 永远重命名:01_brick_mask 而不是 Tile Generator 3
  • 框架名与节点标签用同一套词
  • 标识符(Identifier)与标签(Label)语义一致
  • 关键的「为什么」写在注释里,而不是「做了什么」
  • 大图放导航图钉(F2)
  • 长连线用 Alt+Shift+拖拽 重新走线;用 Dot node 做中继
  • 图里不能留虚线红链接(那是计算错误)

练习练习 13 · 把一张图优化到「拖动参数不卡」

目标:选你第 11 章的材质生成器,做一次系统的性能优化, 并整理成一份能交给别人的图。

  1. 用控制台找到耗时最长的三个节点,记下它们的名字与耗时。
  2. 对这三个节点分别尝试:降分辨率(相对 −1 / −2)、改用更便宜的替代节点、 或把参数移到图的末端。每做一项就重新测量并记录。
  3. 目标:把在 2048×2048 下拖动 dirt_amount 的响应时间压到 1 秒以内。
  4. 整理图:加框架(至少三个:形状 / 属性 / 输出)、给所有节点重命名、 给关键步骤加注释、把输入与输出对齐到两侧。
  5. 导出一张 2048 的贴图,记录耗时;再用导出对话框的 Batch 选项卡试试「低分辨率工作、高分辨率导出」的流程。

参考 / 达标标准

  • 耗时最长的节点被定位并处理;拖动主要参数能实时响应
  • 图上没有任何未命名的节点(Perlin Noise 12 这种一律改掉);没有虚线红链接
  • 你能说出:为什么把参数从开头移到末尾能显著提速,以及它的代价是什么 (提示:代价是参数不能再影响上游的中间结果,所以只适用于「末端混合」类的参数)
  • 参考达标标准:把图折叠成一个框架看,别人能在 30 秒内说出「这是做砖墙的, 左边管形状、右边管材质、最右是输出」

14导出与交付:把材质交到引擎里

材质在 SD 里好看,不等于在引擎里好看。这一章讲从图到最终交付文件的完整链路, 以及那些「明明做对了却出问题」的坑。

14.1 两条路:导出位图 vs 发布 .sbsar

导出位图(Export Outputs)发布 .sbsar(Publish)
产出一堆 PNG / TGA / EXR 贴图文件一个可调材质资产文件
分辨率导出时固定动态——使用方决定
可调性不可调,是死图可调发布过的参数
适用场景交付给不使用 Substance 的管线、做展示图、做参考交付给 Painter / Stager / 支持 .sbsar 的引擎
入口资源管理器右键图 → Export Outputs as bitmaps,或图视图 Tools → Export Outputs…资源管理器右键包 → Publish .sbsar file…(Ctrl+P)

14.2 导出位图的完整设置

Destination
保存目录。
Format
文件格式,对所有输出统一生效。PNG 是无损首选;TGA 用于某些老管线; EXR 用于需要高位深/HDR 的场合。
Pattern(文件名模板)
可用占位符:$(graph)(图名)· $(identifier)(输出标识符)· $(description) · $(label) · $(user_data) · $(group) · $(colorspace)(仅在启用 OCIO / Adobe ACE 色彩管理时可用)。
推荐模板:$(graph)_$(identifier) → brick_wall_basecolor.png
Outputs
选择导出哪些输出(可按输出或按输出组勾选)。
Automatic Export
图变化时自动重导出。很吃性能,正式制作时建议关掉。
Batch / UV Tiles 选项卡
批量导出多个 UV 块(UDIM),并可覆盖导出分辨率。

14.3 发布 .sbsar 的完整流程与自检

  1. 确认图已完整:至少一个输出节点、没有红色错误连线、没有未连接的必需输入。
  2. 确认所有分辨率是相对父级(否则发布时会收到警告,且资产失去动态分辨率)。
  3. 确认输出节点的 Identifier / Label / Usage / Color space 都设置正确。
  4. 确认参数已命名、分组、设好范围与默认值。
  5. 确认 Bitmap 节点的输出尺寸仍为绝对(见下方警告)。
  6. 把纯内部使用的辅助图的 Exposed in SBSAR 设为 No,避免把内部图暴露给用户。
  7. 在发布对话框里设置:文件路径、压缩(Archive compression)、 生成缺失的图标(Generate missing icons)(用 PBR Render 生成缩略图)、要暴露的图列表。
  8. 发布后用 Substance 3D Player 或直接在 Painter 里打开,逐个拖动参数验证。

14.4 引擎导入:sRGB 与绿通道

贴图sRGB备注
Base Color / Diffuse开颜色数据
Specular开颜色数据
Emissive开颜色数据
Roughness关数据
Metallic关数据
Glossiness关数据
Normal关数据。注意 DirectX / OpenGL
Height关数据
Ambient Occlusion关数据

Adobe 的 Unity 集成文档明确给出了这张表,并说明 Unity 集成会自动为 Substance 输出做正确的 sRGB 解释(也可手动覆盖)。Unreal 的对应设置请以官方 Unreal 集成文档为准。

法线的 DirectX / OpenGL

引擎 / 标准法线格式绿通道
Unreal EngineDirectX朝下(Y−)
Unity / OpenGLOpenGL朝上(Y+)
glTF / Blender(默认)OpenGL朝上(Y+)

在 SD 里,Normal 节点与 PBR Render 节点都有 Normal Format 开关来切换。导出前想清楚交付给谁。

14.5 通道打包(Channel Packing)

实时渲染中常常要把几张灰度图打包进一张 RGB 贴图以节省显存。不同引擎习惯不同:

引擎 / 管线常见打包方式
Unreal EngineORM:R = AO,G = Roughness,B = Metallic(最常见的约定)
Unity(HDRP)Mask Map:R = Metallic,G = AO,A = Detail,B = Smoothness
自定义 Shader按 Shader 约定,先和程序确认

打包的做法:用 Channel Shuffle 或 RGBA Merge 节点把三张灰度图合并成一张 RGB, 然后把输出节点的 Usage / 命名按引擎要求设置。导出后再用 Channel Shuffle 反查也能验证。

14.6 交付清单(可以直接复制到你的项目规范里)

文件层面

  • 贴图命名与引擎约定一致,且能一眼看出图与通道
  • 分辨率符合项目规格(通常 512/1K/2K/4K 的 2 的幂)
  • 位深正确:高度/法线 16 位,其余可用 8 位
  • 四方连续(要平铺的材质必须通过 3×3 检查)
  • 无接缝、无重复图案的明显「网格感」
  • .sbsar 体积合理(位图用 JPEG、开压缩)

质量层面

  • 基础色落在 PBR 安全范围(约 30~240 sRGB)
  • 法线强度合理,无塑料感与破面
  • 粗糙度有明显变化,且变化有物理理由
  • 金属的基础色填的是反射率,不是「看起来的颜色」
  • AO 没有被烘进基础色
  • 在三个光照角度 + 一次掠射角下都成立
  • 在真实模型上(不是球)验证过平铺与方向

练习练习 14 · 完成一次完整的交付

目标:把你练习 11 的材质生成器,按真实项目的标准完整交付一次。

  1. 导出一套 2048 的贴图(Base Color / Normal / Roughness / Metallic / Height / AO), 用文件名模板 $(graph)_$(identifier)。
  2. 用 Channel Shuffle 或 RGBA Merge 额外做一张 ORM 打包贴图 (R = AO,G = Roughness,B = Metallic),并与分开的三张对比验证(提示:在 2D 视图里单看 R/G/B 通道核对)。
  3. 把分辨率改成 4096 再导出一次,记录两次的耗时差。然后改回 1024 工作分辨率, 用导出对话框的 Batch 覆盖到 4096,对比两种做法的总耗时。
  4. 发布一个 .sbsar,用 Player 或 Painter 打开,逐个拖动你发布的五个参数。
  5. 做一张交付说明(可以是纯文本),写清楚:贴图清单与用途、色彩空间、法线格式、打包方式、参数含义与建议范围。

参考 / 达标标准

  • 六张贴图 + 一张打包贴图全部导出成功,命名规范、位深正确
  • 打包贴图的 R/G/B 通道分别与 AO/Roughness/Metallic 完全一致
  • .sbsar 能在 Painter 里正常加载并响应五个参数
  • 你能说出:为什么「导出前把父级分辨率改成 4096」是坏习惯(提示:它会重算整张图与所有缓存、缩略图)

15综合项目:从参考图到可交付的「木桶(Barrel)」材质

这是毕业作业。它要求你把前面 14 章学到的一切串起来:灰度思维、频率层次、 Curvature 边缘老化、遮罩布尔运算、混合材质(木 + 铁)、参数化、优化与交付。

15.1 为什么选木桶

木桶是一个「教科书级」的综合题材,因为它同时包含:

  • 方向性结构:竖直的木板拼接,木纹方向与板长方向一致(练各向异性);
  • 硬边结构:三道水平铁箍,与木板形成明确的材质分界;
  • 两种材质的混合:木头与铁,需要同时驱动金属度、粗糙度、基础色(练混合材质);
  • 细节层:铆钉、木纤维、铁锈、铁箍边缘的磨损与磕碰(练 Curvature 与散布);
  • 参数化空间:木板数量、铁箍位置、锈蚀程度、使用痕迹(练参数化)。
ex_barrel
木桶材质的六张核心贴图。①基础色(木板与铁箍有明确分界,木色按板随机) ②高度(三处铁箍是水平的高台,铆钉是点状凸起,木板接缝是竖直的凹槽) ③法线 ④粗糙度(铁箍在 0.34~0.82 之间剧烈变化以表现锈蚀,木板在 0.5~0.8) ⑤金属度(只有铁箍区域是白的,木板全黑——这是一张典型的「混合材质」金属度) ⑥AO(铁箍下方与木板缝里明显变暗)。

15.2 分步拆解

brick_stages
砖墙材质的六步分解:①用 Tile Generator 做基础砖块遮罩 ②用 Blur + Blend 加倒角与凹凸细节 ③由高度图生成法线 ④由高度图生成 AO ⑤由高度图生成曲率 ⑥这张灰度高度图还能继续当遮罩用(做磨损、积灰、上色)。
关键在第 ⑥ 步:高度图做完了不要丢掉——它是后面所有效果的「地形数据」。
brick_height
砖墙的高度图(灰度)本身。请仔细看它的取值——并不是纯黑到纯白, 而是留了余量(约 0.05~0.9)。这就是第 05 章说的「不要把数值顶到 0 和 1」: 留出余量,后面的磨损、模糊、扭曲才有空间可用。

第 1 步 · 收集参考与拆解

先找 5~10 张真实木桶的照片,横跨「崭新 / 使用过 / 废弃锈蚀」三种状态。 逐张写下四层描述(大形体 / 中细节 / 小细节 / 污渍),这是第 01 章练习的延续。

第 2 步 · 木板的形状(大形体)

Tile Generator(或 Tile Sampler)
  · X Amount = 8        → 8 块木板
  · Y Amount = 1        → 只有一排
  · 板间缝隙由 Histogram Scan 制造硬边
        │
        ▼
Flood Fill to Random Grayscale  → 每块板一个随机高度基准
        │
        ▼
Histogram Scan(加强对比)→ 每块板的高度略有差异(真实木桶的板不在同一平面上)

要点:木板的缝隙必须是竖直的细凹槽,不要做成均匀的网格。 用一点 Directional Warp 让板缝不是完全笔直。

第 3 步 · 木纹(中细节,各向异性)

方向性噪声(Stripes 或 Directional Noise)
        │
        ▼
Directional Warp(用一张低频 Perlin 驱动)→ 让纹理弯曲,像真实木纹
        │
        ▼
Non-Uniform Blur(沿木纹方向拉伸)→ 各向异性,这是「木头感」的关键
        │
        ▼
与木板形状 Blend(Overlay,低不透明度)

要点:木纹必须沿板长方向(这里是竖直方向)拉伸, 而且每块板的纹理应该不连续(因为每块板来自不同的木材)。后者用 Flood Fill 的随机偏移实现。

第 4 步 · 铁箍(大形体,第二种材质)

三条水平带。做法有几种,推荐:

Gradient Linear(竖直渐变)
        │
        ▼
三道「带」的遮罩 = 三个 Histogram Scan 相加(每道带的位置/宽度可参数化)
        │
        ▼
得到 iron_band 遮罩(0 = 无铁箍,1 = 铁箍)

要点:铁箍遮罩是本项目的「中枢遮罩」,它会同时驱动: 金属度(1 在带上)、高度(带上一块高台)、基础色(铁色 vs 木色)、粗糙度(铁的粗糙范围与木完全不同)。

第 5 步 · 铆钉(散布)

用 Tile Sampler 或 Splatter 沿每条铁箍均匀散布小圆点, 乘上 iron_band 遮罩(保证只在铁箍上出现),再加到高度图上。

第 6 步 · 铁锈(材质定义 + 遮罩组合)

锈蚀遮罩 = iron_band
          × 低频噪声(决定哪些区域锈得重)
          × (凸边遮罩 + 凹缝遮罩)   ← 锈从边缘和缝隙开始
          × 方向性遮罩(水流痕迹,从上往下)
          │
          ├─► 基础色:铁色 → 锈色(Gradient Map)
          ├─► 粗糙度:铁的低粗糙 → 锈的高粗糙
          └─► 金属度:锈会降低金属度(氧化层不是金属)

第 7 步 · 边缘磕碰(Curvature 磨损)

用第 07 章的标准做法:Curvature 提取凸边(铁箍的边缘、木板的棱角) × 噪声 → 从高度里减去 → 同时在基础色上露出更浅/更深的新材质。

第 8 步 · 木板的污渍与磨损

木板下半部分更容易脏(用 Gradient 做方向遮罩)× 噪声 → 让木板下方更暗、更粗糙、更「吸水」。上半部分则可能被手摸得发亮(低粗糙度)。

第 9 步 · 派生与上色

高度 → Height to Normal(16 位)· AO · Curvature。然后基础色用 Gradient Map 把「木板灰度」「铁箍灰度」「锈蚀灰度」分别映射到对应颜色,最后用 PBR Albedo Safe Color 保险。

第 10 步 · 参数化与交付

暴露参数:plank_count、band_count、rust_amount、 damage_amount、dirt_amount、random_seed。 按第 14 章的清单导出并发布。

ex_barrel_final
木桶材质完整贴图集(含逐张说明)。①基础色 ②高度 ③法线 ④粗糙度 ⑤金属度 ⑥AO。请重点核对:金属度图上只有铁箍是亮的(木板区域的金属度必须是纯黑), 以及粗糙度图上铁箍的变化幅度远大于木板(锈蚀的随机性)。

15.3 做完木桶之后:另外六个练习题材

这套流程(形状 → 细节 → 破碎 → 材质定义 → 派生 → 上色)可以套用到几乎所有材质上。 下面五组是同一流程产出的其他题材,可以当作自选题,也可以当作对照参考—— 每张都标注了它训练的是哪一项能力。

ex_plank_floor
木地板。训练各向异性:木纹必须沿板长方向拉伸, 而且每块板的纹理要不连续(用 Flood Fill 给每块板随机偏移)。
注意粗糙度——被踩得多的地方更光滑,板缝里更粗糙。
ex_stone_wall
石墙。训练不规则形体与裂缝:用脊状分形做大形, 再叠裂缝遮罩。石头的粗糙度整体偏高,但在被磨过的棱角处降低。
ex_metal_panel
金属板。训练金属度与拉丝:四角铆钉 + 方向性噪声做轧制拉丝, 金属度接近全白,粗糙度靠拉丝方向与凹坑造成各向异性高光。
ex_painted_metal
掉漆金属。训练多层材质与遮罩:油漆层被剥落、 露出底下的金属——金属度遮罩恰好就是「漆掉了多少」。 这是「一种材质叠在另一种材质上」的经典练习。
ex_terrain
地形。训练按坡度与高度分层上色:低处沙、中段草、陡坡裸岩、顶部积雪, 全部由坡度与高度算出来,而不是画出来。
ex_leather
皮革。训练细小凹凸与光泽:颗粒状起伏 + 折痕, 粗糙度在折痕里升高、在凸起处降低。注意它的法线强度不能拉得太高,否则会像塑料。

15.4 评分标准(自评用的检查表)

维度不合格合格优秀
形体(高度)平板一块,或只有单层噪声木板 + 铁箍 + 铆钉都成形 三种频率层次清楚,倒角正确,无纯白削顶
木纹方向各向同性(像石头的噪声)沿板长方向拉伸 每块板的纹理不连续,且有细微弯曲
材质分界木与铁没有明确分界金属度遮罩清楚 交界处有物理合理的过渡(铁箍压出的压痕、渗出的锈)
锈蚀满图均匀撒锈锈集中在铁箍上 锈从边缘与缝隙起始、有明显方向性(水流痕迹)、并正确影响粗糙度与金属度
粗糙度一片均匀灰木与铁明显不同 同一材质内部也有合理的局部变化(被摸亮 / 积灰 / 锈蚀)
基础色纯黑或纯白 / 塑料感在安全范围内,色调合理 每块板颜色不同、脏迹层次分明、金属填的是反射率色
3D 验证只看过 2D 视图在 3D 视图里看过 在三个光照角度 + 掠射角 + 换过一次环境贴图后都成立
工程化节点未命名、参数未发布命名清楚、参数可用 图有框架分组、参数有范围与描述、拖动流畅、可发布 .sbsar

练习大作业 · 木桶材质(完整交付)

目标:独立完成一个木桶材质的完整制作,包含六张以上贴图、参数化与交付说明。 要求与评分标准见上表。

  1. 先写参考分析(四层描述 × 至少三张参考图),再动手搭图。
  2. 按 15.2 的十步顺序搭图,每一步都在 2D 视图里确认结果正确后再进入下一步。
  3. 必须使用(并在图里能指出):Tile Generator 或 Tile Sampler、Flood Fill、 Curvature 驱动的边缘磨损、至少两种混合模式、一张方向性遮罩、Gradient Map 上色、16 位的高度与法线。
  4. 必须参数化并验证:plank_count、rust_amount、damage_amount、 random_seed(再加至少两个你自己选的)。
  5. 最后在 3D 视图里以三种光照角度截图(或用 Alt+S 保存渲染图)作为交付展示。
  6. 写一份交付说明:贴图清单、色彩空间、法线格式、参数含义与建议范围、已知限制。

参考 / 达标标准

  • 六张以上贴图齐全且命名规范;参数拖动流畅且不会把材质拖坏;能发布 .sbsar 并正常加载
  • 金属度图上只有铁箍区域是亮的;粗糙度在铁与木之间有明确差异且各自内部有变化
  • 图上有清晰的三段式框架分组(形状 / 属性 / 输出),任何节点都有语义化名称
  • 参考达标标准:对照
    ex_barrel
    木桶贴图集
    逐张比对。若你的结果在某一项明显不同, 先判断是「做得更好」还是「做错了」——例如你的铁锈分布比参考更集中在一侧,那就是更好的方向性设计
  • 进阶挑战:把木桶改造成「石砌井沿」(同样的结构逻辑,换成石材,铁箍换成绳圈)。 能在一小时内改完,说明你的图真正做到了「可复用」

15.5 做完之后:下一步怎么继续提高

  1. 拆解官方示例图:帮助 → 示例图(Sample Substance graphs)里的 .sbs 是免费的、最高质量的学习材料。 不要只看结果,要逐段理解连线理由。
  2. 做「材质研究(Material Study)」:每周挑一个真实材质,只做一小时,不求完美,求速度与手感。 这是 Eterea Studios 的「Designer Exercises」系列的核心思路。
  3. 建立个人节点库:把反复用的逻辑做成子图,起统一前缀(如 u_)。 一年之后你会有一个别人没有的工具箱。
  4. 练 Trim Sheet(修饰条带贴图)与 Tilable:这是生产中最被需要、也最能体现效率的技能。 Vincent Dérozier(育碧)的演讲「材质创作基础」专门强调过生产约束与 trim/tilable 的重要性。
  5. 去社区里问:Adobe 官方论坛的 Substance 3D Designer 板块、Polycount 的 Substance Designer 主帖, 都是活跃且友好的地方。
  6. 看别人的工作流,但不要只学一个人:不同作者的工作流差异很大,多看几个才能形成自己的判断。

16结语

这份教程的最后一句话,是本文档反复强调的同一个道理:

SD 里没有「画得好不好」,只有「描述得对不对」。
你做出的每一处效果,都应该能回答「它是什么形状、为什么会在这里、它的数值范围合理吗」。 当你能对自己的图连续回答这三个问题一百次,你就不再需要教程了——你只需要参考图。

祝你的材质库越来越大。

关于本教程的图示:全部插图均由本教程的程序化脚本现场计算生成——噪声与 Voronoi(泰森多边形)、 混合模式的数学定义、Sobel 求导生成法线、多尺度环境光遮蔽,以及用真正的 GGX 微面光照渲染的 PBR 预览球。 因此本文件不依赖任何外部图片资源,可以完全离线打开、随便转发。 它们用于说明原理与目标效果;界面示意图是按 Substance 3D Designer 实际面板结构重绘的示意, 并非软件截图——实际界面请以你安装的版本为准。

术语约定:优先「中文(English)」,例如 混合(Blend)、高度图(Height)、 环境光遮蔽(Ambient Occlusion)。但在业内普遍使用英文原名、且中文译名反而容易误解时保留英文并加注, 例如 Slope Blur(沿坡度侵蚀)、FX-Map(象限迭代图)、Flood Fill(连通区域填充)。 Special thanks to the Substance 3D community.