微信扫一扫,关注公众号

  • 科技行者

  • 算力行者

见证连接与计算的「力量」

首页 Matrix-Game 3.5:如何让AI生成的虚拟世界记住自己走过的路

Matrix-Game 3.5:如何让AI生成的虚拟世界记住自己走过的路

2026-09-22 17:17
分享至:
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-
2026-09-22 17:17 • 科技行者

你有没有玩过这样一款游戏:你在地图上探索了半天,绕了一圈回到出发点,结果发现原来那栋房子不见了,路灯换了个位置,连墙上的涂鸦都变了样。

这听起来像是恐怖游戏的设定,但对于现在正在飞速发展的"AI世界模型"来说,这几乎是家常便饭。所谓世界模型,简单说就是让AI像导演一样,根据你的操作实时生成一个持续存在的虚拟世界,你往前走它就生成前方的画面,你转身它就生成转身后的画面。这东西被寄予厚望,游戏、机器人训练、虚拟现实,都指着它落地。

但这里有个几乎是宿命性的难题:AI是一步步"现编"这个世界的,你这一秒看到的画面,会成为下一秒生成的依据。这就好比传话游戏,信息传得越久,失真越严重。而如果玩家走远了再回头,AI的"记忆"早就跟不上了,只能凭感觉现编一个新场景糊弄过去。于是就出现了开头说的那种诡异现象:分明是同一个地方,回去看却完全不对劲了。

这篇来自Riemann Dynamics团队的论文,做的正是这件事:Matrix-Game 3.5,一个号称能在单张显卡上以每秒20帧的速度,生成长达一分钟且能保持场景一致性的交互式世界模型。

这活儿到底难在哪

在这篇论文之前,业内已经有几条不同的技术路线在死磕"长时间记忆"这个问题。

第一条路是把历史信息压缩进模型的隐藏状态里,比如一个叫RELIC的工作,让模型自己在内部悄悄记住过去发生了什么。这样做效率高,但问题是记忆变得不透明,你没法知道模型到底记住了什么,更没法去纠正它记错的地方。

第二条路更直接,把整段整段的历史画面存起来,等摄像机转回同一个角度时,直接把当时的画面翻出来用。Context as Memory、WorldMem还有Matrix-Game自己的3.0版本,都是这个思路。这样做的问题在于,一整帧画面是个不可拆分的整体,你只能整帧地调用它,而且必须是当初拍摄那个角度的原始画面。如果你现在的视角和当初略有偏差,这帧画面就用不太上了。

第三条路走向另一个极端,把场景重建成点云或者三维模型,像给整个世界拍了个立体CT。这样几何精度是有保障了,但灵活性又不够了,场景里新出现的东西、没被观察过的角落,这套体系很难自然地生成。

三条路各有各的坚持,但都没绕开一个根本性的三难困境:模型必须同时判断"该记住什么""这段记忆在新视角下该出现在哪里""这段记忆到底是该原封不动地保留,还是该随着世界演化而改变"。以前的方法基本都是把这三件事当成三个独立问题分开处理的。

Matrix-Game 3.5的做法,是把这三件事拧成一股绳,用一套统一的表示方法同时处理。

用"图像补丁"当记忆的最小单位

这篇论文最核心的一个想法,是把记忆的存储单位从"一整帧画面"缩小到"图像补丁"。

补丁记忆(patch memory):把历史画面拆解成一个个小方块(补丁),分别记录它们在三维空间中的位置,需要时只调取和当前视角相关的那几块,而不是整帧画面搬运。

这个设计思路其实很朴素。如果你只能整帧整帧地调用记忆,就好比你想找一张老照片里的某个路灯,结果相册软件只能把整本相册翻出来,而不能单独把那个路灯的局部截出来。补丁记忆做的事情,相当于给相册里每一个像素级的细节都做了空间索引,你想要哪一小块,直接精准取出来,再按照当前视角把它摆到正确位置上。

