PanoWorld: A Generative Spatial World Model for Consistent Whole-House Panorama Synthesis

Paper: arXiv:2605.17916v1 Code: jjrCN/PanoWorld Code reference: main @ 19234d4 (2026-05-19)

1. Motivation (研究动机)

PanoWorld 关注的问题不是单张全景图生成,而是“从一个户型图和一个风格参考生成可浏览的整屋 VR panorama tour”。这个任务的难点在于,用户最终看到的是多个离散 panorama 节点:站在客厅看卧室门、再跳到卧室回看客厅时,同一扇门、同一面墙、同一组材质和家具应该保持空间和外观一致。传统 2D diffusion / image-editing 模型可以生成很漂亮的单个 360° panorama,但它们没有持久空间记忆;相机移动后,模型容易重新想象墙体开口、家具位置、材质纹理,导致近邻节点之间漂移。相反,NeRF、3DGS、mesh 等全局 3D 表示天然有一致性优势,但如果直接生成整屋级高精度 3D asset,会在多房间尺度上带来高显存、慢推理和纹理细节下降,尤其不适合商业 VR 看房中“节点式浏览、每个节点都需要高清 2D 观感”的交付形态。

论文的出发点非常实际:真实 VR tour 大多不是连续 6-DoF 游戏世界,而是由离散 panorama 节点构成。用户在一个节点环视,再跳到附近节点;因此最终交付物可以是高质量节点全景图,而不是必须在每个连续位置都完美渲染的全局 3D 场景。这个观察把问题从“生成一个巨大的整屋 3D 模型”改写成“生成一组节点 panorama,并用轻量可渲染 3D memory 约束这些节点互相一致”。也就是说,3D 表示在这里不是最终产品,而是用来让 2D 生成结果记住已经看过的空间。

这篇论文要解决的具体目标可以概括为:给定 2D floorplan 、style condition 和若干目标 panorama poses ,生成一组 furnished 360° panoramas ,同时维护一个 dynamic 3DGS cache 作为跨节点空间记忆。值得研究的原因在于,整屋级 panorama synthesis 需要同时满足三个通常互相冲突的指标:单节点 photorealism、跨节点几何一致性、跨房间材质/外观一致性。只优化第一项会得到漂亮但漂移的图;只优化后两项又容易牺牲 2D 视觉质量。PanoWorld 的价值正是在这个折中点上:利用 floorplan 提供稳定低频结构,用 3DGS cache 提供可渲染历史记忆,再让强 2D generator 负责最终纹理。

Figure 1 解读:这张 teaser 展示了论文的核心任务设定。输入是 floorplan 和 style reference,输出不是单张图片,而是沿着导航路径生成的一串 360° panorama 节点。图中最重要的是两条记忆路径:一条是由 floorplan 转出的 coarse 3D shell,负责提供墙体、门洞、房间边界等全局几何约束;另一条是 dynamic 3DGS cache,随着节点生成逐步扩展,负责把已经生成过的可见纹理、材质和局部结构渲染到新节点,防止同一空间在不同视角下被重新生成。

2. Idea (核心思想)

核心 insight 是:整屋 VR panorama tour 可以被建模为“节点式 autoregressive world model”,而不是一次性生成完整 3D 世界。PanoWorld 不强求 coarse 3D shell 具备最终视觉质量,也不强求 3DGS cache 完美表达所有细节;它让 shell 扮演 global geometric proxy,让 cache 扮演 renderable spatial memory,让 2D panorama generator 继续承担高频纹理和美学质量。

这样做的关键好处是把几何约束和外观记忆解耦:几何来自 floorplan-derived shell,外观来自 cache-rendered visual memory,最终图像由 2D generator 在二者约束下合成。相对于纯 2D 生成,PanoWorld 多了一个随路径增长的 3D memory,因此不会在每个节点从零想象;相对于 monolithic 3D generation,它只在局部上下文里更新 3DGS cache,不需要每一步重建全部历史;相对于普通 LRM,它特别处理了 panorama 和 multi-room topology。普通 self-attention 会让不同房间 token 全局互相看见,导致墙后纹理泄漏或相似房间互相污染。

