为什么AI画的玻璃和金属总像塑料?材质渲染的盲区
让 AI 画一只玻璃杯、一块拉丝金属表壳,出来的图构图漂亮、光影也像样,但一眼就觉得”这是塑料”。杯壁不透,金属没有环境反射,高光软塌塌地糊成一片。加了”glassy””metallic””photorealistic”也没用,有时反而更假。
这不是提示词写得不够狠,而是生成模型根本没有”材质”这个物理量。它学的是像素长什么样,不是光怎么走。搞清楚这层错位,才知道哪些能靠提示词救、哪些必须靠流程补。
第一步:渲染方程和像素统计,是两套完全不同的东西
传统 3D 渲染里,一个表面长什么样由 BRDF(双向反射分布函数)决定:粗糙度、金属度、折射率(IOR)、菲涅尔反射率,加上光源和环境贴图,算出来的是”这块表面应该把哪些光反射到相机里”。
玻璃之所以是玻璃,是因为 IOR 约 1.5,光穿过时发生折射,背后的景物被扭曲;镜面金属之所以是金属,是因为它几乎不产生漫反射,你把整个环境映在了表面上。这两件事都需要知道画面外的环境。
扩散模型没有这些。它在训练时看的是”一堆被标注为玻璃杯的照片,它们的像素分布大概如此”,然后在去噪时重建一个符合这个分布的图案。它学到的是玻璃杯常见的外形、常见的亮边、常见的透明感,而不是折射定律。
第二步:为什么模型会往”塑料”上收敛
有三个叠加的原因。
一是训练样本里的材质是混杂的。 电商图、3D 渲染图、塑料仿玻璃制品、磨砂半透明材质,在图文配对数据里往往都叫”玻璃杯”。模型取的是这些样本的平均,平均值天然偏向”有点亮、有点透、但都不彻底”——正好是塑料的观感。
二是镜面反射需要环境,而文本条件给不了环境。 一块抛光金属,表面上 90% 的内容是它映出的东西:柔光箱的方块、窗户的竖条、地面的渐变。提示词里没有这些信息,模型只能凭空编一份”高光”,通常编成一团柔亮的白色渐变。而柔亮宽高光恰恰是塑料的特征——金属的高光应该窄、锐、边界清楚(对应粗糙度 0.05~0.2)。
三是折射要求”背景被扭曲”,这跟模型的局部一致性相冲突。 玻璃杯后面的直线应该错开、断开、被放大。但扩散模型在生成时倾向于让背景保持连贯合理,把直线补完整比把它折断更符合训练分布。于是杯壁看起来像贴了一层半透明磨砂膜。
第三步:把”材质名词”换成”光学线索”
提示词层面能做的最有效的一件事,是别再堆形容词,改写成可观察的光学现象:
- 不写”玻璃杯”,写”透明容器,背后的桌面线条透过杯壁发生明显错位与放大,杯口有锐利的边缘高光,底部有聚焦的焦散光斑”;
- 不写”金属”,写”表面映出长方形柔光箱和窗户竖条的清晰倒影,高光边界锐利,暗部几乎全黑”;
- 主动补环境:”暗色摄影棚,左侧单一柔光箱,右侧黑色吸光板”——给了环境,模型才有东西可映。
同时控制住会削弱材质的词:过度柔光、雾感、磨砂、粉彩、暖调氛围,都会把反射推向漫射。
第四步:生成之外要补的三道工序
纯靠提示词很难拿到可用于交付的材质,成熟做法是把物理正确的部分放到生成之外:
- 用参考图给条件:IP-Adapter 权重 0.6~0.8 传材质观感,ControlNet(Depth / Canny)锁器皿轮廓,避免为了透光把杯型改掉。
- 用渲染底图做图生图:在 3D 软件里摆好杯型、打好光、给真实的折射与反射,导出低细节底图,再以 denoise 0.3~0.45 重绘,让模型补质感而不破坏光学结构。denoise 超过 0.6,折射关系基本会丢。
- 后期补关键光:焦散光斑、边缘锐利高光、环境倒影单独成层叠回去,接触阴影对齐。这三层是”塑料变玻璃”的开关。
如果是长期反复出同一类产品,用 15~30 张真实材质实拍微调一个材质 LoRA(800~1500 步、学习率 1e-4 量级),比每次调提示词稳定得多。
结论
一句话记法:模型会画”看起来像玻璃的东西”,但不会算”光穿过玻璃”。凡是依赖画面外环境的现象——镜面反射、折射扭曲、焦散——都落在它的盲区里。可操作的做法是把材质拆两半:形与色交给生成,光学证据交给参考图、渲染底图和后期。
在 AIGC广告 的产品类镜头里,玻璃与金属几乎是必检项,交付前会逐帧核对倒影方向、高光锐度和背景折射错位点。需要按品牌材质规范落地时,AI广告制作 的流程文档里通常会写明哪些元素由生成环节负责、哪些必须回贴真实光学层——这条分工线,比多写十个提示词管用。