输入
一张目标材质 RGB 闪光照片 \(I^{\ast}\),以及用户提供或经最近邻检索选出的固定材质图 \(G\)。图内包含滤镜、生成器、FX-Map、Pixel Processor 和可能的 exposed parameters。
把生产级材质图变成可求导程序,
再直接搜索连续与整数参数。
论文解决的是固定程序化材质图的参数捕获:给定一张闪光照片和一个已经选好的 Substance 风格节点图,系统执行图、渲染 SVBRDF 外观,并交替优化可微连续参数与离散/不可微参数。核心价值来自新的执行基础设施和优化器组合,系统不会生成新的图拓扑。
MATch 已经能够把许多滤镜节点翻译为可微程序,再用梯度下降匹配目标照片。生产级图中的噪声与图案生成器包含随机数、整数尺度、分支、循环和逐像素函数,旧 Diffmat 只能将这类输出预先缓存为位图。缓存冻结了生成器,也让目标与缓存尺度不一致时无法修正。Neural Proxies 为生成器训练神经代理,代价包括逐节点训练、近似误差、固定分辨率与有限参数范围。
一张目标材质 RGB 闪光照片 \(I^{\ast}\),以及用户提供或经最近邻检索选出的固定材质图 \(G\)。图内包含滤镜、生成器、FX-Map、Pixel Processor 和可能的 exposed parameters。
图 \(G\) 的优化参数,包括连续浮点参数、整数/开关参数和可选 exposed parameters;输出图结构与节点集合保持固定。
使执行图、生成 SVBRDF 贴图并在固定成像模型下渲染得到的 \(I(\Theta,\Phi)\) 与 \(I^{\ast}\) 在 VGG19 Gram descriptor 与频域结构上接近。

为避免 PDF 字体提取造成的横线丢失,这里把论文符号按语义标准化。连续参数写作 \(\Theta=(\theta_f,\theta_g,\bar{\theta}_g)\):\(\theta_f\) 是可微滤镜参数,\(\theta_g\) 是可微生成器参数,\(\bar{\theta}_g\) 是不可微连续生成器参数。整数/离散参数写作 \(\Phi=(\phi_f,\phi_g)\)。exposed parameters 写作 \(E=(e_d,e_n,e_i)\),分别表示可微连续、不可微连续与整数 exposed 参数。
\(G\):固定节点图及连接关系
\(I(\Theta,\Phi,E)\):执行材质图、生成 SVBRDF 并渲染后的图像
\(I^{\ast}\):目标闪光照片或合成目标
\(\mathcal T(\cdot)\):VGG19 多层特征 Gram matrix descriptor
\(\mathcal F(\cdot)\):二维 FFT 幅度表示
\(\lambda_F\):频域损失权重
FX-Map 递归细分纹理画布。深度 \(l\) 的每个方格 \((p,q)\) 可以发射若干 atomic pattern;每个 pattern 有形状 \(\psi\)、几何变换 \(\mathcal A\)、强度 \(\alpha\) 与混合方式。用 \(F_{l,p,q}\) 表示当前方格直接产生的图案合成:
论文的文字定义要求 \(S_{l,p,q}\) 包含该方格整棵子树的累积结果。按深度优先遍历语义,递推应明确写为:
原论文 Eq. (2) 右侧对子节点使用了与“完整子树累积”不一致的符号,无法递归覆盖超过一层的后代。上式依据紧接公式的三步 DFS 描述标准化,属于排版/符号修正,不改变算法。

通用 FX-Map 可能借助 Set/Sequence 建立先后依赖,因此展开仍需顺序进行。预定义生成器可以利用已知结构专门优化:Appendix B 以 Make It Tile Patch 为例,它只渲染一个 octave,连续 pattern 之间没有依赖,可以一次并行计算。论文报告约 \(300\times\) 加速针对该专门节点相对旧 Diffmat 的硬编码实现。

Pixel Processor 为每个像素执行用户定义函数,可表达 Sobel、warp、坐标变换和更复杂着色过程。Diffmat v2 静态推断 function node 的输入类型,将标量、向量和逐像素 tensor 映射到标准 Python 或 PyTorch 运算;遇到类型不一致时显式 cast。连续参数或中间纹理需要梯度时,生成程序沿 PyTorch 计算图自动反向传播。