PanoWorld 的 Room-aware Group Attention 只允许同房间 token 密集交互,跨房间信息只能通过 doorway / boundary node 受控流动。这篇论文的创新可以拆成四个彼此配合的部分:第一,node-based whole-house panorama synthesis 的 world-model formulation;第二,针对 360° multi-room 输入的 panoramic LRM,包含 circular panorama position encoding 和 room-aware attention;

第三,topology-aware progressive 3DGS caching,用固定大小局部上下文更新全局 cache;第四,decoupled geometry-appearance guidance,在 2D generator 中分别注入 shell proxy 和 cache memory,从而兼顾布局约束与 photorealistic detail。

3. Method (方法)

3.1 Overall framework:节点式 autoregressive 生成

论文的形式化设定是:输入 floorplan 、style condition 、目标节点集合 ;目标输出为对应的 furnished 360° panoramas ,同时维护 renderable 3DGS cache 。目标节点和辅助节点构成拓扑图 ,节点是相机位姿,边表示导航邻接关系。

论文明确强调:panorama 是 primary deliverable,3DGS cache 是 memory / guidance,不是完美连续 6-DoF asset。流程从 floorplan-derived shell 开始。系统把户型图转换成 coarse 3D shell ,包含 walls、floors、ceilings、room labels 和 doorway connectivity。

对每个节点 ,shell renderer 得到 observation ,再转成 compact geometric proxy ,主要包括 normal 和 semantic segmentation。这个 proxy 提供墙体布局、开口、房间尺度等低频约束,但不包含最终纹理。起点节点 和 style reference 合成初始 panorama ,再由 panoramic LRM lifting 成初始 3DGS cache。

之后每个新节点 都会先从现有 cache 渲染 visual memory ,再结合 和附近已生成 panorama 生成 ,最后把 lifting 成局部 3DGS update 并融合回 cache。直觉上,这个 loop 有点像一个“会画图的 SLAM memory”:它不是为了精确重建真实世界,而是为了让生成系统在路径上有可查询的空间状态。floorplan 负责告诉模型“哪里应该是墙、门、地面和天花板”,cache 负责告诉模型“之前这里长什么样”,2D generator 负责把二者转成可交付的高清 panorama。

3.2 Topology-guided node and path sampling

PanoWorld 不是随意选择生成顺序。论文使用 floorplan topology 组织路径:优先选择 graph centrality 高或到目标节点平均 path cost 低的起点,再通过 room adjacency 和 doorway constraints 连接目标位姿。如果相邻 target pose 距离过远,会插入 auxiliary nodes,让相邻视点有足够视觉重叠;实现中 typical spacing 为 0.5—1.5m。辅助节点不一定展示给最终用户,但可以让 autoregressive cache 平滑增长,减少大跨度跳转导致的空洞或外观断裂。

这部分不是论文主贡献,但它解释了为什么后续 cache update 可以只看局部上下文:路径上的节点已经被组织成房间内密集、门洞处受控连接的拓扑结构。若没有这种 topology scaffold,LRM 需要在长序列历史中判断哪些 view 相关,attention 和 memory fusion 都会更不稳定。

3.3 Room-aware panoramic LRM

Figure 2 解读:这张图对应 room-aware panoramic LRM。输入不是普通 perspective views,而是多节点 360° panoramas、相机位姿、几何 proxy 和 room labels。模型把 panorama 编码为 equirectangular tokens,再通过带有 panorama-aware position encoding 的 transformer 融合多视角信息;Room-aware Group Attention 控制 token 交互范围,同房间可以密集 attention,不相关跨房间 token 被 mask,门洞/边界节点则作为受限通信通道。输出是局部 Gaussian primitives,用于更新全局 3DGS cache。

