递归代码世界模型:以递归场景程序构建复杂世界 Recursive Code World Models: Building Complex Worlds through Recursive Scene Programs
让编码智能体递归执行“建立整体—解析局部—回访整体”,从单图重建可执行的复杂3D场景程序
前置知识
代码世界模型(Code World Model)
把世界表示为可执行程序而非像素或隐式向量:几何、材质、光照和空间关系都是显式代码元素,程序执行生成 3D 场景,渲染得到图像。代码可直接检查、编辑、复用组件,并能接入物理仿真。本文引用的 Code World Model(Chen et al., 2026)将代码维护的世界状态与视觉观察分离。
RCWM 的输出就是可执行的 Three.js 场景代码,整篇论文讨论的“世界”是程序而非网格或点云,理解这一表示是理解递归构造对象的前提。
图像到场景程序重建(image-to-scene-program)
从单张图像反推能生成该图像的场景描述:给定参考图 $I^\star$,寻找程序 $P$ 使其在参考相机 $\kappa$ 下渲染 $R(\mathrm{Exec}(P);\kappa)$ 与 $I^\star$ 在布局、外观、遮挡上一致。与开放生成不同,它要求复现图像中可见的具体形状与排布。
这是本文的任务设定,Table 1 的所有指标(PSNR/SSIM/LPIPS 等)衡量的都是渲染与参考图之间这种像素级一致性。
视觉-语言编码代理(vision-language coding agent)
能看图像、写代码、执行程序、观察渲染结果并继续修改代码的智能体循环。典型工作流是:读参考图→生成场景代码→执行渲染→把渲染与参考并排比较→定位差异→改代码,如此迭代。本文所有递归节点由冻结的 gpt-6-astra 经 Codex 命令行代理驱动。
RCWM 的求解器 $\mathcal{F}$ 完全由该代理的视觉判断驱动:编辑代码、决定递归下降、决定返回全部靠“看”,论文明确写道“eyes decide, metrics are only recorded”。
递归与调用树
函数调用自身的编程结构:每次调用处理规模更小的子问题,维护自己的局部状态,完成后返回调用者继续执行。所有调用构成一棵树,根是初始调用,节点深度表示递归层级。它与固定的“场景—物体”两阶段流水线的本质区别在于:每一层都完整重复同一过程,而非只做一次分解。
本文核心主张是“复杂世界构建应当是递归的”,式 (1) 与算法 1 的全部设计建立在调用—返回语义上,Figure 11 的调用树是理解其实际执行形态的关键。
图像重建评价指标(PSNR/SSIM/LPIPS/edge F1)
PSNR 是像素级峰值信噪比,越高越好;SSIM 衡量亮度、对比度、结构三方面的结构相似性;LPIPS 用 AlexNet 深度特征度量感知差异,越低越好;edge F1 在 Canny 边缘图上以 3 像素容差计算 F1,衡量结构轮廓对齐;CLIP ViT-B/32 嵌入余弦相似度衡量语义一致性。
Table 1、Table 2 的全部结论由这些指标支撑,理解其含义才能判断“PSNR 18.2 对 15.5 dB”这类提升幅度意味着什么。
研究动机
代码世界模型把世界表示为可执行程序,但表示本身并不决定“如何把一个复杂世界构建出来”。现有图像到场景程序的重建方法(VIGA、Thinking in Blender/SEIG、img2threejs)依赖单条重建轨迹,一旦世界的结构规模超出单条轨迹可解析的范围就暴露两难。论文用“从一张图像重建小镇”说明:街道和地形定义布局,建筑包含立面,立面又包含窗户、招牌和装饰。如果全场景一遍过,重复的整场景审查容易漏掉这些小结构;如果给小结构专门的重点重建,细节虽然更容易检查精修,但局部编辑并不独立——精修后的招牌可能错误遮挡邻窗,精修后的桥可能与河岸脱开;这类冲突即使初始布局协调也会出现,且往往只在把精修过的部件放回一起检查时才暴露,同样的张力在每一尺度上重复。实验数据印证了问题严重性:在 medieval-village 参考图上,VIGA 的 PSNR 仅 10.5 dB、LPIPS 0.601,SEIG 为 10.9 dB、LPIPS 0.541,最强的 img2threejs 也只有 15.4 dB,复杂场景的可执行重建远未解决。
本文的目标是本文的具体目标是:给定单张参考图像 $I^\star$,重建一个可执行、可参数化的场景程序 $P$(Recursive Scene Program),使其在参考视角相机配置 $\kappa$ 下满足 $S = \mathrm{Exec}(P)$、$\hat{I} = R(S; \kappa)$,且渲染出的布局、局部外观与空间关系和 $I^\star$ 中的可见证据一致。交付代码要求支持直接执行、参数编辑和从任意新视角渲染。更深一层,作者想回答一个计算组织问题:当世界包含的结构多于单条重建轨迹所能解析的规模时,编码模型应当如何组织其计算?作者给出的答案是一条通用构造原则——递归:把“建立整体→在未解析部件上递归调用同一求解器→回访整体精修组合”这一完整循环应用到每一个尺度,让细尺度结构拥有自己的感知-编辑循环,同时保持场景级几何与部件间关系。
与已有工作不同的是,本文的独特切入是把“部件”重新定义为“子世界”:一个部件不是生成后插入的资产,而是一个值得拥有完整重建过程的子世界——继承父级上下文、获得聚焦的视觉证据、完成后返回到包含它的整体。这与已有三条路线形成鲜明区别。VIGA 交错执行程序生成、执行与视觉验证,但过程不是递归的;Thinking in Blender(SEIG)用场景图初始化加固定因子阶段(几何、材质、构图、光照),本质是固定的重建序列;img2threejs 是面向单个过程化物体的参考驱动工作流。并发的 FuncRoom-Agent 虽然也引入递归,但使用领域特定的递归 DSL,并把构建轨迹蒸馏为室内场景专家;RCWM 则把递归表述为通用的世界构建原则——一个冻结的编码模型把同一完整视觉求解器应用于物体、交互组合体和连续地形,覆盖建筑细节、建筑、城镇和地形丰富的世界,不预设领域语义层级,递归完全保留在推理时进行。
核心方法
直觉上,复杂世界重建需要两类互补工作:对单个组件的精细打磨,以及反复检查组件如何拼合。RCWM 把两者组织成一个可在任何尺度完整重放的循环。技术上,输出表示是 Recursive Scene Program(RSP):把世界写成嵌套子世界的组合式场景代码,节点 $u_i^{(k)}$ 位于深度 $k$,父程序含局部构建过程、可编辑参数和子程序引用($P_i^{(k)}[j] = P_j^{(k+1)}$),共享资产通过代码引用访问,由参数化 Three.js 编译器执行。构造过程是递归求解器 $\mathcal{F}$:每次调用维护工作状态 $q_i^{(k)} = (P_i^{(k)}, I_i^{(k)}, \kappa_i^{(k)}, b_i^{(k)})$——候选代码、参考视图、匹配相机和剩余预算(含全部后代开销),并接收继承的组装函数 $C_i^{(k)}$,它能把候选组件放进父场景快照的周围环境渲染。求解器由冻结的视觉-语言编码代理驱动,每层执行相同三阶段:建立整体、递归解决未解析部件、组合精修并返回,形成全局—局部—全局的递归调用树。
核心创新有两点。其一,完整的感知-编辑循环被下放到每个细尺度结构:立面、建筑、地形区域不是被“补丁式”修改,而是各自经历一遍完整的建立整体—递归解决部件—回访整体流程(式 (1):建立整体 $\xrightarrow{\text{recurse}}$ 对下层部件调用 $\mathcal{F}$ $\xrightarrow{\text{return}}$ 回访整体)。这与“固定场景-物体流水线加最后清理”有本质区别:递归调用的是同一个求解器,每次子返回都触发父级对组装场景的重新检查与精修。其二,两套机制让递归在视觉上可行:(1) 参考对齐视图——子调用接收参考裁剪与相机裁剪 $\mathrm{CropCamera}_{W,s}(\kappa) = (R, t, H_{W,s}K, (sw, sh))$,两者用相同窗口坐标与放大倍率并继承父级姿态,为局部比较提供统一的形状、尺度、遮挡判断框架;(2) 父级回访——子返回后父级在自身深度渲染组装结果,联合检查接触边界、空间关系和共享错误(如精修招牌遮挡邻窗)。论文强调:递归决定哪些子问题获得完整求解,并行只改变兼容分支的调度。
方法步骤详情
算法 1 分五步。(1) 初始化:创建种子程序、确立世界坐标与单位约定,全帧目视校准参考相机;相机修订只能由根执行。(2) 建立整体:观察算子把候选代码放入继承环境执行渲染,代理将渲染与参考并排比较并迭代编辑,如建筑先确立立面排布再重建细节。(3) 递归构建部件:从未解析子集 $U_i^{(k)}$ 选子任务,为每个子选定窗口、放大率和预算(为父级回访预留),子继承组件代码 $P_j^{(k+1)} = \bar{P}_i^{(k)}[j]$ 与裁剪后的参考和相机,上下文由父快照经 $\mathrm{Compose}$ 递归组装,再调用同一求解器 $\mathcal{F}$。(4) 组合精修:把返回的子程序替换进父程序,渲染组装场景并联合修订几何、位置与共享结构,可重开受影响子任务;共享结构由拥有其依赖的祖先修复。(5) 终止:审查无可行动差异时返回,预算耗尽返回最新可执行状态。实现上每节点一次 Codex 会话,深度上限 5 层;指令还要求侧视图暴露“纸片墙”残留、按风格补全不可见结构并做四方位自检。
技术新颖性
新颖性有四点。第一,递归的完整性:以往方法要么把递归理解为场景分解(固定流水线拆物体再组装),要么是重复的程序编辑(VIGA),要么是固定的重建因子序列(SEIG 的几何/材质/构图/光照阶段);RCWM 的递归覆盖整个构建过程——同一求解器在每一层完整运行,返回后的父级精修是循环的必要环节而非收尾清理。第二,无需训练:与 FuncRoom-Agent 用递归 DSL 并蒸馏室内场景专家不同,RCWM 用冻结的通用编码模型在推理时递归,可迁移到物体、组合体与连续地形。第三,参考-相机配对代数:公式 (9)-(11) 形式化了“局部检查共享全局投影”,$\mathrm{CropCamera}_{W,s}(\kappa) = (R, t, H_{W,s}K, (sw, sh))$ 保证多尺度证据在同一坐标系比较。第四,与 Recursive Language Models 对照:RLM 的外部环境是静态上下文,RCWM 的外部环境是演化的可执行世界——子调用的返回会改变父级必须检查的场景本身。此外,预算 $b_i^{(k)}$ 计入全部后代开销,使递归深度有界且父级保留回访资源。
实验结果
实验用 5 个整场景加 5 个局部裁剪参考,各方法共用 gpt-6-astra。第一,保真度(Table 1):RCWM 在全部 10 个参考上 PSNR 与 LPIPS 最优,9/10 场景 SSIM 最高(例外 valley-village)。代表数字:city-full PSNR 18.2 dB 对最强基线 15.5,LPIPS 0.158 对 0.243;局部裁剪组优势更大,park-lake 达 PSNR 23.3 dB、SSIM 0.83、edge F1 0.99。第二,消融(Table 2):medieval-village 上自由深度递归扩到 3 层 33 节点,整帧 PSNR 从固定两层的 16.8 升至 19.0,局部 SSIM 从 0.52 升至 0.60,且优于全部非递归工作流;school-block 上自由深度只用两层、成绩相当,说明更深递归按需启用。第三,调用树(Figure 11)显示结构越复杂递归越深,从深度 2、9 节点到深度 4、169 会话。第四,Figure 10 从新视角渲染交付程序无需再优化,验证 3D 结构确实编码在程序中。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| 整场景重建 city-full(参考视角) | PSNR (dB) | 18.2 | img2threejs 15.5(最强基线);SEIG 14.5;VIGA 9.5 | +2.7 dB |
| 整场景重建 medieval-village | PSNR (dB) | 18.7 | img2threejs 15.4;SEIG 10.9;VIGA 10.5 | +3.3 dB |
| 整场景重建 japan-island | PSNR (dB) | 19.3 | img2threejs 16.6;SEIG 13.3;VIGA 12.9 | +2.7 dB |
| 整场景重建 island-harbor | LPIPS(越低越好) | 0.186 | img2threejs 0.272;SEIG 0.516;VIGA 0.526 | 感知误差降低约 32% |
| 局部裁剪重建 park-lake | PSNR (dB) | 23.3 | img2threejs 18.4;VIGA 15.1;SEIG 12.3 | +4.9 dB |
| 局部裁剪重建 school-block | Edge F1(Canny,3px 容差) | 0.97 | img2threejs 0.88;SEIG 0.80;VIGA 0.77 | +0.09 |
| 消融:medieval-village 自由深度递归 vs 固定两层 | 整帧 PSNR (dB) | 19.0(3 层、33 节点) | 固定两层递归 16.8 | +2.2 dB |
| 消融:medieval-village 自由深度递归 vs 固定两层 | 局部 SSIM(8 个 2× 细节窗均值) | 0.60 | 固定两层递归 0.52 | +0.08 |
局限与改进
作者承认的局限:单视图输入使隐藏几何与绝对尺度存在歧义;视觉检查可能遗漏错误;重复精修与组件交互需要大量计算且收敛无保证;评估覆盖有限——10 个参考、每方法单次运行、单一基础模型(gpt-6-astra),消融仅两个场景。我的补充观察:其一,全部定量指标只评估参考视角的 2D 投影一致性,3D 几何正确性只有 Figure 10 的定性旋转检查,无深度或多视图真值;其二,参考图全是风格化素材(CC0 等距 sprite pack、WorldClaw 程序化渲染),非真实照片,真实图像域表现未知,等距视角也降低了透视难度;其三,valley-village 是明显困难案例(PSNR 14.1 dB、SSIM 0.38、LPIPS 0.583),连续地形仍难处理;其四,计算成本可观——valley-village 需 169 个会话、85 次调用,论文称兼容子任务“可以”并发但未报告实际并发与墙钟时间;其五,重建决策完全依赖模型目视(指令明确 metrics are only recorded),无量化停止准则,跨模型版本稳定性存疑。
独立分析的弱点
第一,计算成本随结构复杂度快速增长:valley-village 用了 169 个会话、85 次调用,而 school-block 只需 18 个会话,限制了向更大世界扩展。改进方向:真正并行调度兼容子分支、共享依赖去重、按视觉差异幅度自适应分配预算。第二,收敛无保证:审查-编辑循环理论上可能振荡或在两个差异间来回。改进方向:维护显式修复清单与状态机,引入停滞检测强制返回。第三,单次运行评估无法量化随机性:同一场景多次运行的方差未知,19.0 对 16.8 的消融差距可能部分来自运行波动。改进方向:每场景多 seed 重复并报告均值与方差。第四,评价体系偏 2D 投影:隐藏几何与补全结构(四面墙、完整屋顶)的质量没有定量检验。改进方向:利用参考图本身来自程序化生成器的特点导出多视图或几何真值,补做 3D 指标。第五,地形是短板:valley-village(SSIM 0.38)显示窗口化裁剪对连续表面不如对离散对象自然。改进方向:为连续表面设计自适应分区等专用子求解器。第六,相机单点校准:初始姿态误差会被所有子裁剪继承且只有根能修订。改进方向:多假设相机并行验证或分层重校准。
未来方向
作者提出的方向:构建更大的基准、进行重复运行、以及对空间关系做人类评估,以更强地评估重建质量与可靠性。基于其成果可延伸的方向:其一,把 RSP 的可编辑性用于下游——代码世界天然支持物理仿真与交互,可在重建世界之上接入动力学模拟或智能体导航,形成观察—重建—仿真闭环;其二,学习式调度:当前递归深度、窗口选择与预算分配完全靠模型判断,可用构建轨迹训练轻量策略决定何时下降、何时返回;其三,跨域轨迹利用:与 FuncRoom-Agent 的蒸馏思路互补,把 RCWM 的通用构建轨迹用于训练或微调,而不限于室内场景;其四,多参考输入:引入视频或多视角图像消除隐藏几何歧义,递归框架无需改动即可接纳更密集证据;其五,与 3D 生成先验结合:用多视图扩散模型为不可见结构提供候选补全,再由父级回访的一致性检查筛选;其六,程序空间搜索:RSP 支持参数编辑,可对子程序生成候选变体并按渲染误差择优;其七,增量式世界构建:让世界随新观察持续更新,递归的返回与重开机制天然适合局部重算。
复现评估
复现条件相对友好但有门槛。开源情况:附录 A.1 逐字公开求解器指令(solve(node) 完整提示词,含相机契约、子问题判定准则、四方位自检),附录 A 给出执行设置——每节点一次 Codex 会话、runner 启动子调用并唤醒父级、深度上限 5 层;正文明确“全部十个场景的调用树随代码发布”,但 preprint 未给出明确代码仓库链接,发布状态需跟踪。数据:10 张参考图全部公开可得——CC0 的 Isometric City sprite pack(OpenGameArt)与 WorldClaw 论文渲染图,无需训练数据。算力:不需要训练 GPU,成本集中在 gpt-6-astra 的 API 推理(每场景几十到一百多个会话,high reasoning effort),单场景估计数十至数百美元。难度评估:中高。算法 1、裁剪公式、上下文组装规则与完整指令足够详细,指令级复现可行;但 runner 的工程细节(会话管理、预算记账、文件 schema 约束)需自行实现,且行为高度依赖具体模型端点——模型更新后视觉判断质量可能漂移,这是 agent 类论文的共同复现风险。
论文图表
全文概览图:在图像到 3D 代码世界重建任务中,RCWM 通过递归的全局—局部—全局构造逐步精修可执行 3D 场景程序——先建立整场景,再对局部子世界各自完整求解,子返回后再精修全局组合,使局部几何与外观逐层更准确且保持整场景一致性。
一张图讲清论文标题中“递归全局-局部-全局”的核心思想与任务设定,是快速理解全文的入口。
方法的完整伪代码:初始化根状态 $q_0^{(0)}$ 与恒等上下文后调用 $\mathcal{F}(q_0^{(0)}, C^{(0)}; A)$;函数 $\mathcal{F}$ 在预算内循环执行三阶段——(1) 建立整体:用代理比较上下文渲染与参考、精修布局与共享结构;(2) 准备并递归构建部件:选择未解析子集 $U_i^{(k)}$、准备子状态与上下文、对每个子调用同一求解器;(3) 组合精修返回:整合子程序、渲染组装整体、联合检查物体/关系/接触边界,审查无新的可行动差异时返回。
方法的形式化定义,是式 (1) 递归与式 (3) 求解器签名的落地实现;理解 establish–recurse–revisit 三阶段如何映射到具体行号必须对照此算法。