具体流程是这样的:每一帧历史画面都对应着一份深度信息(也就是每个像素离摄像机多远)和摄像机的位姿。给定一个历史补丁,先根据深度把它从二维图像"提升"回三维世界坐标,再根据当前摄像机的位置和朝向,把这个三维点重新投影回当前画面应该出现的位置。这一套"先升维再降维"的操作,本质上是用几何计算精确算出"这个历史内容现在应该出现在屏幕的哪个角落",而不是靠模型自己去猜。

如果多个历史补丁投影到了同一个目标位置怎么办,论文用了个叫z-buffer的经典图形学技巧,只保留离当前摄像机最近的那一个,把被遮挡的候选者扔掉。而那些从来没被观察过、或者被遮挡住的空白区域,干脆就不填充任何占位符,直接空着,留给扩散模型自己根据上下文和文字提示去现场创作。

扩散模型:一类生成式AI模型,工作原理是从一堆随机噪声开始,一步步去除噪声,最终"提炼"出一张清晰的图像或视频帧。

这里有个很值得琢磨的取舍。论文没有强制要求AI"必须完全按记忆画",而是把补丁记忆当成一种参考条件,而不是必须复刻的硬性目标。这个设计的意义在于,如果记忆是铁律,场景里那些本该随时间演化的东西,比如天气变化、植被生长、角色的动作,反而会被强行焊死在过去的样子上。允许记忆和生成之间留有余地,才能让"该记住的记住,该变化的变化"同时成立。

给摄像机装上"透视规则":Tiled PRoPE

光有记忆还不够,你还得让AI精确理解摄像机在三维空间里的位置关系,不然调出来的补丁根本对不上号。

这篇论文借鉴了一个叫PRoPE的技术,把摄像机的投影矩阵(可以理解成一套描述"三维世界如何变成二维画面"的数学规则)编码进注意力机制里。

RoPE(旋转位置编码):一种让Transformer模型理解"谁在前谁在后"这种顺序关系的编码方式,广泛用在语言模型和视频模型里标记时间和空间顺序。

原版PRoPE是给静态的多视角图片设计的,没有时间轴的概念,它把注意力头的维度硬生生切成几块,一半专门放摄像机信息,剩下的分给横纵坐标,彼此互不干扰。但视频生成不一样,视频天生带着时间顺序,如果直接照搬这套"划地为界"的做法,就得从模型原本用来编码时间顺序的通道里,硬生生挖出一块给摄像机用,这等于是在拆自己的地基。

于是研究者提出了Tiled PRoPE,做法是不再切分,而是把摄像机矩阵像瓷砖一样平铺,叠加乘在整个时空编码通道上,包括时间轴在内,不额外占用任何专属空间。这样一来,每个token(可以理解成模型处理的最小信息单元)身上同时携带着"它是第几帧"和"它是从哪个机位拍的"两种信息,而且这套叠加操作不需要引入任何新的可学习参数。

这就像是给每一页日历同时印上日期和拍摄地点的水印,而不是撕掉日历原本的日期,另外贴一张写着地点的便签。如果用"另外贴便签"的方式,便签和日历之间就得靠模型自己去猜哪张便签对应哪一页,徒增了一层不必要的对齐负担。而水印直接印在同一页纸上,读取信息时天然就是绑定的。

论文里还专门做了个验证实验,用两条虚构的摄像机轨迹(一条直线走,一条S形绕),观察加入Tiled PRoPE前后,模型内部的注意力关注模式发生了什么变化。结果显示,在直线轨迹下,加入摄像机信息后的注意力图和纯粹靠时间编码的注意力图几乎一模一样,最大差异只有1.3%。而在S形轨迹下,朝向相似的帧之间注意力明显变强,朝向相反的帧之间则变暗。这说明摄像机信息只是在原有的时间顺序基础上,按照视角相似度做了"加权",而不是把原来的时间结构给覆盖掉了。

静态的归静态,动态的归动态