panoramic LRM 的目标是在 single feed-forward pass 中从 metric-scale whole-house panorama context 预测 Gaussian primitives: 其中 是 3D mean, 是 rotation, 是 anisotropic scale, 是 opacity, 是 color feature。和 object-level LRM 不同,这里的输入跨越多个房间;不同房间可能被墙隔开,即使视觉上相似也不应该自由融合。

Circular panoramic position encoding (CPRoPE)

普通 perspective LRM 常用 Plücker rays 和 PRoPE 表示 camera geometry,但 panorama 没有单一 pinhole intrinsic。PanoWorld 因此使用 extrinsics-only Plücker ray。对于 panorama token ,先获得球面单位方向 ,用相机旋转 转成世界方向: 其中 是 camera center。

由于 equirectangular panorama 的左右边界在球面上相邻,水平 RoPE 不能把 当成普通图像的两端。PanoWorld 把水平 token index 映射为角度: 若水平分支有 个 sine-cosine frequency pairs,则第 对使用 integer-harmonic phase: 这样 的系数相同,因为相位差是 。这个 CPRoPE 保留 camera geometry encoding,同时保证 panorama seam 两侧 attention 连续。

Room-aware Group Attention (RAGA)

标准 self-attention 对 multi-room panoramas 不友好:如果所有 view token 全局互相 attend,一个房间的纹理可能穿墙泄漏到另一个房间,导致 ghost geometry 或 duplicated materials。PanoWorld 定义 attention mask 其中同房间或 doorway-connected pairs 的 ,无关跨房间 pairs 的 。这个设计让模型在同一个 room 内充分聚合冗余观测,同时只通过真实开口传播跨房间信息。

LRM training objective

LRM 的训练目标是让预测的 Gaussians 被重新渲染到 held-out panorama views 后匹配 target images。损失包括 image L2、VGG19 perceptual loss、opacity regularizer,以及对 Gaussian positions 的 depth loss。深度项不是监督 rendered depth map,而是把输入像素诱导出的 predicted Gaussian position 的 camera-space depth 与 target depth 比较。论文给出: 以及 scale-invariant log term: 最终 ,总损失为: 权重是 。这个 objective 的重点不是让 3DGS 成为最终视觉资产,而是让 cache 在后续节点渲染中具备足够几何可用性和外观参考价值。

3.4 Topology-aware progressive 3DGS caching

Figure 3 解读:这张图说明 PanoWorld 不会每生成一个新节点就把全部历史 panorama 重新送入 LRM。它只选择当前节点、同房间近邻节点和 doorway boundary nodes 组成局部上下文,让 LRM 预测 local 3DGS increment,再融合到全局 cache。这样每一步的重建成本近似由局部上下文大小决定,而不是随整条路径历史线性或二次增长。

对新节点 ,PanoWorld 构造固定大小 context: 其中 是同房间附近已生成节点, 是通过门洞连接的边界节点。LRM 只预测 ,再与 融合: 融合策略很保守:只有同房间、Gaussian center 距离满足 ,且 supporting viewing directions cosine similarity 大于 时,两个 Gaussian 才被视为 compatible。几何属性用 opacity-weighted average,appearance 不做激进的 SH 全频段平均;base color 的 zero-order SH 可以平滑混合,高阶 SH 从当前 supporting view 下 opacity 更高的 dominant Gaussian 继承。这一点很重要,因为高阶 SH 直接平均会损坏 view-dependent 高频细节,让 cache render 变糊。

3.5 Cross-room memory filtering

Figure 4 解读:这张图展示了为什么跨房间 cache render 需要过滤。旧房间墙面的正面纹理在新房间视角下可能变成“墙后错误纹理”,如果直接作为 visual memory 输入给 2D generator,就会把旧房间材质贴到新房间里。论文用 shell depth 作为第一个可见房间表面的几何门槛,移除位于 shell 后方的 cache pixels。