令 \(\Theta_{\nabla}=(\theta_f,\theta_g)\) 表示当前启用梯度的连续子集。Stage 1 只更新 \(\theta_f\)、\(\theta_g\) 与 \(e_d\),使全局 albedo 和仿射几何大致接近目标;不可微连续参数 \(\bar{\theta}_g\) 保持固定。用户可以停止某些参数组的梯度,从而保留均匀 tile、weave 等结构或只调整 exposed parameters。
每个 epoch 依次访问所有激活参数,固定其余参数并做一维线性搜索。整数步长为 \(1\);归一化连续参数在 \([0,1]\) 上使用 \(0.01\) 步长,默认范围允许用户扩展。目标增加 FFT 项,因为频谱对重复间距、排列与其他结构变化更敏感。
论文通常在不超过 5 个 epoch 收敛。该方法依赖“多数参数影响相对正交”的经验假设;复杂 weave 中互相耦合的整数参数会让逐坐标更新破坏结构。
固定新找到的离散配置,再以 Stage 1 的目标微调 \(\Theta_{\nabla}\) 与启用梯度的 exposed 参数;\(\bar{\theta}_g\) 等不可微连续参数仍保持固定。Stage 2 与 Stage 3 可以重复,论文称多数案例最多再循环两次。正文没有给出 Adam learning rate、FFT 权重、具体停止阈值、硬件型号或逐案例总时长;这些缺失项不能从 README 示例参数反推。
参考图 \(G_r\) 具有连续 exposed parameter \(e\in[0,1]\),目标图 \(G_t\) 具有低层连续参数。系统在 \(e_j=j/N\) 处采样参考图,并以 \(e=0\) 为基准计算 descriptor 差:
对每个采样点,目标图从默认参数或前一个解开始优化,使 descriptor 变化接近缩放后的参考变化。为保持轨迹平滑,\(j\gt0\) 时加入与前一个目标解的图像和 descriptor 距离:
随后按每个参数对 descriptor 变化的贡献选出 top-\(K\) 参数,对第 \(k\) 个参数序列用最小二乘拟合 \(M\) 阶多项式 \(P_k(e)=\sum_{m=0}^M c_{k,m}e^m\),再将多项式写成 S3D function graph。该功能只迁移连续 exposed parameters,要求参考图与目标图具有相近材质语义;它没有学习通用语义参数,也没有迁移离散控制。

| 节点 | 需梯度 | 256² | 512² | 1024² | |||
|---|---|---|---|---|---|---|---|
| Diffmat v2 F/B | S3D | Diffmat v2 F/B | S3D | Diffmat v2 F/B | S3D | ||
| Make It Tile Patch | Y | 8 / 5 | 11 | 10 / 6 | 13 | 22 / 19 | 13 |
| Tile Generator | Y | 8 / 6 | 2 | 8 / 9 | 2 | 16 / 16 | 4 |
| Brick Generator | Y | 5 / 4 | 16 | 5 / 4 | 16 | 6 / 5 | 18 |
| Stripes | Y | 3 / 1 | 6 | 3 / 2 | 6 | 4 / 5 | 7 |
| Arc Pavement | Y | 6 / 3 | 2 | 6 / 4 | 2 | 8 / 5 | 2 |
| Splatter | Y | 7 / 4 | 6 | 7 / 4 | 6 | 12 / 8 | 5 |
| Perlin Noise | N | 5 / — | 8 | 6 / — | 9 | 7 / — | 13 |
| Crystal 2 | N | 6 / — | 3 | 6 / — | 5 | 8 / — | 15 |
| Clouds 2 | N | 11 / — | 16 | 13 / — | 16 | 15 / — | 20 |
| BnW Spots 3 | N | 15 / — | 24 | 17 / — | 25 | 20 / — | 26 |
完整重建论文 Table 1。S3D 只给 forward 时间;不需要可微连续参数的节点没有 backward。Caption 宣称所有案例“comparable or faster”,原值中 Tile Generator 在 512² 为 8 ms 对 2 ms、Arc Pavement 为 6 ms 对 2 ms、Make It Tile Patch 在 1024² 为 22 ms 对 13 ms,均显示 Diffmat v2 forward 较慢。缺少统一硬件与置信区间时,适合将结论限定为同数量级且部分节点更快。
| 图 | 256 F | 256 B | 512 F | 512 B | 1024 F | 1024 B |
|---|---|---|---|---|---|---|
| Brick Wall | 105 | 51 | 108 | 54 | 117 | 89 |
| Concrete Tiles | 21 | 13 | 18 | 20 | 24 | 60 |
| Aluminium Cut | 28 | 16 | 28 | 25 | 41 | 50 |
| Metal Grill | 22 | 14 | 20 | 25 | 40 | 168 |
| Amethyst | 52 | 40 | 60 | 52 | 102 | 129 |
| Marble | 44 | 15 | 46 | 18 | 53 | 68 |
| Bitten Cookie | 150 | 84 | 150 | 87 | 188 | 214 |
| Weave and Knit | 160 | 114 | 199 | 144 | 412 | 609 |
| Nature Ground | 264 | 186 | 299 | 235 | 479 | 758 |
| Office Carpet | 68 | 51 | 95 | 106 | 227 | 434 |
旧 Diffmat 在 Office Carpet 512² 上为 1659 / 1853 ms;Diffmat v2 为 95 / 106 ms,约 \(17\times\)。Neural Proxy 的引用估算为 256² 上 11 ms、512² 上 44 ms;论文没有提供统一硬件、同图结构与同测试脚本,因此这些数字只能帮助理解数量级。



