跳转至

HorizonRelight: Relighting Long-horizon Videos Consistently via Diffusion Transformers

会议: ECCV 2026
论文: ECCV 2026 官方页 · 项目页
领域: 图像生成
关键词: 视频重光照, 长时程视频, 扩散 Transformer, 分块一致性, 目标域自条件

一句话总结

本文把长时程视频重光照从「每块独立的短片段生成」重构成「重光照目标域潜状态的逐块接力」:训练时用任意时间掩码让模型学会从残缺的目标域上下文里把剩下的帧续写出来,推理时把上一块预测的尾部潜帧当作下一块的锚点,再用外部可控生成模型产出的重光照首帧做热启动,从而把分块推理的块边界接缝与跨块外观漂移大幅压下去。

研究背景与动机

重光照要在改掉场景光照的同时保住内容与材质外观,是内容创作、AR/VR 和视觉特效的基础能力。近期主流做法把逆向分解前向重渲染拼起来,借用视频扩散先验从单段输入视频做可控重光照:DiffusionRenderer 把逆向分解与前向重渲染都放进同一套扩散管线,UniRelight 则用一个模型端到端完成,二者在几秒量级的短片段上已经能给出相当强的结果。但影视里的一个镜头通常只有几秒到几十秒(跨年代统计的平均镜头长度大约 5–25 秒),时长本身就已经超出当前扩散主干能在高分辨率下可靠处理的固定片段长度——现代视频扩散主干依赖时空自注意力,显存随序列长度和分辨率快速增长,因此训练只能限定在能塞进显存的固定长度片段上,长视频推理只能退化成沿时间滑动的窗口过程。这是算力约束而非建模偏好,Cosmos 系公开的重光照模型就明确围绕 57 帧片段来设计。

问题在于,在这种固定窗口的分块机制下,每块基本被当成一次独立的短片段生成来处理,最多加一点简单的重叠或融合。每个窗口都要重新推断内禀量和外观线索,于是「短片段训练 + 长滑窗部署」之间的训练—测试错配就暴露出来:窗口一滑动,同一目标光照下的重光照结果就出现肉眼可见的差异,块边界附近出现时间不连续,长视频重光照因此不可靠。

本文的切入角度是换掉这个问题的表述方式:长时程重光照不该被看成 K 次彼此无关的短片段生成,而该被看成带时间条件的潜域翻译——一条在重光照目标域(而不是源视频域)里逐块延续下去的状态链。既然不连续的根源是目标域状态被反复重推,那就把这个状态接力下去。核心 idea:用掩码目标域自条件让「从残缺的目标域上下文续写」变成模型真正训练过的任务,推理时把上一块预测的尾部重光照潜帧作为下一块的锚点做链式生成,并用外部生成模型产出的重光照锚帧热启动首块。

方法详解

整体框架

输入是一段长视频 \(I_{1:T}\) 与逐帧对齐的目标光照条件 \(\ell_{1:T}\)(表示成等距柱状环境图,即 HDRI),输出是同样长度的重光照视频。方法沿用 DiffusionRenderer 的双阶段结构:逆渲染阶段先预测一组内禀量 \(\hat{X}_k\)(basecolor、normal、metallic、roughness、depth、specular 六个域);前向重渲染阶段再以这组内禀量与第 \(k\) 块的目标光照 \(\ell_k\) 为条件合成重光照 RGB。两个阶段都用基于 Diffusion Transformer 的隐空间视频扩散模型,在 VAE 潜空间里以 EDM 参数化做去噪。真正的改动在于:这两个阶段都被接上了同一套跨块传播机制——逆渲染阶段在内禀域传播,前向阶段在重光照 RGB 域传播,于是分块执行不再是 K 次独立生成,而是一条被条件化的潜域翻译链。

整条链是这样转起来的:训练阶段用掩码目标域自条件喂给模型各种「只给一部分目标域证据」的样本,让它学会把剩下的帧补全;推理阶段先由热启动提示从外部可控生成模型拿到一张重光照锚帧,作为首块的目标域外观初始化;随后跨块上下文传播把每块预测的尾部潜帧接力给下一块,直到覆盖整段长视频。