具体地,设 是 cache-rendered depth, 是 shell-rendered depth。如果: 则该 memory pixel 位于第一层 shell surface 后方,被标记为 invalid,并在 visual memory image 中设置为 255。2D generator 后续把这些 invalid pixels 当成 missing memory,而不是可信 appearance cue。这个深度门控很简单,但针对整屋任务非常关键:房间之间的拓扑边界不只是 attention mask 的问题,也是 cache render 可见性的物理边界问题。

3.6 Auto-regressive panorama synthesis with decoupled guidance

2D panorama generator 使用 Qwen-Image-Edit 作为 backbone,并在 attention 中采用前述 extrinsics-only Plücker rays 与 CPRoPE,以保持 equirectangular wraparound continuity。起点节点用 style condition: 之后 style 不再直接作为每步输入,而是通过 nearby generated panorama 和 cache visual memory 继续传播。对后续节点: 其中 是 shell-derived geometric proxy, 是 cache-rendered visual memory, 是附近已生成 panorama。这个公式体现了 decoupled guidance: 约束 walls/openings/floors/ceilings/large-scale layout, 提供颜色、材质和已观测区域的高频 appearance, 提供局部风格和近邻外观 continuity。

如果把 shell 和 cache 混成单一条件,粗糙 shell 可能压制纹理细节,或者错误 memory 可能覆盖几何约束;PanoWorld 分开注入二者,就能让 2D generator 在“遵守布局”和“保留 photorealism”之间获得更清晰的信号分工。

3.7 论文级伪代码与 released-code 状态

公开代码搜索结果:论文项目页链接到 jjrCN/PanoWorld。截至 main@19234d4 (2026-05-19),该仓库只有 README.mdLICENSE,没有模型定义、训练 loop、loss、config 或 launch script。因此下面伪代码是依据论文方法重建的 paper-level pseudocode,不是 released implementation;训练配置数字也只能来自论文正文/LaTeX,而不能从实际 launch config 交叉验证。

def build_shell_proxy(floorplan, pose, shell_builder, shell_renderer):
    shell = shell_builder(
        floorplan,
        outputs=["walls", "floors", "ceilings", "room_labels", "doorway_graph"],
    )
    shell_obs = shell_renderer.render(shell, pose)
    proxy = {
        "normal": shell_obs.normal_map,
        "semantic": shell_obs.semantic_map,
        "depth": shell_obs.depth_map,
        "room_id": shell.room_at(pose.position),
        "topology": shell.doorway_graph,
    }
    return proxy
def room_aware_attention(q, k, v, room_ids, doorway_connected):
    # q/k/v: [num_tokens, dim]; token_to_node is omitted for brevity.
    same_room = room_ids[:, None] == room_ids[None, :]
    door_ok = doorway_connected  # true only for boundary/doorway-connected nodes
    valid = same_room | door_ok
    logits = q @ k.T / (q.shape[-1] ** 0.5)
    logits = logits.masked_fill(~valid, float("-inf"))
    return torch.softmax(logits, dim=-1) @ v
def train_panoramic_lrm(lrm, context, target_views, weights):
    gaussians = lrm(context.panoramas, context.poses, context.proxies, context.rooms)
    rendered = render_3dgs(gaussians, target_views.poses)
    loss_l2 = F.mse_loss(rendered.rgb, target_views.rgb)
    loss_perc = vgg19_perceptual(rendered.rgb, target_views.rgb)
    loss_alpha = opacity_regularizer(gaussians.opacity)
    loss_depth = log_depth_loss(gaussians.pixel_depth, context.depth)
    return (
        weights["l2"] * loss_l2
        + weights["perc"] * loss_perc
        + weights["alpha"] * loss_alpha
        + weights["depth"] * loss_depth
    )