如果你在这个虚拟世界里操控一个角色到处跑,你肯定希望这个角色一直是同一个人,他的装备、外貌不会莫名其妙地变来变去。但同时,场景里的建筑物、街道又得保持稳定,不能因为角色动了,连带着背景也跟着漂移。

这两件事听起来简单,做起来却很容易打架。如果把动态的角色也一股脑塞进静态记忆库里,模型很可能把角色在不同时间点的不同姿态,当成好几个独立的静态观察对象存下来,结果就是画面里凭空多出几个"影子人",这被称为鬼影(ghosting)。

论文的解法是彻底把静态场景和动态主体分开处理,用了一个动作感知的过滤器,先用YOLO这类目标检测和追踪算法把画面里的人、车、动物之类可能移动的对象识别出来,再判断它们在这段时间里到底是真的动了,还是站着没动。

判断的方法挺巧妙,用深度信息把这个物体的轮廓从一帧"投影"到另一帧,看投影出来的区域和实际检测到的区域重合度有多高。如果两帧里同一个物体的位置几何上能对得上,说明它是静止的,可以放心地存进静态记忆;如果对不上,说明它在动,就该被排除在静态记忆之外,单独用另一套机制来处理。

那动态的主体怎么处理呢,论文用了一种叫参考令牌(reference tokens)的轻量方案,提前从可用的历史画面里抽取四张这个角色不同角度的参考图,编码成一小段token,始终挂在生成序列的前面,当成这个角色"身份证"一样的存在。哪怕角色转身、跑远、被遮挡,模型都能回头看一眼这几张参考图,重新把它的样子找回来。

论文里还做了个对比实验,固定初始状态、摄像机路径、文字提示和随机种子完全一致,唯一的区别是有没有开启这套参考令牌。结果很直观,没有参考令牌的时候,士兵身上的战术背心、主角背后扛着的武器、汽车的银色装饰条,这些细节在长时间的镜头转动后逐渐走样甚至消失了;开启参考令牌之后,这些细节明显保持得更好。

这里其实藏着一个更深的道理。如果单纯依赖"最近几帧看到什么就照着画",角色的外观本质上是在被不断地重新猜测,猜的次数越多,偏差累积得越厉害,这就好比一个传话游戏,传的人越多,最后传出来的内容和原话差得越离谱。而参考令牌相当于给传话链条中间安插了一个随时可以核对的"原始录音",每一步都能回头对一下,误差自然就不会一路滚雪球。

三步就能画完一帧:如何把慢模型逼成快模型

前面这些设计解决的是"记得住、记得准"的问题,但还有一个同样棘手的麻烦:高质量的视频扩散模型跑得非常慢,通常需要几十步的迭代去噪才能生成一帧清晰画面。而交互式的世界模型要求你的操作能被实时响应,慢吞吞的生成速度根本没法用。

论文提出了一套两阶段的蒸馏方案,把一个又大又慢的双向扩散模型,压榨成一个只需要三步就能出画面的因果生成器。

蒸馏(distillation):一种让小模型或快模型去模仿大模型或慢模型行为的训练技术,目标是用更少的计算量达到接近的效果。

第一阶段叫感知流匹配(Perceptual Flow Matching),做法是先在"老师强制引导"的模式下,让学生模型学着按照因果顺序去噪,也就是只能看过去,不能偷看未来。这里有个细节挺讲究,监督信号不是直接在原始像素或者隐空间里比较,而是先把生成结果解码成图像,再丢进一个预训练好的感知特征提取器里,比较提取出来的特征距离。这样做的道理是,像素级别的比较容易被一些无关紧要的细微差异干扰,而感知特征关注的是人眼真正在意的结构和纹理层面的相似度,监督信号更贴近人类主观感受。

第二阶段叫自回滚分布匹配蒸馏(Self-Rollout DMD),这一步把"老师强制引导"这个拐棍撤掉,直接让学生模型在自己生成的历史基础上继续往下走,然后通过分布匹配的方式,让学生生成的画面分布逼近一个更强大的双向教师模型。