| 核查项 | 官方代码事实 | 实践含义 |
|---|---|---|
| 节点覆盖 | graph_trans.py 将未知节点、缺失配置和未知连接器标记为 external。 | 这类节点交给 SAT 生成纹理;前驱子图被冻结,相关参数无法完整参与端到端优化。 |
| 专有工具 | README 明确写明实用工作流仍需要 AS3D 或 SAT;external_input.py 调用 sbscooker 和 sbsrender。 | 支持范围内的生成器可以自包含执行;完整工业图仍可能依赖 Adobe 工具和 bitmap cache。 |
| 图结构限制 | README 要求单个 material graph,不支持 custom dependent graphs;只支持方形纹理并忽略图内分辨率变化。 | 层级 custom graph 需要人工 flatten;非方形输入会按方形假设处理。 |
| 遗漏功能 | incomplete_nodes.md 列出 Blend、Curve、Distance、Gradient Map、Bevel、Quantize 的部分未实现功能。 | 图可以成功翻译,但相关参数或模式会被忽略,视觉与优化结果可能偏离 S3D。 |
| 混合优化 | GridSearch 逐个穷举整数范围,并在 \([0,1]\) 上构造 search_res + 1 个连续值。 | 默认 search_res=100 对应 0.01 步长;复杂图的代价与参数数目和候选范围直接增长。 |
| 停止条件 | grid backend 按固定 num_iters 运行,可选 timeout;未见自动收敛阈值。 | 论文“多数不超过 5 epochs”属于经验报告,公开 CLI 默认值本身并不构成自适应停止。 |
| 硬编码范围 | 节点配置与参数翻译器提供范围;CLI 可切换过滤级别及外部参数文件。 | 搜索不会自行发现新的节点或拓扑;参数范围需要图配置或用户指定。 |
| 许可证 | MIT 与 Adobe 联合 Research License 仅授权非商业研究用途,并要求再分发时附带许可证。 | 将代码集成到商业产品前需要单独处理授权。 |
.sbs,并明确 normal format。未知节点需要可用的 AS3D/SAT 安装和外部缓存目录。MaterialGraphTranslator(..., res=9, external_noise=False) 翻译 512² 图,执行 graph.compile();复杂生产图建议至少 16 GB VRAM。HybridOptimizer 的 grid backend,组合 VGG 与 FFT 指标,最后再次连续微调。22f7976ce698cb3db2337f84fad7a37bdb9f1ef3:README、LICENSE、incomplete_nodes.md、translator、optimizer、FX-Map 与测试 CLI。图像均来自正式论文对应 Figure 的页面区域。Table 1 与 Table 2 按正式 PDF 原值逐项重建。页面没有运行论文优化实验;代码分析属于提交快照的静态审计。