def progressive_cache_update(cache, local_update, room_id, tau_mu, tau_v, opacity_min):
    aligned = transform_to_global(local_update)
    for g in aligned:
        candidates = cache.find_same_room(room_id)
        match = find_compatible_gaussian(g, candidates, tau_mu=tau_mu, tau_v=tau_v)
        if match is None:
            cache.add(g)
        else:
            match.position = opacity_weighted_average(match.position, g.position)
            match.covariance = opacity_weighted_average(match.covariance, g.covariance)
            match.sh0 = blend_base_color(match.sh0, g.sh0, match.opacity, g.opacity)
            match.sh_high = choose_dominant_high_order_sh(match, g)
            match.opacity = max(match.opacity, g.opacity)
    cache.prune(lambda gaussian: gaussian.opacity < opacity_min)
    return cache
def cross_room_memory_filter(cache_render, shell_render, tau_depth):
    valid = cache_render.depth <= shell_render.depth + tau_depth
    visual_memory = cache_render.rgb.clone()
    visual_memory[~valid] = 255  # invalid / missing memory
    return visual_memory, valid
def autoregressive_panoworld(floorplan, style, target_nodes, generator, lrm):
    shell = build_3d_shell(floorplan)
    graph = sample_topological_path(shell, target_nodes, spacing=(0.5, 1.5))
    cache = EmptyGaussianCache()
    panoramas = {}
    for t, node in enumerate(graph):
        geom_proxy = render_geometric_proxy(shell, node.pose)
        if t == 0:
            panorama = generator(geometry=geom_proxy, style=style)
        else:
            memory = render_3dgs(cache, node.pose)
            memory = cross_room_memory_filter(memory, render_shell(shell, node.pose), tau_depth=0.0)[0]
            nearby = select_nearby_panorama(panoramas, node, shell.topology)
            panorama = generator(geometry=geom_proxy, visual_memory=memory, nearby_view=nearby)
        local_context = select_same_room_and_door_context(panoramas, panorama, node, shell.topology)
        delta_cache = lrm(local_context)
        cache = progressive_cache_update(cache, delta_cache, node.room_id, tau_mu=1.0, tau_v=0.0, opacity_min=0.0)
        panoramas[node.id] = panorama
    return {node.id: panoramas[node.id] for node in target_nodes}, cache

Code reference: main @ 19234d4 (2026-05-19) — public repo currently contains only README/LICENSE; mapping below records released-code absence.

Paper ConceptSource FileKey Class/Function
Official repo identityREADME.mdrepository title and paper name only
LicenseLICENSEApache-2.0 style license text
Room-aware panoramic LRM未发布未发布实现;论文 §3.3 提供方法和 loss
CPRoPE / RAGA未发布未发布实现;论文公式定义 attention mask 和 circular phase
Progressive 3DGS cache未发布未发布实现;论文 §3.4 描述 fuse/prune 策略
2D panorama generator / Qwen-Image-Edit LoRA未发布未发布 training script / config
Evaluation scripts / Overlap PSNR未发布未发布实现;supplement 描述 patch sampling 与 PSNR 公式

论文公式与 released code 实现差异:截至 main@19234d4,released code 不包含实现文件,因此无法确认论文中的 CPRoPE、RAGA、3DGS cache fusion、cross-room filtering、LoRA training config 与实际代码是否完全一致;笔记中的方法细节均来自论文正文、supplement 和 arXiv source。

4. Experimental Setup (实验设置)

4.1 Data

论文使用三个训练数据源。第一,渲染 6,813 个 3D-FRONT houses,得到约 200K panoramas with depth。第二,使用 RealSee3D,包含 10K house scenes 和 299,073 panoramas with depth。第三,收集 2.5M private 2D panoramas without 3D annotations,这部分只用于提升 2D panorama generator 的 visual synthesis quality。3D-FRONT 和 RealSee3D 同时用于 panoramic LRM 与 2D generator;private 2D panoramas 只用于 2D generator。

