这篇论文有意思的地方在于:它没有再为每一种三维表示造一个专用修复器,而是把「修 3D 场景」翻译成了「修一段视频」——让一个现成的视频生成模型当通用修图师。
问题:拍到的角度好看,没拍到的就露馅
先用手机绕着房间拍一圈照片,就能重建出一个可以自由运镜的三维场景。这类技术如今有好几种名字:3DGS(把场景捏成几百万个带颜色的高斯小点)、NeRF(用一个神经网络记住整个场景)、还有更传统的网格和点云。它们共享同一个软肋:照片拍到的地方是好的,镜头一走到没拍过的位置就糊、出鬼影、破洞;点云更惨,只剩黑底上一堆彩色麻点。
以前的补救是两条路:回到各自的优化循环里把场景重新调一遍,有效但慢,换一种表示就得重写一套;或拿图像生成模型逐帧修,快,可每一帧各自为政、互相对不齐,修完再拿去重建,三维反而更乱。死穴在于:修一张图容易,修「一套互相咬合的多视角图」难——你补的每个像素都得还站在原来那个三维物体上。
转折:坏渲染就是一段「运动还在、纹理坏了」的视频
FixAnything 的第一步是换个说法:沿相机路径渲染出的那一串坏帧,本质上就是一段视频——镜头在动、场景粗结构还在,坏的只是细节。而这恰恰是视频生成模型最熟悉的东西。于是修复被写成视频到视频的翻译:底座用开源的 Wan2.1 图生视频模型(140 亿参数),只加一枚 LoRA——冻结原模型、只训练一小块附加参数——就学会了「看坏渲染、出干净帧」。
第二步是锚住真实。自己拍的照片是准的,不能让模型顺手改掉:把首尾几帧干净画面原样保留并打上掩码,让生成「锚」在真实观测上,只修中间崩掉的部分。
第三步:修得好看不等于三维正确,生成模型完全可能补出一堵看着合理、其实不存在的墙。作者的解法是把几何变成裁判——把修复后的帧拿去跑运动恢复结构(SfM,从多张照片反推每个相机在哪儿),相机位姿恢复得准不准,就是这批修复的分;再用直接偏好优化(DPO,给模型看成对的好坏样本、让它学会偏向好样本)去强化这个分数。修过的帧若还能被三角化回同一组相机,说明修复没有偷偷换掉场景。「三维一致性」这个抽象要求,就这样变成了一个能算分、能优化的数。
同一个模型通吃四种表示,替代了过去一种表示配一条的专用修复流水线;配合开源的 MapAnything 重建工具,两张照片就能走完「重建→渲染→修复」,变出一段干净的漫游视频。代码和权重都已放出。
它可能先落进哪些工作流
对相册类产品,这是「两张照片变一段可运镜的回忆」的最短路径之一。房产、电商、文旅的采集通常稀疏,渲染修复能把漫游直接补齐;游戏影视用点云粗网格做的预览,也能先修成能看的样片再谈精修。对重建管线,它把「修复」变成重建后一个统一的后处理层;「位姿精度当奖励」的思路,对任何生成结果要回流几何的任务都适用。
局限与存疑
模型一次只吃 61 帧、832×480,长路径要分段;14B 的底座也只能在云侧跑。更本质的是,位姿奖励只约束「相机对得回」,不约束补出的细节在几何上真实——拿去做测量级重建仍要小心。掩码和 DPO 缓解了「修着修着改场景」,但没有根除:修出来的像素终究是模型觉得合理的画面,不是多拍了一张照片。
