VLMaterial
Procedural Material Generation with Large Vision-Language Models
本文对应 Beichen Li 等人的视觉程序合成论文,正式收录于 The Thirteenth International Conference on Learning Representations,并获 Spotlight。2026 年另有一篇同名缩写 VLMaterial 的雷达材质识别论文,与本页无关。论文题名、作者、venue 与代码仓库信息可由 arXiv、OpenReview 与 官方仓库 相互核对。
一句话结论与真正贡献
VLMaterial 的关键不是提出新的程序化材质图语法,而是把 Blender 节点图转译成普通 Python 程序,以 LLaVA-NeXT 8B 进行 image-to-code 微调,并用“多次采样、执行过滤、渲染排序、参数后优化”把不可靠的自回归代码生成转化为可用系统。
最值得记住的系统观点
论文的最终预测并非一次前向生成。每个输入最多生成 \(N=50\) 个候选,直到收集 \(K=20\) 个有效程序,再以渲染图与输入图之间的 style loss 选择最优结果。表 1 的性能因此同时来自模型、随机解码、执行验证和 reranking,而不是单个 VLM checkpoint 的一次生成能力。
事实来源:论文 Section 4、Section 5 与 官方 README。
问题定义与 image-to-program 表示
程序化材质 \(M\) 被视为有向无环计算图 \(G=(\mathcal{V},\mathcal{E})\)。节点 \(v\in\mathcal{V}\) 是纹理生成器、滤波器、转换器或着色器,边 \(e\in\mathcal{E}\) 描述输出 socket 到输入 socket 的数据流。每个节点还带有异构参数集合 \(\phi=(p_{1},p_{2},\ldots)\),参数既可能连续,也可能是整数、类别或布尔值。
作者没有直接让模型生成抽象图 token。它把清理后的 Blender 节点图确定性转译成 `shader_material(material)` Python 函数,函数依次创建节点、连接边并赋值参数。执行程序后,Blender API 重建可编辑节点图。因而模型学习的目标是:
其中 \(I\) 为参考图像,\(q\) 为固定简短指令,\(y=(y_{1},\ldots,y_{T})\) 为 Python 程序 token。训练使用标准 causal language modeling,输入图像与 user prompt 部分的 label 被置为 ignore index,仅对 assistant 程序 token 计算损失。该实现可由 dataset.py 核对。
它仍然是 image-to-program,但中间表示并不是真正“学习到的视觉分解”。图结构、节点语义与参数都被压入同一条 Python token 序列,模型没有显式分别建模宏观布局、微观纹理、材质通道或生成过程。这正是后续 context representation 研究可以插入的位置。
模型与完整算法流程
VLM 结构
基础模型是 Hugging Face 的 `llava-hf/llama3-llava-next-8b-hf`。视觉编码器为 CLIP ViT/L-14,视觉投影器为 MLP,语言解码器为 LLaMA 3 8B。视觉编码器保持冻结,MLP projector 参与训练,LoRA 被应用于 language model 内除 vision tower、projector 与 LM head 以外的线性层。论文概括为“all attention-related linear layers”,代码的匹配规则实际覆盖语言模型内符合条件的 linear module 名称,见 model.py。
参数后优化
VLM 先给出拓扑与初始参数 \(\tilde M(\Phi)\)。作者随后仅修改参数,不改节点图结构。每轮随机扰动一部分参数并渲染,若新损失更小则接受,否则以固定概率 \(p_{\mathrm{acc}}=0.05\) 接受。保留全程最优解:
默认进行 200 次迭代,每轮仅抽取 10% 可优化参数。连续参数相对区间收窄至初值附近 \(\pm 20\%\),类别参数的修改概率为 0.2。这里被称为 MCMC,但接受差解的概率与损失差和温度无关,更接近带随机逃逸的 hill climbing,而非标准 Metropolis-Hastings。
数据构造与验证链
原始数据来源
| 来源 | 数量 | 性质 | 备注 |
|---|---|---|---|
| BlenderKit | 2,411 | 免费 Blender 材质 | 在线资产库 |
| Infinigen | 60 | 基础程序化材质 | 开源程序化场景框架 |
| 公开材质包 | 1,192 | 独立作者发布包 | 来自两组 Gumroad 资源 |
| 总计 | 3,663 | 清理前 | 最终仅保留 1,640 |
清理与过滤
- 从 material output node 反向执行 DFS,仅保留真正参与输出外观计算的节点和边。
- 无有效 output node 或节点数超过 30 的材质直接删除。
- node group 先被视作按功能签名区分的自定义节点类型,再从较小 group 开始逐步展开,直到接近 30 节点上限,以减少自定义类型数量。
- 节点图转译为 Python 并执行渲染。LLaMA 3 tokenizer 长度超过 2,048 的程序删除。
- 过滤空图、纯色和缺乏空间变化的结果。具体启发式是 512 像素 JPEG 文件小于 12 KB 即删除。
JPEG 文件大小是廉价而可执行的 complexity proxy,但它把纹理高频、编码噪声和语义质量混在一起。平滑但真实的金属、陶瓷或塑料可能被误删,高频但无意义的噪声可能被保留。该阈值同时参与训练数据过滤与推理有效性判定,造成评估标准与数据构造规则耦合。
结构增强:LLM genetic crossover
作者从 1,640 个清理后材质中人工选出 870 个细节丰富的复杂材质作为 sample pool。每次随机抽取两个程序,要求 GPT-4o-mini 只使用两者已有的节点类型与参数字段,写一个最多 30 节点的新程序。每对程序最多尝试 20 次,收集前 4 个有效程序,执行与渲染通过后再放回 pool。迭代后获得 50.4K 个不同结构。
查看结构增强 prompt 的关键约束
- 目标函数固定名为 `shader_material`。
- 仅能使用两个示例已有的 node types 和 parameter fields。
- 最多创建 30 个节点,目标 Blender 3.3。
- 要求复杂且具有语义意义,避免缺乏结构或过于相似。
- 严格沿用示例格式与编码风格,只返回代码。
完整原文见论文 Appendix A.1,并可在 gen_programs_llm_async.py 的 `SYSTEM_PROMPT_V2` 中核对。
参数增强
每个结构继续生成约 10 倍外观变体。连续参数默认在可行域与初值 \(\pm 25\%\) 的交集内采样,最小绝对扰动范围为 \(\pm 0.05\)。颜色在 HSV 空间采样,hue 覆盖完整 \([0,1]\),saturation 与 value 在 \(\pm 0.5\) 邻域。类别与布尔参数以 0.25 概率重新均匀取值。默认值参数仅以 0.2 概率显式扰动,以控制程序长度。
代码并非总是按论文文字所概括的局部均匀分布采样。若某参数在数据集中有足够统计量且标准差低,`sample_params.py` 可从经验均值与标准差定义的正态分布采样。Math 节点与 Vector Math 节点的 operation 参数被明确禁止修改。这些属于论文未充分展开、但复现会受影响的实现细节。
来源:论文 Section 4.1、4.2、Appendix A.1;官方代码 sample_params.py 与 package_data.py。
训练细节与解码策略
| 项目 | 论文或代码值 | 核查说明 |
|---|---|---|
| 基础模型 | LLaVA-NeXT, LLaMA 3 8B | `llava-hf/llama3-llava-next-8b-hf` |
| 训练模块 | MLP projector + LoRA | 约 40M trainable parameters |
| LoRA | \(r=8,\alpha=32\), dropout 0.05 | 语言模型线性层 |
| 优化器 | AdamW | learning rate \(10^{-4}\), weight decay 0 |
| 调度 | cosine | 3% linear warmup |
| 精度与注意力 | BF16, TF32, FlashAttention-2 | gradient checkpointing 开启 |
| 并行 | DeepSpeed ZeRO-3 | 8 × H100 80GB |
| batch | 每 GPU 4,总 batch 32 | gradient accumulation 1 |
| 训练长度 | 5 epochs,约 3 天 | 每 epoch 验证与保存 |
| 序列配置 | 训练脚本 max length 5,120 | 单个材质程序在构造阶段限制为 2,048 token,5,120 还容纳图像 token 与对话模板 |
训练 prompt
<image> Write a Python function with Blender API to create a material node graph for this image.
训练 prompt 很短。复杂 API 约束主要已经固化在 target program 与数据分布内,并未作为长 context 提供给微调模型。零样本 GPT-4o-mini baseline 则使用更长 prompt,其中给出函数模板、30 节点限制、Blender 3.3 兼容要求和只回复代码的规则。
推理解码
官方脚本使用 sampling,temperature 0.6、top-k 50、top-p 0.9,`max_new_tokens=2048`。程序批量生成后先写入 response 文本,再由独立 rendering 脚本逐个验证。默认 `inference.py` 参数是 temperature 1.0、top-k 10、top-p 0.9,但论文对应 shell script 覆盖了前两项。
候选集 \(\mathcal{Y}_{\mathrm{valid}}\) 来自最多 \(N\) 次随机解码中通过执行与 12 KB 过滤的前 \(K\) 个程序。标准实验使用 \(N=50,K=20\),受限预算实验使用 \(N=20,K=4\)。因此这里的“解码策略”实质是 stochastic best-of-K execution-guided decoding。
执行、渲染与 correctness
程序先从模型回复中的三反引号代码块抽取,写入临时 Python 文件,再以 Blender batch mode 调用 `render.py`。执行超时为 120 秒。若 stdout 出现 Python error、未生成输出文件,或渲染 JPEG 小于 12 KB,则判为无效。
程序正确率定义为有效样本比例。若某输入共尝试 \(n\le N\) 次,得到 \(k\le K\) 个有效程序:
这不是语义正确率,也不是程序与 ground-truth 图结构的匹配率。它只回答“代码是否能执行且渲染图文件足够复杂”。一个执行正确但完全不匹配输入的材质仍计为正确,一个视觉合理但 JPEG 小于阈值的材质会被计为错误。
感知排序损失
style loss 使用 VGG texture descriptor 的 Gram representation 做 L1 距离,再加入权重 0.1 的 16 × 16 下采样图像 L1 项。代码通过 32 × 32 average pooling 将 512 图像得到 16 × 16 表示:
实验设计与主要结果
测试包含 44 个 Blender 合成材质,64 个 Substance 合成材质和 64 张手机拍摄真实图像。Blender 是 in-distribution,Substance 与真实图像是 out-of-distribution。Substance 的节点系统表达能力更强,因此其合成外观也被作者视为更困难的分布外测试。
Table 1:标准预算,未使用 post-optimization
| 数据 | 方法 | Style ↓ | SWD ↓ | CLIP ↑ | Correct ↑ |
|---|---|---|---|---|---|
| Blender | GPT-4o-mini | 0.041 | 3.478 | 0.728 | 0.294 |
| Cond. MatFormer | 0.034 | 2.828 | 0.686 | 未适用 | |
| BlenderAlchemy | 0.027 | 2.381 | 0.777 | 未报告 | |
| Nearest Neighbor | 0.026 | 2.123 | 0.778 | 未报告 | |
| VLMaterial | 0.019 | 1.760 | 0.856 | 0.911 | |
| Substance | GPT-4o-mini | 0.039 | 3.722 | 0.680 | 0.227 |
| Cond. MatFormer | 0.033 | 2.366 | 0.736 | 未适用 | |
| BlenderAlchemy | 0.029 | 2.727 | 0.690 | 未报告 | |
| Nearest Neighbor | 0.027 | 2.546 | 0.720 | 未报告 | |
| VLMaterial | 0.026 | 2.283 | 0.762 | 0.890 | |
| Real | GPT-4o-mini | 0.035 | 4.252 | 0.642 | 0.248 |
| Cond. MatFormer | 0.028 | 2.872 | 0.684 | 未适用 | |
| BlenderAlchemy | 0.025 | 2.682 | 0.700 | 未报告 | |
| Nearest Neighbor | 0.021 | 2.487 | 0.700 | 未报告 | |
| VLMaterial | 0.025 | 2.417 | 0.722 | 0.870 |
说明:论文文字称方法在全部三个数据集上优于 baselines,但按 Table 1 的单项数值,真实图像 style loss 为 0.025,Nearest Neighbor 为更低的 0.021。更准确的表述是 VLMaterial 在真实集的 SWD 与 CLIP 最优,但 style loss 不是最优。
Table 2:消融
| 数据 | 配置 | Style ↓ | SWD ↓ | CLIP ↑ | Correct ↑ |
|---|---|---|---|---|---|
| Blender | 无结构增强 | 0.032 | 2.757 | 0.750 | 0.603 |
| 无参数增强 | 0.022 | 1.965 | 0.839 | 0.897 | |
| 完整模型 | 0.019 | 1.760 | 0.856 | 0.911 | |
| 加后优化 | 0.015 | 1.701 | 0.851 | 未适用 | |
| Substance | 无结构增强 | 0.033 | 3.084 | 0.727 | 0.487 |
| 无参数增强 | 0.030 | 2.482 | 0.744 | 0.767 | |
| 完整模型 | 0.026 | 2.283 | 0.762 | 0.890 | |
| 加后优化 | 0.020 | 2.184 | 0.748 | 未适用 | |
| Real | 无结构增强 | 0.030 | 3.308 | 0.688 | 0.342 |
| 无参数增强 | 0.028 | 2.682 | 0.707 | 0.713 | |
| 完整模型 | 0.025 | 2.417 | 0.722 | 0.870 | |
| 加后优化 | 0.018 | 2.309 | 0.732 | 未适用 |
结构增强贡献最大,尤其显著提高分布外 correctness。参数增强继续改善颜色与局部外观。MCMC 后优化强烈降低 style loss 与 SWD,但 CLIP 并非总是提高,Blender 从 0.856 降至 0.851,Substance 从 0.762 降至 0.748。这说明优化目标与语义指标并不完全一致。
受限采样预算 Table 3 的核心结论
在 (N=20,K=4) 时,VLMaterial 的 Blender 指标为 style 0.025、SWD 1.978、CLIP 0.833、correctness 0.926;Substance 为 0.031、2.431、0.750、0.926;真实图像为 0.030、2.566、0.716、0.880。它的 SWD 与 CLIP 仍有竞争力,但真实图像 style loss 明显落后 Nearest Neighbor 的 0.021。
速度与人类评价
| 方法 | 平均总时长 | 样本数 | 每样本 |
|---|---|---|---|
| GPT-4o-mini | 7.5 s | 20 | 0.38 s |
| Conditional MatFormer | 4.1 s | 20 | 0.21 s |
| BlenderAlchemy | 252.4 s | 32 | 7.89 s |
| VLMaterial | 47.9 s | 20 | 2.40 s |
用户研究有 8 名专业艺术家与 8 名领域研究者,共 16 人,比较 12 个案例。VLMaterial 相对 BlenderAlchemy 的视觉质量平均偏好为 91%,节点图质量偏好为 94%。可用性评分为 \(6.8\pm1.3\),BlenderAlchemy 为 \(4.2\pm1.7\)。但研究没有给出 inter-rater reliability、显著性检验,也没有比较人工从零创作时间。
关键 Figure 与 Table 的结构化解读
Figure 1 与 Figure 2:论文真正展示了什么
Figure 1 建立“图像输入、材质程序、场景应用、参数编辑”的价值链,证明结果不是静态贴图。Figure 2 展示 Python code 是核心生成对象,执行后再得到 shader node graph 和 output rendering。两图均未出现独立视觉分解器、显式 context optimizer 或闭环 agent。
Figure 3 与 Figure 5:定性对比如何阅读
列从左至右为输入、VLMaterial、GPT-4o-mini、Conditional MatFormer、BlenderAlchemy 与 Nearest Neighbor。VLMaterial 在规则结构、颜色分区与颗粒统计上通常更贴近输入。视觉对比也暴露固定 point light 造成的中央高光,这意味着模型可能学习了材质外观与固定照明共同形成的图像分布。
Figure 4 与 Figure 6:增强和后优化各解决什么
无结构增强时,主要模式和空间组织容易错误。加入结构增强后,节点组合更接近目标纹理家族。参数增强进一步修正颜色与尺度。post-optimization 只在固定拓扑内调整参数,因此能修正整体色调、频率与尺度,却不能补回缺失的节点或连接。
Figure 7:失败案例
两例来自 Substance,一例来自真实图像。复杂纹理超出 Blender 内置节点与已收集 node groups 在 30 节点预算内的表达能力时,模型无法找到合适结构。失败既可能来自表示容量,也可能来自 2,048 token 截断、训练结构覆盖不足与随机采样预算不足。
Figure 8:复杂度不是单调关系
少于 4 个节点的简单材质也可能表现较差,作者归因于错误或次优 custom node group 选择。超过 22 节点或接近 2,000 token 后 correctness 再次下降,说明序列长度和依赖复杂度开始主导错误。性能呈现中间复杂度更稳定的形态。
官方仓库可复现性核查
仓库包含数据清理、转译、GPT 程序增强、参数增强、划分打包、LLaVA 微调、候选生成、Blender 渲染验证和 MCMC 后优化。数据归档与预训练权重均提供 Google Drive 链接。代码与权重为 MIT License,数据为 CC BY-NC 4.0。
- 已公开 完整训练与推理代码,固定基础模型名,环境版本,LoRA、DeepSpeed 与解码参数。
- 已公开 数据与 checkpoint 下载链接,原始材质到训练 JSON 的构造脚本。
- 已公开 Blender 3.3、EEVEE、512 渲染、相机与灯光参数、12 KB 有效性阈值。
- 部分公开 原始在线材质来源可追溯,但具体抓取清单、下载日期、源许可证逐项记录未见统一 manifest。
- 部分公开 GPT-4o-mini prompt 与默认模型 ID 已公开,但 API snapshot、服务端 seed、采样参数未固定,结构增强无法逐字节重现。
- 未报告 训练总 step 数、validation loss、checkpoint 选择规则、完整随机种子链、训练实际峰值显存与总算力成本。
- 存在问题 README 生成 `llava_sllm_p10_{train|val|test}.json`,训练和推理 shell 脚本却引用 `llava_noaug_{train|val|test}.json`。使用者需手动核对并修正文件名。
实际复现资源
论文训练使用 8 张 H100 80GB,batch 32,5 epochs,约三天。README 建议微调时每张 GPU 至少 48GB VRAM,并说明默认脚本针对 8 张 H100。数据构造与渲染阶段论文使用 8 张 L4 24GB,仓库特别提示 EEVEE/OpenGL 渲染在 RTX 3090、RTX A6000、L4 等图形架构 GPU 上可能快于 A100 或 H100。
conda env create -f environment.yml conda activate vlmaterial bash llava_hf/scripts/peft_sllm_p10.sh bash llava_hf/scripts/eval_sllm_p10.sh bash llava_hf/scripts/render_sllm_p10.sh python llava_hf/param_search.py RESULTS --max_iter 200
将训练、生成与渲染脚本中的 `llava_noaug_*` 改为 README 实际创建的 `llava_sllm_p10_*`,或先检查已下载 dataset archive 内是否同时提供两套 JSON。仓库名称 `sllm_p10` 暗示使用结构增强与参数增强,但仅凭命名不足以断言作者训练时的内部路径。
仓库快照:commit 5193dad,2025-02-18,Initial commit。README 明确称仓库是 archival reference,贡献不会被积极 review 或 merge。
局限、失败模式与 reviewer 式锐评
值得肯定
- 把开放 Blender API 与 VLM code prior 结合,绕开 proprietary Substance training data 的发布限制。
- 结构增强不是简单参数抖动,对 correctness 与外观匹配均有清晰消融支持。
- 评估同时覆盖 in-distribution、跨系统合成图与真实照片,并报告程序执行率和艺术家偏好。
- 释放端到端数据构造工具,复现信息显著优于只开放 inference demo 的工作。
关键质疑
- 结果依赖大采样预算。 主表每张图最多生成 50 次,并取前 20 个有效程序中的最优者。一次生成的期望质量没有单独报告,方法的模型能力与 search compute 难以分离。
- 有效性定义偏弱。 correctness 只要求可执行且 JPEG 足够大,不验证是否有可编辑意义、是否 tileable、是否正确输出 PBR 通道,也不比较拓扑语义。
- 渲染域过窄。 固定平面、固定点光与固定相机易让模型学习 baked illumination。真实输入中的几何、光照与材质属性没有解耦。
- 表示不够紧凑。 论文自己承认 Python 冗长。没有 grammar constraint,使超过 22 节点或 2,000 token 的程序正确率下降。
- 数据增强的独立创新不纯。 结构数据由 GPT-4o-mini 合成,质量过滤又依赖同一套执行与 JPEG 规则。缺乏结构新颖性、重复率和 human quality audit 的系统统计。
- 比较公平性有限。 Conditional MatFormer 来自不同程序系统,且由原作者代跑;BlenderAlchemy 以 nearest neighbor 为起点且使用 GPT-4o-mini。节点词表、训练数据和计算预算并不等价。
- 后优化不是结构闭环。 MCMC 只能调参数,初始拓扑错了就无法增加或重连节点。style loss 提升也不保证 CLIP 或语义提升。
- 论文文字略有过度概括。 “全部数据集优于 baselines”不符合真实图像 style loss 单项,Nearest Neighbor 的 0.021 优于 0.025。
这是一个强工程型基线与重要开放数据贡献。它证明 VLM 可以成为程序化材质图生成器,但还没有解决“从视觉证据推导可解释生成过程”的核心问题。其最佳价值是提供可执行环境、数据与 baseline,让后续工作研究更好的 context representation、约束解码与 renderer-in-the-loop agent。
与三条研究线的关系
| 研究线 | VLMaterial 已经做了什么 | 仍缺什么 |
|---|---|---|
| Procedural Material Generation | 从单张参考图像生成 Blender Python material program,执行后得到可编辑节点图。 | 更丰富的 Substance node space,多通道 PBR 输出,tileability,结构与参数分层建模。 |
| Context Optimization | 训练前通过图清理、node group 展开、程序规范化和数据增强,间接优化了模型看到的训练 context。 | 推理时没有显式 \(C^{\ast}\),没有图像分解、候选检索、节点库选择或预算自适应的 context optimizer。 |
| Agent | 系统执行多次生成、代码验证、渲染和排序,具备工具链形态。 | 没有维护状态的策略体,也不读取错误和渲染反馈后主动修改结构。MCMC 只是固定规则参数搜索。 |
VLMaterial 原始贡献应写成 \(I\rightarrow\mathrm{VLM}\rightarrow P\rightarrow G\rightarrow\hat I\),外加 best-of-K 过滤与 MCMC 参数优化。下面的 context optimizer 与 agent 公式是当前研究框架,不属于论文。
对照关系非常清楚:VLMaterial 将图像直接编码成视觉 token,靠模型参数隐式决定该看什么;拟研究系统先构造可审计的 \(C^{\ast}\),再让 agent 基于 renderer feedback 迭代选择结构与参数。前者是 amortized generation 加后验筛选,后者应是 context-conditioned sequential decision making。
对 context-optimized agentic PMG 的具体启示
建议的 context representation
不要只生成自然语言描述。让 context optimizer 输出与材质程序可对齐的层级对象,使每个视觉判断都能映射到 agent action:
material_context:
global: {periodicity, dominant_scale, palette, reflectance_family}
macro_structure: [{region, primitive, orientation, spacing, hierarchy}]
meso_pattern: [{generator_family, warp, blend_logic, mask_relation}]
micro_surface: [{noise_family, frequency_band, roughness_effect, normal_effect}]
channel_hypotheses: {base_color, roughness, normal, height, metallic}
node_candidates: [{node_type, role, confidence, evidence}]
constraints: {node_budget, token_budget, tileable, allowed_node_library}
uncertainty: [{claim, alternatives, confidence}]
这比单纯“先观察大结构,再观察小纹理”的 prompt 更适合作为学术中间表示,因为可以做标注、消融、结构准确率评价、token budget 控制和 agent 行为归因。
建议的 agent loop
- Context Optimizer 解析参考图像,输出结构化 (C_{0})。
- Retriever 根据 (C_{0}) 从节点库、程序片段库和相似材质库选择有限候选。
- Agent 先生成粗结构 (G_{0}),执行静态类型检查与 Blender sandbox。
- Renderer 输出多种光照下的 base color、roughness、normal 与 shaded render,而非仅固定 point light 图像。
- Critic 将误差分解为 topology error、parameter error、lighting ambiguity 与 representation insufficiency。
- Agent 根据 error type 选择改结构、调参数、补 context 或停止,并保存完整 process trace。
以 VLMaterial checkpoint 和执行环境作为 frozen generator baseline,保持模型权重不变,只改变推理 context。比较 raw image、free-form visual analysis、固定人工 decomposition、learned structured context 四种条件。在相同生成 token、Blender render 和 wall-clock budget 下报告 best-of-1、best-of-4、best-of-20、program validity、style、SWD、CLIP、graph edit distance 与人工可编辑性。这样能隔离 context optimization 的独立贡献。
推荐消融矩阵
| 实验变量 | 对照 | 目标问题 |
|---|---|---|
| Context granularity | 无分解 / macro / macro+meso / 全层级 | 哪一级信息真正提高图结构 |
| Representation | 自然语言 / JSON schema / graph sketch / retrieved subprograms | 优化来自信息还是格式 |
| Feedback | 无反馈 / 单一 shaded render / multi-channel / 多光照 | renderer feedback 的边际价值 |
| Action space | 仅参数 / 结构编辑 / 结构与参数联合 | agent 是否真正超越 MCMC |
| Budget | 固定生成次数 / 固定 token / 固定时间 | 公平比较 search compute |
| Optimizer | 人工规则 / 闭源 VLM / 小型微调模型 | 是否需要训练 context optimizer |
Reward 设计
appearance 可组合 style、SWD、CLIP 与多通道误差;valid 奖励编译、执行、非退化和 tileability;graph 奖励结构合理性与节点复用;edit 衡量专业用户修改成本;compute 惩罚 token、生成次数、渲染次数与耗时。只用图像相似度会鼓励复杂但不可编辑的程序,也会继承 VLMaterial 固定渲染域的偏差。
创新点不应写成“让模型先看大结构再看细节”。更有说服力的命题是:在固定 foundation model 与固定工具环境下,学习或搜索一个预算受限、结构化、可执行对齐的 context representation,能否提高 agent 的图结构决策效率、外观匹配与可编辑性,并减少 best-of-K brute-force sampling。
References
- Li, B. et al. VLMaterial: Procedural Material Generation with Large Vision-Language Models. arXiv:2501.18623v2, 2025. PDF · HTML.
- Li, B. et al. ICLR 2025 OpenReview record. The Thirteenth International Conference on Learning Representations, Spotlight.
- MIT GFX. VLMaterial official code repository. Commit 5193dad, 2025-02-18.
- MIT GFX. README and reproduction instructions. Includes data and checkpoint links, installation, training, inference and dataset construction.
- MIT GFX. model.py, dataset.py, inference.py. Model construction, causal labels, decoding and execution verification.
- MIT GFX. gen_programs_llm_async.py, sample_params.py, render.py. Augmentation, parameter sampling and rendering implementation.
- Guerrero, P. et al. MatFormer: A Generative Model for Procedural Materials. 2022.
- Hu, Y. et al. Generating Procedural Materials from Text or Image Prompts. SIGGRAPH 2023.
- Huang, I. et al. BlenderAlchemy: Editing 3D Graphics with Vision-Language Models. 2024.
- Li, B. et al. Procedural Material Generation with Reinforcement Learning. ACM TOG, SIGGRAPH Asia 2024.
资料状态:论文 v2、Appendix、官方代码仓库与 README 已核对。OpenReview 页面可能触发浏览器验证,因此本页只使用其 venue 记录,不引用不可直接核验的 review 文本。所有未在论文或公开代码中找到的数值均明确标为未报告。