评估数据分两类。panorama synthesis 使用一个基于 private data 构建且论文称 will release 的 floorplan benchmark:7 个 representative real floorplans,每个 floorplan 有对应 3D shell assets 和 3 个 style settings;总共采样 42 个 panorama viewpoints,在三种风格下得到 126 个 evaluation panoramas。whole-house LRM reconstruction 使用 50 个 held-out RealSee3D scenes,并评估 8-panorama 与 12-panorama input settings。

Figure A.4 解读:supplement 中的 training data visualization 展示 3D-FRONT 与 RealSee3D 的代表样例,包括 panorama、depth 或 shell-proxy image,以及 room-level BEV map。BEV map 对本文方法很重要,因为 room partitions、doorway connectivity、sampled camera nodes 和 local room groups 直接决定了 RAGA mask 与 topology-aware cache context 的构造。

4.2 Preprocessing and training config

2D generator 的 training preprocessing 参考 DreamHome-Pano,将 furnished panoramas 分解成 geometry condition 和 appearance condition。论文使用基于 Nano Banana 2 的 defurnishing module 与 fine-tuned Qwen-Image 得到 shell-like empty-room images,再用 SAM 生成 semantic segmentation maps,用 MoGe-2 生成 normal maps。visual memory condition 由训练好的 LRM 从 nearby panorama observations 渲染得到。room grouping 方面,3D-FRONT 的 labels 来自 camera poses 与 wall meshes 的关系;RealSee3D 的 room groups 则通过 DAP 估计深度并检查 camera mutual visibility 粗标注。

训练配置的 exact numbers 如下;由于 released GitHub repo 没有 launch/config 文件,这些数字来自论文 §4.1,而非代码配置:

  • Panoramic LRM:训练 7 天,64 张 NVIDIA H200 GPUs;训练时动态支持 1 到 24 个 input panoramas;输入分辨率 ;global batch size 256。
  • 2D panorama generator:使用 LoRA 训练 4 天,8 张 NVIDIA H200 GPUs;global batch size 16。
  • 论文未详细说明:learning rate、optimizer、scheduler、LoRA rank、exact training steps、cache fusion thresholds 、Qwen-Image-Edit 的具体 checkpoint / prompt 模板版本。

4.3 Baselines

panorama synthesis 任务没有完全同构的现有 benchmark,因此论文把多种代表方法适配到 whole-house multi-node panorama setting:DreamHome-Pano 是 style+geometry controlled panorama generator,但没有 explicit multi-node consistency module;Pano2room 被改造成 room-level panorama baseline,但没有 persistent whole-house memory;Nano Banana 2 和 Seedream-4.5-Edit 作为强 image-editing baselines,使用 text/image conditions 为每个 target node 独立生成;OmniRoam 是 panoramic video generation baseline,被适配为沿路径 progressive video generation,再把接近目标节点的 frame 重投影成 panorama。

Figure A.2 解读:Nano Banana 2 baseline 使用 Gemini-3.1-flash-image-preview,输入是 geometry-control image、style reference 和固定长 prompt。这个 baseline 的关键限制是没有持久 3D memory;每个 target panorama 主要靠当前控制图和风格图生成,因此容易单图质量高但节点之间材质/布局漂移。

Figure A.3 解读:Seedream-4.5-Edit baseline 不能直接很好理解 shell-rendered image 和复杂 prompt,因此作者先把 shell image 转成 line drawing,再用简化 prompt 要求模型保持空间结构并参考风格图。这说明强通用 image-editing model 在 equirectangular panorama 控制上仍然需要额外协议,且仍缺少跨节点 memory。

LRM reconstruction baseline 包括 MVP、Adapt-Splat 和 WorldMirror 2.0,分别在 8-panorama 和 12-panorama input settings 下比较 PSNR、SSIM、LPIPS。