%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
    A["输入视频 + 目标环境图"] --> B["掩码目标域自条件<br/>随机掩码练续写"]
    B --> C["热启动提示<br/>外部模型给首块锚帧"]
    C --> D["跨块上下文传播<br/>尾部潜帧接力下一块"]
    D --> E["长时程重光照视频"]

关键设计

1. 掩码目标域自条件:把「从残缺的目标域上下文续写」变成模型训练过的任务

链式推理要求模型在只看到少量目标域证据(上一块尾部几帧)的情况下把当前块的其余帧续写出来,但如果训练时永远把完整的目标域潜帧当作输入,模型就从没见过这种残缺条件,推理阶段的行为等于落在训练分布之外。作者的做法是在训练时对目标域潜帧采样一个任意的时间掩码,把它广播到潜张量形状 \(M \in \{0,1\}^{F'\times h\times w\times C}\),与干净的目标域潜帧逐元素相乘得到 \(\bar{z}^Y_k = M \odot z^Y_k\)——掩码位置置零,只有被保留的帧作为「已观测锚点」进入条件。于是条件项从「源域潜帧」扩充为「源域潜帧 + 被掩码的目标域潜帧」,模型仍以重建完整目标域潜帧为目标:

\[\mathcal{L}_{\mathrm{VDM}} = \mathbb{E}_{z^{Y}_k,\epsilon}\Big[\,\big\|\epsilon - f_{\theta}(z_t \mid \langle z^{I}_k,\; \bar{z}^{Y}_k\rangle)\big\|^2\,\Big]\]

(⚠️ 原文公式在全文缓存中提取有损,此处按 EDM 条件去噪目标的标准形式还原;符号含义与原文一致。)这样做的收益是推理时的情形——只给尾部若干帧当锚点——直接变成训练分布里「掩码恰好落在最后几帧」的一个子情况,而不是一种新的推理模式。这也是作者在审稿回复中强调「推理掩码是训练过的子情况,不引入训练—测试错配」的依据:模型学的不是「重新推断目标域」,而是「在已有目标域证据下补全剩下的帧」。

2. 跨块上下文传播与链式推理:让相邻块共享同一份目标域状态

这是整套方法的主干。分块推理时如果每块独立生成,窗口每滑一次模型就要重新建立一次目标域状态(内禀量、外观、光照响应),块与块之间因此出现接缝和漂移。HorizonRelight 把上一块的预测结果变成下一块的输入:第 \(k\) 块推理时,取上一块预测潜帧沿时间轴的尾部 \(b\) 帧作为传播上下文 \(s_{k-1}=\mathrm{Tail}(\hat{z}^Y_{k-1})\),把它当作这一块的目标域锚点,模型在此部分上下文下预测其余帧;生成完成后按同样规则更新 \(s_k\) 供下一块使用。这套传播对两个阶段一视同仁:逆渲染阶段在内禀量潜域里传播(首块没有前序,直接用 DiffusionRenderer 冷启动),前向阶段在重光照 RGB 潜域里传播并接受热启动锚帧。相邻块之间还可以额外保留重叠帧来进一步平滑边界过渡。一致性收益的来源很明确——跨块差异被压缩到只与真实场景运动有关:论文在逆渲染阶段用 DiffusionRenderer 初始化首块,因此后续边界上的改善只能归因于链式传播本身,而不是换了更好的起点。

这里必须澄清一个容易误解的点:HorizonRelight 不是自回归视频生成。自回归方案把上一轮的生成结果当作后续内容,几何、运动、纹理都会随链拉长而漂移;而这里的每一块仍然被源视频与 G-buffer 重新控制,上一块的重光照输出只充当边界的颜色线索——它稳定的是外观,不是几何。正因如此,模型不需要 rollout 自生成的历史,也不必为此引入 scheduled sampling。

3. 热启动提示:用外部生成的重光照锚点初始化首块

链式传播有一个天然的缺口:第一块没有可传播的目标域状态。如果让 \(s_0=\emptyset\) 冷启动,模型只能依赖训练数据里学到的重光照先验,强光照线索(如高光细节)会明显变弱。热启动提示借用的正是 GPT 式模型的 prompt 直觉——用一段前缀定义任务并引导生成,而不改动模型参数:用一个外部可控生成模型(论文用的是 Nano Banana Pro,消融里也用了 ChatGPT 4o)以「输入视频首帧 + 目标 HDRI」为输入生成一张重光照图当锚帧,提示词要求只迁移光照、不改内容、保持分辨率与长宽比。这张锚帧在前向阶段定义首块应当延续的目标域外观,随后整条链按同一套续写流程推进;逆渲染阶段则仍从冷启动开始,只负责提供前向阶段所需的内禀量与 G-buffer。锚帧不局限于单张图,也可以是时序对齐的短片段,甚至是空集(冷启动),换用不同来源的锚帧属于同一套接口的不同取值。

工程上还有一个不得不处理的实际情形:外部编辑器返回的图往往与输入帧并不严格对齐——构图被轻微改动,或者被拉伸成另一个长宽比,此时该帧的 prompt RGB 与模型预测出的 G-buffer 内禀量互相矛盾,模型同时收到两套不兼容的线索,结果就是模糊或内容混淆。作者的处理很轻:对该帧禁用 warm-start 的 G-buffer 条件,保留外观先验、去掉冲突来源。这个改动使热启动在锚帧不完美时依然可用,也让基于图像的提示比基于视频的提示更实用——视频提示要求与目标序列在空间上强对齐,而图像提示的错配被限制在起始帧内,可以通过上述手段就地消掉。顺带地,同一个机制还给出了一个 prompt 化的编辑接口:只要锚帧与输入的结构条件对齐,被提示的外观就能沿时间传播,论文用它做了同一套框架下的长时程风格迁移与内容编辑。

一个完整示例

以论文 Fig. 5 的长镜头为例(帧号取自原文配图,⚠️ 具体窗口与重叠帧数请以原文/补充材料为准):输入是数百帧的实拍长镜头,每块 57 帧、时间维 8× 压缩后约 8 个潜帧。第一步,用首帧与目标 HDRI 让 Nano Banana Pro 生成一张重光照锚帧(论文原提示词要求只迁移光照、保留内容与长宽比),它定义首块的目标域外观;第二步,逆渲染阶段从冷启动开始估计首块的内禀量与 G-buffer;第三步,前向阶段在第一块上以「G-buffer + 目标 HDRI + 锚帧潜帧」为条件生成重光照结果;第四步,取出该块预测潜帧的尾部潜帧作为锚点,接力给第二块,此时第二块不再需要外部锚帧,外观由锚点维持,内容由源视频与 G-buffer 控制;第五步,重复接力直到覆盖全片(论文对比的边界包括 f56→f59、f56→f66、f169→f185、f170→f171 等)。若换一种锚帧来源(外部生成图、外部生成视频、或直接冷启动),流程不变,只是首块的目标域初始化方式不同;若不做传播(去掉锚点),每块就退回到 DiffusionRenderer/UniRelight 那样各推各的,边界处立刻出现跳变。

损失函数 / 训练策略

两个阶段都用标准条件去噪目标(即上文 Eq. 1/2 的形式),差异只在条件项:逆渲染阶段的输入 RGB 潜帧 \(z^I_k\) 之外,还要用一个域嵌入 \(e_d\) 指定当前要预测的是哪一类内禀量,条件是 \(\langle z^I_k, e_d, \bar{z}^{X_d}_k\rangle\);前向阶段的条件是六类内禀潜帧的集合、目标光照 \(\ell_k\),以及被掩码的重光照 RGB 潜帧 \(\bar{z}^{I^\ell}_k\)。训练规模上,两个模型都从 Cosmos-Predict1-7B-Video2World 预训练权重初始化,前向(重光照)模型在 16 张 H100 上训练约一个月,逆渲染模型在同样配置上训练约两周;训练用 BF16 混合精度与 AdamW,所有输入(视频、内禀量、光照线索)都编码成 token 并拼接类型嵌入。训练时对目标域潜帧随机采样时间掩码,让模型见过任意比例的残缺上下文;推理时只保留少量锚点帧(受控评测中只留首帧)并预测其余帧。

实验关键数据

主实验

定性部分在约 100 条 YouTube Creative Commons 长镜头(「vlog」「travel long take」「film long take」等关键词收集)上与 DiffusionRenderer、UniRelight 比较:由于分块边界的不连续是长时程分块推理最主要的失效模式,论文用帧间差分图来判断各方法捕捉的是真实场景运动还是块特有的外观变化,理想情况下差分只应在真实运动区域响应,静止区域应基本为黑。论文的差分图与输入视频的差分图最接近,基线则在静止区域也出现大范围响应(模糊、闪烁、跨块漂移)。

定量分三张表:受控合成集上的跨块一致性(正文 Table 1)、100 条实拍片段上的边界一致性、以及配对 Multi-Illumination 上的保真度(后两张在补充材料)。受控设置是把测试集 121 帧视频的最后 57 帧与它自身的翻转复制拼接成两个相邻块,因此重叠帧内容完全相同,跨边界的任何预测差异都只反映分块推理引入的不一致。

表 1:受控重复块设置下的 MSE(越低越好)。

方法 统计范围 Normal BaseColor Depth Roughness Metallic Specular Relighting
DiffusionRenderer 边界 0.1379 0.1613 0.1576 0.2614 0.2050 0.1205 0.1048
本文 边界 0.0971 0.1173 0.1181 0.1042 0.0542 0.0935 0.0729
DiffusionRenderer 序列 0.1425 0.1670 0.2208 0.2664 0.2409 0.1242 0.1063
本文 序列 0.1007 0.1325 0.1383 0.1199 0.1088 0.1137 0.0906

表 2:100 条 in-the-wild YouTube 片段上的重光照 RGB 边界指标(窗口列为各方法原生窗口长度;边界一致性统计,越低/越高越好见表头)。

方法 原生窗口 Continuous MSE↓ Continuous SSIM↑ Duplicate-reverse MSE↓ Duplicate-reverse SSIM↑
DiffusionRenderer 57 0.0327 0.670 0.0209 0.718
UniRelight 57 0.0131 0.783 0.00912 0.837
TC-Light 57 0.00127 0.937 0.00148 0.911
Light-A-Video 32 0.00623 0.853 0.00149 0.926
RelightVid 16 0.00763 0.760 0.00336 0.861
本文(无锚点) 57 0.0254 0.679 0.0160 0.734
本文 57 0.00080 0.934 0.00048 0.954

表 3:配对 Multi-Illumination 上的留出目标光照重建(保真度;这里的 warm-start 用 UniRelight 的首帧作外观线索,不是真值)。

方法 PSNR↑ SSIM↑ MAE↓
本文(冷启动) 12.80 0.594 0.197
本文(热启动) 14.39 0.679 0.163
DiffusionRenderer 12.39 0.611 0.197
UniRelight 14.72 0.708 0.157
TC-Light 7.58 0.255 0.378
Light-A-Video 9.42 0.469 0.282
RelightVid 14.42 0.666 0.145

消融实验

论文的消融以定性图和补充表的对比为主(正文 Table 1 只有 DiffusionRenderer 一个对照,实拍集上的完整方法对照在补充材料)。

配置 关键指标 说明
完整模型(热启动 + 锚点传播) YouTube 边界 MSE 0.00080 / SSIM 0.934 完整配置
去掉目标域锚点(Ours-no-anc.) MSE 0.0254 / SSIM 0.679 保留源视频与 G-buffer 条件,仅去掉目标域锚点 → 边界 MSE 涨约 31.8 倍
冷启动(Ours-cold) Multi-Illumination PSNR 12.80 / SSIM 0.594 / MAE 0.197 首块无外部锚点,只靠学到的重光照先验 → 比热启动低 1.59 dB
锚帧与预测 G-buffer 冲突时禁用该帧 G-buffer 定性(Fig. 6、Fig. 7) 解决 prompt RGB 与内禀量不一致导致的模糊与内容混淆
换用不同锚帧来源(图像 / 视频 / 冷启动 / ChatGPT 4o) 定性(Fig. 7) 框架不绑定单一初始化来源,图像提示比视频提示更鲁棒

关键发现

  • 目标域锚点贡献最大:在实拍集上仅去掉目标域锚点(其余条件不变),边界 MSE 就从 0.00080 涨到 0.0254、SSIM 从 0.934 掉到 0.679。补充材料给出的相对改善是:相比 UniRelight 边界 MSE 降 94.0%/94.7%(连续 / 重复-反转),相比 DiffusionRenderer 降 97.6%/97.7%,相比 TC-Light / Light-A-Video / RelightVid 分别降 37.0% / 87.2% / 89.5%(连续)与 67.6% / 67.8% / 85.7%(重复-反转)。
  • 在受控设置下逆渲染与前向两项都稳定改善:表 1 中六个内禀域与最终重光照输出的边界/序列 MSE 全面低于 DiffusionRenderer,其中 Metallic 的边界 MSE 从 0.2050 降到 0.0542、Roughness 从 0.2614 降到 0.1042,说明传播机制对「材质类内禀量在块间被重新推断」这一问题尤其有效。
  • 一致性有代价,且代价不大:Multi-Illumination 上热启动版本 PSNR 14.39,比 UniRelight(14.72)低 0.33 dB、SSIM 低 0.029,与 RelightVid(14.42 dB)差距只有 0.03 dB 而 SSIM 更高;也就是说,为换来实拍集上数量级的边界一致性,单帧保真度只损失了很小的幅度。反过来,TC-Light 的边界指标与本文接近(连续 SSIM 0.937 甚至略高于本文的 0.934),但它在 Multi-Illumination 上只有 7.58 dB,说明这类方法的高一致性更多来自保守的输出而不是更好的翻译。
  • 链越长收益越明显:补充材料的逐帧统计显示,在 57→285 帧的跨度上本文的边界 MSE 始终保持最低,且源结构相关性随帧数缓慢下降而非突跳,说明漂移是渐进的质量衰减而不是块边界处的断裂。
  • 锚帧质量决定上限,但不决定可行性:锚帧不完美(被拉伸、构图微调)时框架仍能用,前提是删掉冲突的那一帧 G-buffer 条件;冷启动可行但会削弱高光等强光照线索。

亮点与洞察

  • 把一致性问题从「生成质量」改写成「状态接力」:许多长视频工作把块边界不连续当成需要更强的生成能力去解决的问题,本文指出根源是目标域状态每块被重新推断,于是把「续写」显式做成训练任务。这个视角可以直接搬到长视频超分、长视频编辑、世界模型 rollout 等任何分块执行的生成任务上。
  • 掩码自条件的性价比极高:改动只是在训练时对目标域潜帧做一次随机时间掩码,却让推理时的「只给尾部若干帧」变成训练分布的子情况,从而消除了短片段训练与滑窗部署之间的错配。相比加大窗口、改注意力结构、上分布式上下文并行,这是最轻的一种做法。
  • 「不是自回归」这一点很关键:上一块的输出只当边界颜色线索、内容仍由源视频与 G-buffer 控制,因此不会像 Rolling Forcing / Diffusion Forcing 那类自回归方案一样把几何与运动误差沿链滚雪球式放大;论文用一张方法对照表把「内容来源 / 一致性线索 / 是否自回归」三者分开,是很干净的论证方式。
  • 热启动把外部模型当 prefix 用:不改模型参数、不微调,只借一段生成好的锚帧来定义目标域分布,顺带得到了 prompt 编辑接口(论文用它做了迪士尼动画、卡通、科幻三种风格的长时程编辑),说明这套续写机制不只服务于重光照。
  • 锚帧错配的处理值得借鉴:多来源条件冲突时,删掉冲突的那一路条件(该帧 G-buffer)比强行融合更稳,这个「冲突就丢弃而非折中」的工程直觉在带多路条件的生成系统里很实用。

局限与展望

  • 长链末端的细节退化:作者明确承认,超过约 5 块(约 300 帧)之后重光照本身依然稳定,但场景内容会逐渐丢掉高频细节,这一退化源于学到的外观先验与实际长时程外观空间之间的覆盖差。作者的定位是「实用长镜头重光照」而非「无限长的 800 帧生成」,并指出实际剪辑里链会在镜头切换处重置、必要时周期性地重新锚定。
  • 定量评测的覆盖不均:主表(受控重复块)只对比了 DiffusionRenderer 一个基线;实拍集与配对 Multi-Illumination 的对比都在补充材料里。重复-反转构造虽然把边界差异与真实运动解耦,但它是人工构造的两块设置,与动辄数十块的实测长视频之间仍有距离。
  • 关键超参没有系统报告:传播使用的尾部帧数 \(b\)、块间重叠帧数、窗口长度对一致性/质量的影响都没有给出消融(作者在审稿回复中表示会补充 \(b=1\)、掩码调度与窗口尺寸),这使得「传播强度」这一核心自由度缺少指导。
  • 训练与推理成本高:前向模型 16×H100 训练约一个月、逆渲染约两周,且推理时两阶段串行、模型规模 7B 量级,距离实时或端侧可用还有明显距离。
  • 对外部模型的依赖:热启动的锚帧来自 Nano Banana Pro / ChatGPT 4o 这类闭源服务,锚帧质量直接决定首块外观,也在可复现性与部署合规上引入了外部耦合;论文虽然证明换锚帧来源框架仍成立,但没有给出无需外部模型的等价替代。
  • 可改进方向:把 \(b\) 与重叠长度做成随内容自适应的(例如按运动幅度决定传播多少帧);在传播时对锚点做时间上的衰减或置信度加权,或许能缓解长链细节退化;也可以尝试让逆渲染与前向阶段共享一份传播状态以进一步减少两阶段间的误差累积。

相关工作与启发

  • vs DiffusionRenderer:两者都是「逆向分解 + 前向重渲染」的双阶段扩散管线,本文甚至直接沿用它的架构并在逆渲染首块用它冷启动。区别在于本文把两个阶段都接上了跨块传播(内禀域与重光照 RGB 域各一套),而 DiffusionRenderer 每块独立、模型围绕 57 帧片段部署;因此本文在受控设置下六个内禀域与重光照输出的边界/序列 MSE 全面更低,实拍集上边界 MSE 比它低约 97%。
  • vs UniRelight:UniRelight 用单个扩散模型联合建模重光照外观与反照率,避开显式 G-buffer 瓶颈、减少两阶段误差累积,短片段保真度强(Multi-Illumination PSNR 14.72 为对照中最高)。本文没有改主干,而是改跨块耦合方式,因此在实拍长视频的边界一致性上大幅领先(边界 MSE 0.00080 对 0.0131),代价是单帧保真度低 0.33 dB。两者的取舍很清晰:要单帧质量选 UniRelight,要长时程稳定选本文。
  • vs 长视频扩散生成(Rolling Forcing / Resampling Forcing / Diffusion Forcing / StreamingT2V / FreeNoise 等):这些方法同样在解决长时程一致性,但它们的内容来源是生成的历史或自采样的历史,属于自回归 rollout;本文每块都用源视频与 G-buffer 重新控制内容,上一块的重光照输出只是边界颜色线索,因此不属于自回归,也就不需要为 history rollout 训练或引入 scheduled sampling。
  • vs 图像/短视频重光照方法(TC-Light、Light-A-Video、RelightVid、IC-Light、DiLightNet 等):它们分别面向孤立物体、人像或短视频,逐帧或短窗应用时边界一致性远不如本文(连续 MSE 分别高出 37%–89%);但 TC-Light 在配对重建上的低保真度(7.58 dB)也提醒我们:边界一致性指标本身偏保守的方法会天然占便宜,比较时要把保真度与一致性一起看。

评分

  • 新颖性: ⭐⭐⭐⭐ 组件层面是已有机制的组合(掩码自条件、锚点传播、prompt 前缀都各有出处),但把长时程重光照重新表述成「带时间条件的潜域翻译」并据此设计训练—推理解耦的做法,把问题视角换了。
  • 实验充分度: ⭐⭐⭐ 受控合成集 + 100 条实拍 + 配对重建三种评测互补,定性图很有说服力;但主表基线单一、\(b\)/重叠/窗口等关键超参缺消融、定量对比大多落在补充材料。
  • 写作质量: ⭐⭐⭐⭐ 动机链条(算力约束 → 分块部署 → 训练—测试错配)讲得很清楚,与自回归工作的区分表清晰;正文公式在缓存中提取有损,需对照原文核对。
  • 价值: ⭐⭐⭐⭐ 「尾部潜帧接力 + 掩码自条件」这套机制不依赖具体主干,可直接迁移到其他长时程分块生成任务,实用价值高于单项指标上的领先幅度。