
你有没有想过,同一辆玩具车,放在正午的沙漠里拍和放在夜晚的酒吧霓虹灯下拍,看起来会像是两个完全不同的物体?
材质没变,形状没变,变的只是光。这背后藏着计算机图形学里一个折磨了研究者几十年的老问题:重新打光。
**问题到底难在哪**
传统的做法是走"逆向渲染"这条路。简单说就是先猜出物体的三维形状是什么样、表面材质是粗糙还是光滑、原来的光源在哪个方向,然后再用物理公式把新的光重新算一遍,画出新图。
这个思路本身没错,但操作起来极其别扭。
给定一张或几张照片,你没法唯一确定"这到底是什么材质在什么光线下拍出来的"。一个哑光的灰色球体在暗光下,和一个反光球体在稍强一点的光下,拍出来的照片可能高度相似。这就是所谓的病态问题(ill-posed problem)
*病态问题:指从有限的观测数据出发,存在多种截然不同的答案都能解释同一组观测结果,导致无法唯一确定正确答案的问题*
一旦材质或形状猜错了一点点,换上新光源之后,渲染出来的图就会出现各种诡异的瑕疵,高光的位置不对、阴影方向奇怪。而且这类方法往往需要针对每个场景单独跑一次耗时的优化,论文里提到有的方法要花十到二十个小时才能处理一个物体。
这几年出现了另一条路:干脆不猜材质和形状了,直接用生成模型,扔进去一张图和目标光照,让模型直接吐出打光后的结果。像 Neural Gaffer、IllumiNeRF、DiLightNet 这些工作走的都是这条路,效果确实比传统方法好不少。
但这些方法几乎都盯着单张图片做文章,或者哪怕接收多张图也是各算各的,完全没有利用多视角之间的关联信息。
这就有点浪费了。
想象你在给一个陶瓷茶壶换灯光,如果你手里只有茶壶正面的一张照片,你很难判断壶身某处的高光到底是釉面本身反光造成的,还是灯光角度造成的。但如果你同时拿着这个茶壶正面、侧面、背面三张照片,你立刻就能通过对比看出来:那块亮斑是随着视角移动而移动的,说明是反光,不是釉面本身的颜色。多视角信息本质上是在帮你排除歧义,而单视角方法把这条捷径直接扔掉了。
已经有一个叫 LightSwitch 的工作尝试接入多视角图片,但它用的是比较粗糙的办法,把多张图片的信息直接堆到 UNet 的通道维度里拼在一起。这种做法信息利用率不高,论文作者认为这限制了模型捕捉空间和全局光照关系的能力。
这就是 RelightFormer 想要解决的问题:怎么把多视角信息真正用起来,而不是简单地把图片摞在一起。
**从视频生成模型里借来的骨架**
RelightFormer 的底子来自一个叫 Wan2.1 的视频生成基础模型。
*视频生成基础模型:一种在海量视频数据上预训练过的深度学习模型,具备生成连贯、逼真视频序列的能力,可以作为其他视觉任务的起点进行微调*
为什么要从视频模型改造,而不是从头训练一个专门做打光的模型?这里有个挺聪明的观察:多视角图片和视频帧本质上有点像。视频里的连续帧记录的是同一个场景在不同时刻、不同角度下的样子,多视角图片记录的是同一个物体在不同相机位置下的样子,两者都需要模型理解"这些画面属于同一个三维实体"这件事。视频模型已经在海量数据上学会了这种跨帧一致性,拿来做多视角关联,等于是站在巨人的肩膀上。
RelightFormer 的生成过程用的是一种叫"整流匹配"(Rectified Flow Matching)的技术
*整流匹配:一种训练生成模型的方法,核心思路是让噪声到真实数据之间走一条直线路径,模型只需要学会预测这条路径上每一点的移动方向(速度),这比传统扩散模型的曲折路径更简单高效*
具体过程是这样的:先用一个叫变分自编码器(VAE)的工具把图片压缩成一个更紧凑的"潜在空间"表示,减少计算量。然后往这个压缩后的表示里掺入随机噪声,模型的任务就是学会怎么把这团噪声一步步"拉直"回原本清晰的图像。这个拉直过程被建模成求解一个微分方程,模型学的是每一步该往哪个方向移动。
这有点像你在浓雾里找回家的路。GPS信号很弱,你只能凭着模糊的直觉一步步往家的方向挪。整流匹配做的事情就是让模型学会:在给定当前这团"雾"(噪声)的情况下,下一步该往哪个方向走才能最快走出雾、看清家门(还原出清晰图像)。如果没有这种直线化的设计,路径会绕很多弯,需要更多步骤才能收敛,生成速度会慢很多。
**怎么把目标光照塞进模型里**
光有骨架不够,核心问题是怎么让模型理解"目标光照长什么样"。
论文里的目标光照用一张环境贴图(environment map)表示
*环境贴图:一张全景图片,记录了物体周围360度各个方向上的光照强度和颜色分布,可以想象成把整个场景的天空、灯光都摊平画在一张长条形照片上*
作者设计了一个叫"潜在光照模块"(Latent Illumination Module)的组件,专门负责把这张环境贴图的信息注入到图像特征里。
这里有个很有意思的物理直觉支撑着这个设计。计算机图形学里有个经典公式叫渲染方程,描述的是一个物体表面某一点看起来是什么颜色,取决于从各个方向照过来的光,乘以这个方向的光跟表面材质发生反射的比例,再加权求和。作者发现,这个物理公式的数学结构,竟然和 Transformer 里的交叉注意力机制(cross-attention)长得很像。
*交叉注意力机制:一种让两组不同信息互相"对话"的计算方式,一组信息发出查询(想知道什么),另一组信息提供答案,系统会自动计算每个查询该给每个答案分配多少权重*
交叉注意力的计算方式是:每个位置发出一个查询,和一堆候选的"键"做匹配,算出权重,再按权重加权求和"值"。这个结构和渲染方程里"对各个入射方向的光按材质反射比例加权求和"几乎是一一对应的。
于是作者的做法很直接:图像的每个位置(比如物体表面某个点)发出查询,环境贴图上的每个方向发出键和值,让注意力机制自己学会该给哪些方向的光分配多大权重。这个权重理论上就在近似渲染方程里那个复杂的材质反射系数。
这就好比你请了一位不需要说明书就能上手的助理。传统方法需要你先手把手教它这个物体是什么材质、光是怎么反射的、公式该怎么套,一步都不能错。而交叉注意力这套设计相当于告诉它:这是光源信息,这是物体表面信息,你自己去学哪些光对哪些位置更重要。如果没有这层物理直觉支撑着这个设计,直接暴力堆参数让模型瞎猜关系,收敛速度和效果都会打折扣,因为模型要从零开始摸索一个本来就有物理规律可循的对应关系。
值得一提的是,这个光照信息在送入模型之前还做了一步"调色"处理。因为真实世界的光照强度差异极大,阳光直射和烛光的亮度可能差几个数量级,直接塞进模型容易导致数值爆炸,所以论文里对光照贴图做了对数压缩和一种类似高动态范围压缩的处理,把极端数值先"压平"一些,再喂给模型。
**为什么"谁先谁后"不该影响结果**
接下来是另一个容易被忽略但很关键的设计:排列不变性(permutation invariance)
*排列不变性:指模型的输出结果不会因为输入数据的排列顺序不同而改变,比如无论先看到照片A还是先看到照片B,最终打光结果应该是一样的*
这个问题的根源在于,RelightFormer 的骨架继承自视频模型,而视频天生是有时间顺序的,第一帧、第二帧、第三帧,顺序本身就是信息。视频模型里用来编码位置的技术(RoPE,旋转位置编码)默认假设输入是按顺序排列的序列。
但多视角图片完全不是这么回事。你给模型看的是同一个物体从五个不同角度拍的照片,这五张照片之间根本没有"谁在前谁在后"的关系,它们是一个无序集合。如果模型内部继承了那套按顺序编码的机制,理论上把这五张照片换个顺序输入,模型给出的打光结果可能会发生变化。这显然不合理,同一个物体不该因为你把第三张和第一张换了个位置,渲染出来的高光位置就变了。
作者的解决办法是换掉原来的位置编码方式,改用一种叫 PRope 的技术,让每个图像块的"位置信号"直接从相机的物理参数(比如相机在三维空间中的朝向和位置)计算出来,而不是依赖它在输入序列里排第几。
这就像你去五个不同的窗口分别看同一栋楼,窗口的编号完全不重要,重要的是每个窗口所在的真实地理位置和朝向角度。换个说法,如果你去五家银行网点办同一件事,重要的不是你按什么顺序去的这五家网点,而是每家网点的实际地址在哪。论文里的消融实验证实了这一点的重要性:去掉这种排列不变性设计之后,PSNR(一种衡量图像还原质量的指标,数值越高越好)从23.51掉到了17.53,足足掉了近6个点,SSIM(衡量结构相似度)也从0.892掉到0.797。这说明如果不做这个设计,模型确实会因为输入顺序不同而"迷路"。
**没有数据就没有一切**
前面说的这些架构设计固然重要,但作者很清楚一件事:再精巧的模型架构,没有足够大、足够多样的数据喂养,也发挥不出实力。
问题是,当时公开的多视角打光数据集要么规模太小,要么压根不开源。于是作者干脆自己动手建了一个,叫 Laval Objaverse Dataset(拉瓦尔·奥比亚维斯数据集,简称LOD)
*Objaverse:一个包含数十万个三维物体模型的开源数据库,涵盖各种日常物品、家具、生物模型等,常被用作训练三维视觉模型的素材库*
这个数据集从 Objaverse 里精选了90545个高质量三维物体,并用两套开源的光照数据库(Laval室内和室外HDR数据集)提供光照条件,再把每张光照贴图做水平旋转扩增16倍,最终凑出了39008种不同的光照组合。对每个物体,随机抽取16种光照(室内室外各8种),用 Blender 的 Cycles 渲染引擎渲染出16个视角用于训练、200个视角用于验证测试。
这个数据集的一个细节值得留意:相机视角在不同物体之间是变化的,不是固定死的几个角度。这么做是为了防止模型偷懒,只学会应付几种固定的拍摄角度,而是逼着它去理解真正的三维几何关系。
而且作者特意强调了这份数据集是完全开源的,这在同类工作里比较少见。论文里对比了几个同类数据集,像 LightSwitch 和 ROGR 用的数据虽然规模也不小,但都没有公开,TensoIR 和 StanfordORB 虽然公开但规模很小(分别只有4个和14个物体)。LOD 相当于填补了这个领域"又大又开源"这个空白。
**结果到底好在哪**
数据说话最直接。论文在自己构建的测试集上,对比了单视角打光、16视角打光、32视角打光三种设定下的表现。
| 方法 | 单视角 sPSNR | 16视角 sPSNR | 32视角 sPSNR |
|---|---|---|---|
| DiLightNet | 17.83 | 16.10 | 16.32 |
| Neural Gaffer(微调后) | 22.27 | 22.24 | 22.34 |
| LightSwitch | 18.63 | 18.53 | 18.48 |
| Reli3D | 18.52 | 18.65 | 18.76 |
| **RelightFormer** | **23.80** | **24.83** | **25.07** |
这张表里有个很值得琢磨的现象:大多数对比方法的表现,在视角数量从单视角增加到16视角、32视角时几乎没有提升,有的甚至还略微下降。这说明这些方法并没有真正把额外的视角信息利用起来,多给的照片对它们来说基本是白搭。而 RelightFormer 是随着视角增多、分数持续走高的,从单视角的23.80一路涨到32视角的25.07。这恰好印证了前面提到的那个直觉:多视角信息本该是用来消除歧义的,而只有真正设计了机制去利用它的模型,才能从中获益。
除了在自己数据集上的表现,作者还做了一系列"跳出舒适区"的测试,来验证这套方法是不是真的学到了通用的能力,而不是死记硬背了训练数据。
其中一项是在真实世界拍摄的 OLATverse 数据集上做零样本测试(zero-shot,意思是模型完全没见过这批数据就直接拿来用)。这个测试分两种情况:一种是常规的环境光重打光,另一种是"旋转点光源"重打光,也就是用一个方向性很强的点光源,从不同角度照射物体,专门用来考验模型对高光和阴影这类强方向性效果的处理能力。
结果显示,在环境光设定下 RelightFormer 拿到了20.48的sPSNR,是所有方法里最高的。在更难的点光源设定下,RelightFormer 的PSNR达到29.39,SSIM也是最高的0.826,但在sPSNR和LPIPS(一种衡量图像感知相似度的指标)上,微调过的 Neural Gaffer 略胜一筹。这说明在应付剧烈变化的高光和阴影这种极端情况时,即便是当前最强的方法,依然存在提升空间。这份坦诚的数据披露,倒是让人觉得这篇论文的实验做得比较扎实,没有回避自己不占优势的部分。
作者还专门按材质类型做了细分分析,把物体分成陶瓷、织物、金属、玻璃、毛发等十几个类别,发现 RelightFormer 在大多数材质上都表现最好,但在塑料和石材这两类材质上,反倒是 Neural Gaffer 的微调版本更胜一筹。作者对此的解释是:基于图片的打光问题本身对某些材质就是天然模糊的,不同方法学到的"猜测偏好"不一样,谁也做不到完美。
**新视角合成这个更难的场景**
前面讨论的都是"输入视角和目标视角一致"的情况,也就是说你给模型看物体的第1、第3、第5个角度,模型也就在这几个角度上给你重新打光。但现实中经常需要的是另一种能力:给模型看几张照片,让它凭空生成一个从未拍摄过的新角度,并且这个新角度还得是打好新光的。
这就是新视角重打光(novel view relighting),难度明显更高,因为模型不仅要理解光照,还得同时补全没见过的几何信息。
作者为此额外做了一轮"后训练"(post-training),用20000步的训练量,让模型在输入1到16张参考图的情况下,始终对16个目标视角进行监督学习,得到一个专门版本叫 RelightFormer-Post。
在真实世界的 Stanford-ORB 基准测试上,RelightFormer-Post 和当前最先进的基于三维重建的方法 Reli3D 做了对比。这里有个值得注意的地方:Reli3D 训练时是用了真实的三维物体形状作为监督信号的,这本该是个巨大优势,理论上应该比不依赖三维形状的方法更准。但结果是 RelightFormer-Post 在几乎所有指标上都和 Reli3D 打平甚至略胜一筹,而且推理时间差不多,都在2分钟左右。
论文里还列出了几种传统的逆向渲染优化方法作为参照,比如 Neural-PBIR、NVDIFFREC 等,这些方法确实能拿到更高的分数(比如 Neural-PBIR 的PSNR-H达到26.01),但代价是每个场景要跑一个小时甚至更长时间,PhySG 甚至要10到20个小时。这就形成了一个清晰的效率与精度的权衡:RelightFormer 用两分钟拿到接近专业优化方法一小时才能达到的效果,这个时间差距,换算下来大概是三十到六百倍的速度提升。作者也很坦诚地表态,认为自己的方法是对传统逆向渲染管线的补充,而不是替代。
**拆开来看每个部件到底有没有用**
一个架构设计得再精妙,也得靠消融实验证明每个部件确实各司其职,而不是碰运气堆出来的效果。作者做了三组对照实验。
第一组验证的是光照注入方式。把交叉注意力换成简单粗暴的"通道拼接"(直接把光照信息和图像信息在维度上堆在一起),结果sPSNR从23.51掉到23.27,PSNR从20.95掉到20.10。分数下降幅度看起来不算特别夸张,但考虑到这是在同一套架构里换掉一个模块得到的差距,已经足够说明交叉注意力这种"主动查询"式的设计,比"硬拼接"式的设计更擅长让光照信息和空间位置精准对应。
第二组验证的是训练时给模型看几张参考图这件事,该不该"灵活变化"。作者对比了三种策略:每次训练只给固定一张图,每次给1到8张随机数量的图,以及默认设置的1到16张随机数量的图。结果固定单视角的表现最差,sPSNR只有16.07,而1到16张随机采样的默认设置拿到了23.51,差距接近7.5个点。这个结果其实挺直观:如果训练时模型永远只见过"一张图"这种场景,它自然学不会怎么应对"多张图"的场景,就像一个只学过短跑的运动员,你突然让他跑马拉松,他不知道该怎么分配体力。
第三组前面已经提到过,就是排列不变性设计带来的近6个点的提升。
三组消融实验合在一起看,能感受到这篇论文的每个设计决策背后都是有的放矢的,不是简单地把现成模块拼凑起来。
**写在后面**
读完这篇论文,最让我意外的其实不是效果有多好,而是那个渲染方程和交叉注意力结构对应关系的发现。这不是那种"我们试了很多种设计,这种效果最好"式的经验主义堆砌,而是先从物理公式的数学结构出发,反推出该用什么样的神经网络模块。这种"用物理直觉指导架构设计"的思路,其实比单纯堆参数量要难得多,也更值得琢磨。
另一个让我印象深刻的细节是,论文里那张材质细分的表格,坦诚地承认了自己在塑料和石材上不如竞品。很多论文的实验部分习惯性地在每个维度上都力争第一,但这篇论文没有回避自己的短板,这种诚实的态度,某种程度上比那个漂亮的平均分数更让人信任这份工作。
一个开放的问题是:如果把这套思路继续往前推,从"给一个物体重新打光"扩展到"给一整个场景重新打光",会遇到什么新的麻烦?场景里的光照关系比单个物体复杂得多,比如一盏灯打在墙上会反射到桌子上再照到人脸上,这种间接光照的层层传递,现在这套基于交叉注意力的方案还接得住吗?
Q&A
Q1:RelightFormer是什么?
A:RelightFormer是一个基于视频生成基础模型改造的前馈式生成式Transformer,能够根据单张或多张物体照片以及目标环境光照贴图,直接生成重新打光后的图像,无需传统逆向渲染那种耗时的材质和几何估计过程。
Q2:RelightFormer和LightSwitch这类多视角方法相比优势在哪里?
A:LightSwitch把多视角图片信息简单拼接在通道维度上,信息利用效率不高。RelightFormer通过交叉注意力机制专门设计了光照注入模块,并采用排列不变的位置编码处理无序的多视角输入,使得打光效果随参考视角数量增加而持续提升,而不是像其他方法那样几乎没有变化。
Q3:Laval Objaverse Dataset有什么特别之处?
A:这是作者自建的大规模开源多视角打光数据集,包含90545个三维物体和39008种独特光照条件,是目前同类数据集中规模较大且完全公开可获取的一个,弥补了该领域缺少大规模开源训练数据的空白。
好文章,需要你的鼓励
本文介绍LT-OPD训练框架,通过让极限压缩的多模态大模型在自己生成的内容上接受满血版模型指导,并配合渐进式课程学习,在仅保留5%视觉token时把性能保留率从68.6%提升到82.3%,且不增加推理成本。
本文解读ALIGNOPSD方法,该方法针对AI智能体训练中"决策与时间戳错配"问题,通过先对齐功能相同的决策场景再打分,并按可变长度决策段分配信用,在ALFWorld、WebShop、Search-QA三大任务上相比GRPO提升5.5%至8.7%。
本文介绍自适应一致性图(ACG)方法,通过持久化执行记忆图与预算感知的上下文构建,帮助AI智能体在长任务中减少信息失联,在多项基准测试中相比ReAct等基线方法提升了任务成功率。
多智能体AI协作时重复计算KV缓存浪费严重。PReCache提出预计算低秩缓存和中性基础缓存重构两项设计,免训练实现最高3.1倍加速、2.3倍吞吐提升,且准确率仅比不共享方案低1.1个百分点。