4.4 Metrics

单节点图像质量使用 HPSv3,论文将其作为 human-preference-aligned aesthetic score。style consistency 使用 image-image CLIP score,衡量生成 panorama 与 style reference 的一致性。跨节点一致性使用 Overlap PSNR,即 PSNR。whole-house LRM reconstruction 使用 PSNR、SSIM 和 LPIPS:PSNR/SSIM 越高越好,LPIPS 越低越好。

Figure A.5 解读:Overlap PSNR 的评估区域是手工选定的 co-visible planar shell patches,通常是墙、地面、画作或墙面装饰。每个 patch 以 1cm 间隔采样成 个 3D points,再投影到初始节点和待评估节点的 equirectangular pixels 上计算对应像素 MSE/PSNR。这个指标专门衡量“同一物理表面在不同 panorama 节点里是否长得一样”,比单图 aesthetic 更贴近整屋 tour 的一致性需求。

5. Experimental Results (实验结果)

5.1 Panorama synthesis quantitative results

Table 2 的核心结论是:PanoWorld 不是单节点最美,但跨节点一致性大幅领先。具体数值如下:

MethodHPSv3 ↑CLIP-I Style ↑PSNR
DreamHome-Pano8.57110.778515.4022
Pano2room2.17710.679615.7788
Nano Banana 29.54830.794014.7476
Seedream-4.5-Edit7.07330.782915.3870
OmniRoam6.14920.720116.3862
PanoWorld7.95640.757722.1365

PanoWorld 的 PSNR 为 22.1365,比第二名 OmniRoam 的 16.3862 高 5.7503 dB。Nano Banana 2 在 HPSv3 和 style CLIP 上最高,说明强 image editing model 可以生成更讨喜的单个 panorama;但它的 overlap PSNR 只有 14.7476,说明跨节点一致性很弱。PanoWorld 的单节点 HPSv3=7.9564 处于 7—8 的竞争区间,牺牲了一部分 aesthetic peak,但换来显著更强的 cross-node spatial/material consistency。这个结果支持论文的主张:整屋 VR tour 不能只看单图质量,必须单独衡量重叠区域的一致性。

Figure 5 解读:qualitative comparison 显示 PanoWorld 在门洞、走廊、客餐厅连接等跨节点区域更稳定。其他 baseline 往往单张图看起来合理,但同一空间从不同节点观察时会发生墙体开口变化、装饰纹理漂移或家具重复。PanoWorld 的优势来自 cache-rendered memory:已生成节点中的重叠区域可以作为新节点的 appearance cue,而不是完全依赖当前 prompt / control image 重新想象。

Figure 6 解读:additional qualitative results 展示不同 floorplans 和 target styles 下的 PanoWorld 输出。重点不是某一张图最美,而是风格能沿路径传播,且房间之间的 doorway geometry、wall/floor material、furniture identity 在多个节点间保持一致。该图也说明 style reference 只在初始化显式输入后,后续仍能通过 nearby panorama 与 3DGS cache 延续。

5.2 Whole-house LRM reconstruction

LRM reconstruction 表格显示 PanoWorld 在 8-view 和 12-view settings 下都显著优于 MVP、Adapt-Splat 和 WorldMirror 2.0:

MethodInputsPSNR ↑SSIM ↑LPIPS ↓
MVP821.03700.81450.3044
Adapt-Splat821.24180.81950.2978
WorldMirror 2.0813.33440.54020.5690
PanoWorld829.23610.88800.2225
MVP1220.83420.80900.3095
Adapt-Splat1221.51560.82400.2906
WorldMirror 2.01212.75410.51600.5943
PanoWorld1228.80030.88170.2299