这一步的棘手之处在于,学生模型自己滚动生成的历史,和用来打分的教师模型看到的历史,两者的"记忆状态"是不一样的。如果直接把学生略带瑕疵的滚动历史喂给教师去打分,教师给出的评分标准就失去了参照意义。研究者的处理办法是,只共享那些稳定不变的外部条件,比如最初的记忆、锚点帧、文字提示和摄像机轨迹,让学生自己去更新它自己的记忆,而评分用的教师模型的记忆则保持固定不变。

这个思路让我联想到考试监考,如果监考老师用的是和学生完全一样的、可能有涂改痕迹的答题卡去对照标准答案,这场对照本身就失真了。正确的做法应该是,监考老师手里始终握着一份干净的标准卷子,学生自己写自己的,但最终的评判标准不能被学生的涂改影响。

论文还引入了一套课程式训练的策略,先从最简单的条件组合开始蒸馏,比如先只处理引导强度和摄像机控制,不涉及记忆调用,然后再逐步把补丁记忆和上下文帧的条件加进来。这种循序渐进的做法背后的逻辑是,如果一上来就把所有复杂条件一股脑塞给还在学习阶段的学生模型,它很可能哪个都学不好。

数据从哪里来:给AI补上几何、语义、身份三门课

一个模型再聪明,没有对应的训练数据也是巧妙妇难为无米之炊。这篇论文专门搭建了一套数据基础设施,给原始视频打上三类此前互联网视频里普遍缺失的标注。

第一类是几何标注,给每一帧视频算出摄像机的位姿、内参和真实尺度的深度信息。这里用到了VGGT-Omega这个几何重建工具,先把长视频切成一段段有重叠的小片段分别处理,避免内存爆掉和误差累积,再用Depth Anything 3的度量分支给每段设定一个真实的尺度基准,然后通过一种叫Sim(3)对齐的数学方法把相邻片段拼接起来,让整段轨迹保持连贯统一的尺度。

第二类是语义标注,用Gemma这个多模态大模型,针对每个时间窗口生成一段完整的文字描述,既讲清楚静态场景是什么样子,也把画面里所有动态物体的身份、动作、轨迹变化都写进去。论文里特意强调,那些"没有动作"这类没营养的描述会被过滤掉,主观且和场景动态无关的描述也会被剔除。

第三类是身份标注,专门为动态主体准备的,用YOLO的检测追踪算法自动识别出画面里可以被操控的主要角色,再从多个不同的时间点抽取这个角色的多角度参考图,训练时还会用DINO这个特征提取工具,专门挑选那些外观差异较大的参考图,让模型见识更丰富的视角和姿态变化。

有了这些标注之后,论文还做了一轮质量筛选,从重建质量、摄像机运动方式、画面视觉质量、场景合适程度四个维度分别打分,任何一个维度不达标的片段都会被整体淘汰,而不是靠一个综合加权分数来决定去留。这种"一票否决制"的筛选方式,某种程度上是在防止某个维度特别拔尖的片段,掩盖掉它在另一个维度上其实很糟糕的事实。

实验说了什么

论文在一个叫SANA-WM的一分钟长视频基准测试上,对比了好几个同类模型的表现,包括Infinite-World、LingBot-World、HY-WorldPlay、Matrix-Game 3.0和SANA-WM自身。

方法参数分辨率简单轨迹旋转误差简单轨迹平移误差困难轨迹旋转误差困难轨迹平移误差

Infinite-World1.3B480p16.551.9841.312.49

LingBot-World14B+14B480p10.472.0118.991.65

HY-WorldPlay8B480p17.892.3635.462.34

Matrix-Game 3.05B720p12.961.8318.791.67

SANA-WM2.6B720p7.591.5910.021.66

SANA-WM+refiner2.6B+17B720p4.501.398.341.39

Matrix-Game 3.55B720p1.631.102.701.25

从这张表里能看出,Matrix-Game 3.5在简单轨迹和困难轨迹下的旋转误差都是最小的,尤其是困难轨迹下,旋转误差只有2.70度,而排在第二的SANA-WM+refiner是8.34度,差了三倍多。这意味着在摄像机做出复杂运动的情况下,Matrix-Game 3.5依然能稳稳地按照预定路径走,而不会跑偏。

在"故地重游"一致性测试里(也就是回到同一个摄像机位置,看生成的画面和之前观察到的是否吻合),Matrix-Game 3.5的结构相似度指标(SSIM)在两个测试集上都是最高的,分别达到0.439和0.414。论文特别解释了一点,这个测试用的PSNR和LPIPS这类逐像素比较的指标,其实并不完全公平,因为一个动态的世界里,哪怕摄像机位置一模一样,角色可能已经走远了,植被在生长,天气在变化,这些合理的变化会被这类指标误判成"记忆出错"。而SSIM更侧重结构层面的相似度,配合摄像机精度的领先优势,更能说明补丁记忆确实在起作用。

在长达一分钟的生成过程中,画质衰减的幅度也控制得不错,从第一个十秒窗口到最后一个十秒窗口,画质分数只下降了3.24和2.40,相比之下HY-WorldPlay在困难轨迹下的画质衰减高达25.88,几乎是断崖式下跌。

最后再说说速度,经过INT8量化、优化过的记忆检索和一个裁剪掉75%参数的轻量VAE解码器(论文里称之为MG-LightVAE)之后,整个系统在单张H100显卡上能达到每秒20帧的稳定输出速度,分辨率是1280×704。

写在后面

读到补丁记忆这部分的时候,有个细节让我反复琢磨了一阵:论文特意强调,那些没被观测到的空白区域,是直接从token序列里删掉,而不是保留一个空白占位符。这个看似很小的工程选择,实际上是在回答一个更根本的问题,记忆系统到底该不该为"我不知道"这件事付出计算代价。答案是不该,你只需要为"我确实记得"的部分买单,这跟人脑处理记忆的方式其实挺像的,你不会为想不起来的事情耗费额外的脑力,遗忘本身是免费的。

另一个让我意外的地方是,论文里承认了这套系统目前的局限,动态主体离开镜头之后,它的状态其实是断掉的,没有一个持续演化的机制让它在你看不见的时候继续"活着"。这个坦诚挺难得的,因为很多论文倾向于把局限性藏在附录的角落里一笔带过,而这里把它放进了结论部分正儿八经地讨论。

这也引出一个我没想明白的问题:一个真正持久的虚拟世界,是不是应该允许角色在你看不见的地方继续做自己的事?如果一个游戏角色只有在你盯着他的时候才存在,那这个世界到底算不算"活"的?

Q&A

Q1:Matrix-Game 3.5是什么?

A:Matrix-Game 3.5是Riemann Dynamics团队开发的实时交互式世界模型,能够根据用户操作持续生成虚拟场景画面,核心创新是通过补丁级记忆和摄像机几何编码,让生成的世界在长时间交互后依然保持场景一致性和物体身份稳定,单张H100显卡上可达每秒20帧的720p实时生成速度。

Q2:Matrix-Game 3.5如何解决场景记忆丢失的问题?

A:论文提出补丁记忆机制,把历史画面拆分成小块图像补丁分别存储三维位置信息,生成新画面时只精准调取当前视角能看到的相关补丁,并通过z-buffer机制处理遮挡冲突,同时配合Tiled PRoPE技术把摄像机位姿信息编码进注意力机制,让记忆调用和视角变化保持几何一致。

Q3:这个模型怎么保证角色外观不走样?

A:论文设计了静态动态分离的记忆系统,用动作感知过滤器把画面中真正移动的物体和静止物体区分开,移动主体不进入静态场景记忆,而是通过多张参考图编码成参考令牌持续挂在生成序列前端,充当角色的"身份证",即便角色转身或被遮挡后重新出现,模型也能依据参考令牌恢复其外观细节。

分享至
0赞

好文章,需要你的鼓励

推荐文章
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-