PanoWorld 在 8 inputs 下达到 PSNR 29.2361、SSIM 0.8880、LPIPS 0.2225;12 inputs 下 PSNR 略降到 28.8003。论文解释说,12-view setting 不是简单提供更多冗余视角,而是覆盖更大空间范围,引入更多 cross-room visibility changes,因此 global multi-room fusion 更难。这个现象反过来说明:整屋 multi-room reconstruction 的困难不只是 view 数量不够,而是如何在房间拓扑下避免错误融合。

Figure 7 解读:LRM reconstruction visualization 对比不同 reconstruction methods 在 room-level viewpoints 下的渲染结果。PanoWorld 的墙门结构、局部纹理和跨房间几何更清晰;其他方法在 multi-room panorama inputs 下容易出现 blur、structural drift 或 cross-room feature interference。这个图直观支持 RAGA 与 CPRoPE 的必要性:输入视角虽然丰富,但如果 topology 不受控,模型反而会把不该融合的房间证据混到一起。

5.3 Ablations

2D generator ablation:

VariantHPSv3 ↑CLIP-I Style ↑PSNR
Full PanoWorld7.95640.757722.1365
w/o VM7.81730.759118.8374
w/o NV7.88240.738119.0182
w/o CPRoPE7.97120.758620.6109

去掉 visual memory (VM) 后,PSNR 从 22.1365 降到 18.8374;去掉 nearby-view conditioning (NV) 后降到 19.0182。这说明 cache memory 和近邻 panorama 都主要作用于跨节点一致性,而不是单图审美。去掉 CPRoPE 时 HPSv3 甚至略高到 7.9712,但 overlap PSNR 降到 20.6109,说明 panorama-aware positional encoding 的价值主要体现在 seam continuity 和几何对应,而不是提升单图美感。

LRM ablation:

VariantPSNR ↑SSIM ↑LPIPS ↓
Full panoramic LRM29.08880.88710.2226
w/o CPRoPE28.17390.86220.2409
w/o RAGA21.70840.82160.2916

最关键的 ablation 是去掉 RAGA:PSNR 从 29.0888 掉到 21.7084,LPIPS 从 0.2226 变差到 0.2916。这说明 multi-room setting 中最危险的错误不是缺少 views,而是错误跨房间聚合。CPRoPE 也有明显贡献,去掉后 PSNR 降到 28.1739,SSIM 降到 0.8622;它主要处理 panorama 左右边界和球面方向编码,使 attention 不在 seam 处断裂。

Figure A.1 解读:supplement 给出 w/o panoramic position encoding 的失败例子。没有 circular horizontal encoding 时,模型把 panorama 左右边界当成普通图像中相距很远的区域,导致 seam 处墙面纹理、家具边缘或照明不连续。这个现象解释了为什么 CPRoPE 对 HPSv3 影响不大,却能提升 overlap PSNR:它修复的是空间连续性而非单图 aesthetic。

5.4 Limitations and takeaways

论文明确提到的限制主要来自 geometry 与 observation sparsity。floorplan-to-shell 错误、missing doorway topology、panorama nodes 间距过大都会削弱 cache guidance。动态物体、镜子、透明材质和重家具遮挡仍然困难,因为这些场景会破坏简单的 shell depth gate 或导致 appearance memory 不可靠。未来方向包括 jointly optimize shell estimation and generation、引入 object-level editable semantics,以及提升 interactive restyling。

总体结论是:PanoWorld 把整屋 VR tour 生成从“单图美观”推进到“节点图像之间有空间记忆”。它的优势不是在所有视觉指标上碾压强 image-editing model,而是在保证可接受 photorealism 的同时,把 cross-node layout/material consistency 提升到明显更高水平。方法上最值得借鉴的是三层分工:floorplan shell 提供 global geometry,3DGS cache 提供 renderable memory,2D generator 提供 final texture。对于未来的 indoor world model 或 embodied simulation,这种“交付物是 2D 节点,记忆是 3D 可渲染状态”的设计比一味追求 monolithic 3D asset 更贴近实际产品路径。