Matrix-3D: Omnidirectional Explorable 3D World Generation

Paper: arXiv:2508.08086 Code: SkyworkAI/Matrix-3D Code reference: main @ 3f32ef8c (2025-11-25)

1. Motivation (研究动机)

Matrix-3D 研究的是“从单张图像或文本提示出发,生成一个可沿用户轨迹探索的全向 3D 世界”。这里的关键词不是单帧全景图,也不是传统的单物体 3D 生成,而是同时要求大视场、轨迹可控、几何一致、可导出 3D 表示。论文把这个问题定位为空间智能的基础能力:如果模型只能生成一段固定视角视频,用户不能改变方向、不能继续往前走、不能把结果放进 3D 场景里,那么它对 VR、仿真、具身智能、数字内容生产的价值都受到明显限制。

Figure 1 解读:这张 teaser 展示了论文的最终目标:输入可以是 image 或 text,输出不是一个窄 FoV 的视频片段,而是能在 360° 场景中移动和探索的 3D world。图中强调“omnidirectional”和“explorable”,也就是生成内容要覆盖用户周围的完整球面视野,并且要能被后续 3D 表示承载,而不是只在原始相机路径上看起来合理。

现有方法的第一个瓶颈是场景覆盖范围有限。许多 3D world generation 或 camera-controlled video generation 方法仍以 perspective image/video 为主要表示,生成时通常只覆盖一个有限视锥;即使能沿稀疏相机位姿生成新视角,结果也更接近“补视角”或“短程相机运动视频”,难以自然表达用户转身、横移、回看、继续前进时需要的 360° 上下文。论文在预备部分专门对比 perspective image 与 panorama image:透视图像的成像域局限在一个视场角内,而 panorama 把 的方向都编码到球面域,因此更适合表示大范围场景。

Figure 2 解读:Figure 2 的核心不是展示一张更宽的图片,而是说明表示选择会改变任务边界。Perspective view 只看见局部,模型即使在局部里保持清晰,也可能在相机转向后暴露未生成区域;panorama view 则把一个地点周围所有方向都纳入同一帧,使后续视频生成和 3D 重建有机会围绕“全向场景”而不是“窄视角片段”建模。

第二个瓶颈是轨迹控制与几何条件的质量。ViewCrafter、TrajectoryCrafter、Gen3C 等相关思路常用 point cloud render 作为相机轨迹条件,但论文指出 point cloud representation 容易产生 Moiré artifacts 和错误遮挡关系。原因是点云在连续相机移动时并不天然形成完整表面:稀疏点投影会出现孔洞、闪烁、错遮挡,视频扩散模型看到的条件信号本身就有几何噪声,于是生成视频可能同时出现纹理抖动、物体边界错位、远近关系混乱。Matrix-3D 选择先从初始 panorama 和 depth 构造 scene mesh,再沿用户轨迹渲染 mesh render 与 mask,让视频模型接收更连续、更像真实表面的几何提示。

Figure 4 解读:Figure 4 直接比较 mesh guidance 与 point cloud guidance。点云条件下的结果更容易出现局部伪影和结构断裂,因为点之间没有面片约束;mesh guidance 则把深度估计得到的几何变成可渲染表面,并通过 mask 表示缺失或不可见区域,给扩散模型一个更稳定的“应该在哪里有内容、哪里需要补全”的条件。

第三个瓶颈是 2D 视频到 3D 世界的 lifting。视频扩散模型擅长生成高质量动态帧,但如果只停留在视频层,用户仍然只能按生成轨迹观看,不能真正把结果作为 3D 场景渲染、编辑、漫游。传统 3DGS optimization 可以从多视角图像中得到较细致的场景,但每个场景都要优化,速度慢;feed-forward reconstruction 可以快,但如果输入仍是有限透视图,覆盖范围和全向一致性不足。Matrix-3D 因此把问题拆成“先生成 trajectory-guided panoramic video,再用两条 3D reconstruction pipeline 把 panorama video lift 到 3D”:optimization-based pipeline 追求高保真,large panorama reconstruction model 追求快速重建。

第四个瓶颈是数据。论文认为已有 panoramic video datasets 多数只有 video-text pairs,缺少精确 camera pose 与 depth annotation,无法有效训练“既要按轨迹走、又要可重建”的模型。Matrix-Pano 因此被提出为一个合成数据集,使用 Unreal Engine 5 构造 116,759 条高质量 static panoramic video sequences,每条都带 3D exploration trajectory、depth map 和 text annotation。这个数据选择有明显目的性:如果训练集中没有轨迹和深度,模型可以学到全景外观,但很难学到相机运动与几何结构之间的对应关系,也很难监督 reconstruction model 的度量深度或 3DGS attributes。

研究价值在于,Matrix-3D 将 panoramic representation、trajectory-guided video diffusion、panoramic 3D reconstruction 和可训练数据集放在同一个系统中。解决这个问题后,模型可以从单张图像或文本生成一个大范围、可继续探索的 3D 场景;对于游戏原型、VR 环境、机器人仿真、具身导航数据生成和世界模型研究,它比只生成一段视频更接近可交互环境资产。

2. Idea (核心思想)

Matrix-3D 的核心洞察是:要让 3D world generation 同时具备大范围和可探索性,最自然的中间表示不是窄 FoV 视频,而是带轨迹的 panorama video。Panorama 在每个时间步提供全向视觉上下文,trajectory render 则告诉视频模型相机应该如何运动;生成出的 panorama video 再被 lift 成 3DGS 世界。换言之,论文把 3D 世界生成分解为一个更容易利用视频模型先验的中间任务:先做“沿轨迹的全景场景视频”,再做“全景视频到 3D 表示”的重建。

具体创新可以概括为三点。第一,使用 scene mesh render + mask 作为 video diffusion condition,而不是直接使用 point cloud render。mesh condition 试图把初始 panorama 的深度结构变成连续表面,从源头减少 point cloud 投影产生的孔洞和错遮挡。第二,提出两条 panorama-to-3D 路线:optimization-based 3DGS pipeline 用关键帧、深度配准、透视裁剪、StableSR 和 3DGS optimization 追求质量;feed-forward large panorama reconstruction model 直接从 video latent 和 camera embedding 预测 3DGS attributes 追求速度。第三,构建 Matrix-Pano 数据集,让 panoramic video generation 和 reconstruction 都有相机轨迹、深度、文本的联合监督。

Figure 3 解读:Overview 图把系统拆成三个核心阶段。左侧是输入 panorama/image/text 与用户轨迹;中间是根据估计 mesh 沿轨迹渲染出的 RGB 条件和 mask,并输入 image-to-video diffusion model;右侧是把生成的 2D panoramic content 提升为 omnidirectional explorable 3D world。图中最关键的连接是:video diffusion model 并不是凭空生成视频,而是被 mesh render 和 mask 约束;3D reconstruction 也不是从单帧做,而是利用整段 panorama video 和 camera trajectory。

Matrix-3D 与现有方法的根本差异在于任务表示和系统边界。与 ViewCrafter、TrajectoryCrafter 这类 camera-guided perspective video generation 相比,Matrix-3D 生成的是 panorama video,并且可以裁成 perspective views 去和它们公平比较;这意味着 Matrix-3D 的原生输出包含更大的可观察空间。与 WorldLabs 或 WonderWorld 这类 image/text-to-3D scene demo 相比,Matrix-3D 更强调可沿指定轨迹生成长距离、全向的 scene content,并用 3DGS 或 LRM 输出可渲染场景。与 ODGS 这类 omnidirectional 3DGS reconstruction 相比,Matrix-3D 不只做已有 panorama 的重建,还把 panorama video generation 放在前面,服务于从单图或文本启动的世界生成。

一个直观理解是:传统 perspective pipeline 像拿手电筒照亮一小块场景,然后尝试补全相机走过的路线;Matrix-3D 则先让每个站点都拥有 360° 的视觉上下文,再把这些站点连接成轨迹,并把轨迹上的全向观察压缩成 3DGS。这样做不保证解决所有不可见区域问题,但显著降低了“相机稍微转向就走出生成域”的风险。

3. Method (方法)

3.1 总体框架与输入输出

Matrix-3D 的完整 pipeline 接收 image 或 text prompt。若输入是 text,系统先通过 text-to-panorama/image-to-panorama 模块得到初始 panorama;若用户已经有 panorama image,也可以直接进入后续步骤。然后,系统估计初始 panorama 的 depth,构造 scene mesh,沿用户定义的 camera trajectory 渲染出一段 trajectory-guided RGB video 和对应 mask 。这些 render/mask 与 noisy latent 一起输入视频扩散模型,生成 high-quality panoramic video。最后,系统将该 panorama video lift 到 3D world:一种路线是 optimization-based 3DGS,另一种路线是 feed-forward LRM。

从信息流看,Matrix-3D 的关键约束有三类:语义约束来自 text prompt 和初始 panorama image embedding;几何约束来自 mesh render、mask、camera trajectory;三维输出约束来自 3DGS 渲染损失或 LRM 的 3DGS attribute prediction。三类约束分别负责“是什么场景”“相机怎么走”“结果如何变成 3D”。

3.2 Panorama image generation:从文本或图像得到初始全景

论文附录说明,对于 text-to-panorama generation,作者在 FLUX 上使用 Matrix-Pano 中 1000 张精选 panorama images 训练 LoRA;image-to-panorama generation pipeline 建立在 WorldGen 上。推理阶段使用 latent rotation 和 circular padding,以支持 loop-consistent panoramic result,这与 PanFusion 的思想一致。这个模块不是论文的主贡献中心,但它很重要,因为后续 video generation 和 depth/mesh construction 都依赖一个尽量闭环一致的初始 panorama;如果 panorama 左右边界不连续,后面的 360° 视频和 3DGS 会在 seam 附近出现明显断裂。

released code 中对应的入口是 code/panoramic_image_generation.pygenerate.sh 的 Step 1 调用该脚本,--mode=t2p 时给出文本 prompt,--mode=i2p 时给出 --input_image_path。README 还说明用户可以跳过 Step 1,直接把自有 panorama image 和 prompt.txt 组织到输出目录中进入 Step 2。

def generate_initial_panorama(mode, prompt, input_image_path, output_dir):
    os.makedirs(output_dir, exist_ok=True)
    if mode == "t2p":
        # released code uses FLUX/WorldGen-related pipeline plus LoRA checkpoints
        pipe = load_flux_panorama_pipeline(checkpoints="./checkpoints")
        pano = pipe(prompt=prompt, circular_padding=True, latent_rotation=True)
    elif mode == "i2p":
        # image-to-panorama branch wraps the i2pano model used by the repo
        image = Image.open(input_image_path).convert("RGB")
        pano = i2pano(image=image, prompt=prompt, checkpoints="./checkpoints")
    else:
        raise ValueError("mode must be t2p or i2p")
    pano.save(f"{output_dir}/pano_img.jpg")
    Path(f"{output_dir}/prompt.txt").write_text(prompt)
    return pano

3.3 Trajectory-guided panoramic video diffusion

论文在 Preliminaries 中采用 flow matching 形式描述 camera-conditioned video diffusion。干净 video 经过 VAE 得到 latent ,采样噪声 ,构造插值 latent: 模型预测 velocity: 训练目标为: 其中 是文本或图像条件, 是相机/轨迹条件, 是模型预测的 velocity。Matrix-3D 的特殊之处在于 不是简单的相机参数向量,而是由 scene mesh 沿 trajectory 渲染出的 RGB sequence 与 mask sequence。

视频生成部分基于 Wan 2.1 I2V。给定 trajectory-guided video sequence ,作者先用 3D causal VAE encoder 编码 得到 video latents;mask sequence 被下采样并 reshape 成与 video latent 对齐的 mask latents;video latents 与 mask latents 再和 noisy latent 拼接,送入 Diffusion Transformer backbone 做 denoising。全局语义方面,输入 panorama 经过 CLIP 得到 image-level embedding,并与 text prompt embedding 融合后通过 cross-attention 注入生成过程。训练时基础模型冻结,仅更新 LoRA 参数,以稳定和加速训练。

released code 中,code/panoramic_image_to_video.py 先用 MoGe 对 pano_img.jpg 做 panorama depth estimation,再调用 perform_camera_movement_with_cam_input 基于 panorama、depth、mask 和 camera rail 生成 rendered_rgb.mp4rendered_mask.mp4cameras.npz;之后构造 TextVideoDataset,把 rendered_rgb.mp4 作为 cond_videorendered_mask.mp4 作为 cond_mask,再调用 WanVideoPipeline 生成 pano_video.mp4。这一点与论文的“mesh render + mask as trajectory condition”一致。

def panorama_to_video_with_mesh_condition(pano_img, prompt, camera_json, resolution):
    # 1. Estimate depth and valid mask from initial panorama.
    depth, valid_mask = moge_infer_panorama(
        image=pano_img,
        ckpt="./checkpoints/moge",
        threshold=0.03,
    )
    depth[~valid_mask] = 2.0 * depth[valid_mask].max()
 
    # 2. Render scene-mesh trajectory condition.
    rail = load_rail(camera_json) if camera_json else None
    rendered_rgb, rendered_mask, render_Rts, first_rgb, first_depth, angle = (
        perform_camera_movement_with_cam_input(
            panorama=torch.tensor(pano_img).cuda(),
            depth=torch.tensor(depth).cuda(),
            frame_size=81,
            preset_rail=rail,
        )
    )
    write_video(rendered_rgb, "condition/rendered_rgb.mp4", fps=12)
    write_video(rendered_mask, "condition/rendered_mask.mp4", fps=12)
    np.savez("condition/cameras.npz", render_Rts=render_Rts.cpu().numpy())
 
    # 3. Use Wan image-to-video model plus Matrix-3D LoRA.
    dataset = TextVideoDataset(
        vid_path="condition/rendered_rgb.mp4",
        mask_path="condition/rendered_mask.mp4",
        text=prompt,
        height=resolution,
        width=2 * resolution,
    )
    pipe = WanVideoPipeline.from_model_manager(load_wan_and_lora_checkpoints())
    cases = dataset[0]
    video = pipe(
        prompt=prompt,
        input_image=first_rgb,
        cond_video=cases["masked_video"],
        cond_mask=cases["mask_video"],
        num_frames=81,
    )
    save_video(video, "pano_video.mp4", fps=12)
    return "pano_video.mp4", "condition/cameras.npz"

这段设计的直觉是:视频模型最擅长补全纹理和语义,但它不应该自己猜相机运动导致的可见区域变化。mesh render 提供了一个几何草图,mask 明确告诉模型哪些区域来自已知表面、哪些区域需要生成或修复。相较 point cloud render,mesh render 的连续表面减少了由于投影稀疏引入的闪烁,因此模型可以把容量更多用在全景纹理、远景结构和新暴露区域的生成上。

3.4 Optimization-based 3D reconstruction

第一条 3D world generation 路线是 optimization-based pipeline。它输入 generated panorama video 与 camera trajectory。由于相邻帧高度冗余,论文每 5 帧选择一个 panoramic keyframe。随后用 MoGe 估计 keyframe panorama depth,并通过 least squares registration 对齐不同 keyframe 的 depth maps;再把这些 depth maps 对应的 world-coordinate point clouds 作为 3DGS blob initialization。因为原始 3DGS pipeline 接收 perspective images,Matrix-3D 把每个 panorama keyframe 裁成 12 个 perspective images,并使用 StableSR 对这些 perspective images 做 super-resolution,最后送入 3DGS optimization。

论文正文描述 optimization objective 是 rendered images 与 input images 的 L1 loss。released code 中 code/panoramic_video_to_3DScene.py 的实现更工程化:它先调用 code/utils_3dscene/data_process.py 把 panorama video、camera path、first frame mask 等转换成 geom_optim/data,再用 StableSR 脚本增强 mv_rgb,最后调用 code/Pano_GS_Opt/train.py。在 Pano_GS_Opt/train.py 中,RGB loss 实际为 并且在 --use_decoupled_appearance 时会使用 transformed image 的 L1 appearance loss。论文公式与 released code 实现差异:论文正文将 optimization-based pipeline 简化描述为 L1 loss;released code 的 code/Pano_GS_Opt/train.py 使用 L1 与 DSSIM 的加权组合,并默认脚本启用 decoupled appearance,因此笔记中不能把 released optimization 完全等同为纯 L1。

def optimize_3dgs_from_panorama_video(inout_dir, resolution):
    # released script: code/panoramic_video_to_3DScene.py
    prompt = Path(f"{inout_dir}/prompt.txt").read_text()
    video_path = f"{inout_dir}/pano_video.mp4"
    camera_path = f"{inout_dir}/condition/cameras.npz"
 
    # 1. Prepare multi-view perspective data from panoramic video.
    run_cmd(
        "python code/utils_3dscene/data_process.py "
        f"--video_path {video_path} "
        f"--camera_path {camera_path} "
        f"--output_dir {inout_dir}/geom_optim/data"
    )
 
    # 2. Super-resolve cropped perspective images.
    run_cmd(
        "cd code/StableSR && python scripts/sr_val_ddpm_text_T_vqganfin_old.py "
        f"--init-img {inout_dir}/geom_optim/data/mv_rgb_ori "
        f"--outdir {inout_dir}/geom_optim/data/mv_rgb "
        "--ddpm_steps 4 --seed 42 --colorfix_type wavelet"
    )
 
    # 3. Optimize 3D Gaussian Splatting scene.
    run_cmd(
        "cd code/Pano_GS_Opt && python train.py "
        f"-s {inout_dir}/geom_optim/data "
        f"-m {inout_dir}/geom_optim/output "
        "--use_decoupled_appearance --iterations 3000 --eval "
        "--sh_degree 0 --densify_from_iter 500 --densify_until_iter 1501"
    )
    copy(
        f"{inout_dir}/geom_optim/output/point_cloud/iteration_3000/point_cloud.ply",
        f"{inout_dir}/generated_3dgs_opt.ply",
    )
    return f"{inout_dir}/generated_3dgs_opt.ply"

这一路线的优势是高质量:它利用 3DGS optimization 的 per-scene fitting 能力,能得到更清晰、更准确的 geometry 和 appearance。劣势是慢,实验表明 optimization-based pipeline 每个场景需要 571 秒,而 feed-forward pipeline 只需 10 秒。

3.5 Large Panorama Reconstruction Model:feed-forward 全景重建

LRM 输出表示

第二条路线是 Large Panorama Reconstruction Model,也就是论文中的 feed-forward panoramic 3D reconstruction。它的目标是避免每个场景做长时间 optimization,直接从 generated panoramic video latent 和 camera poses 预测 3D Gaussian Splatting attributes。输入包括 video latent ,以及编码为 spherical Plücker embeddings 的 camera poses 。模型先将 video latent 和 pose 转为长度对齐的 tokens,再沿 channel 维拼接,经过线性投影、LayerNorm 与 Transformer blocks;输出通过 DPT head 和 3D DeConv upsampling 得到 3DGS representation:

12-channel Gaussian parameterization

12 个通道由 3 个 RGB color、3 个 scale、4 个 quaternion rotation、1 个 opacity、1 个 depth 组成。附录进一步说明,video latent 先经 2D convolution 和 LayerNorm,camera pose sequence 则经 kernel size 、stride 的 3D convolution 变成 spatiotemporal embedding。merged tokens 进入 4 个 base Transformer blocks,然后分成两个 decoder branches:一个估计 3D Gaussians 的 depth,另一个预测 rotation、color、opacity、scale 等其余 attributes;每个 branch 由 4-layer Transformer module、DPT、DeConv3D 组成。

Architecture figure

Figure 12 解读:LRM architecture 图展示了 feed-forward reconstruction 的核心:视频 latent 与 camera embedding 被 patchify 后融合,Transformer 负责全局场景上下文,DPT/DeConv3D 分支把 token 输出还原到时空网格,并分别预测 depth 与其余 Gaussian attributes。这个结构与普通图像 LRM 的差别在于它必须处理 panorama video 的时序维度和全向投影,因此需要 temporal upsampling 与 spherical pose embedding。

Two-stage training loss

训练上,论文采用两阶段策略。第一阶段只强调 depth prediction,并加入 harmonic RGB component 作为辅助: 其中 表示 predicted 与 ground-truth inverse depth maps, 表示 predicted 与 ground-truth harmonic RGB components。第二阶段冻结 depth-related parameters,只更新其余 Gaussian attributes。为了避免只拟合 observed views,训练每次随机采样 32 个 reference views,包括 context frames、interpolated views 和 extrapolated views;每个 panorama view 被裁为 12 个 perspective images,FoV 在 间随机选,作为 3DGS attribute fine-tuning 的监督。

Released inference code

released code 中 feed-forward reconstruction 的入口是 code/panoramic_video_480p_to_3DScene_lrm.py。它加载 Pano_LRM.pano_infer.SATVideoDiffusionEnginePanoraScene dataset,读取 --video_path--pose_path,构造 batch 后调用 model.shared_step(batch)code/Pano_LRM/pano_infer.py 中的 shared_step 将输入视频编码成 latent,再调用 forward/infer;

Outputs and paper-code gap

推理会保存 generated_3dgs_lrm_render_pano.mp4(代码中有一个拼写为 erenerated_... 的路径)、generated_3dgs_lrm_render_persp.mp4generated_3dgs_lrm.ply。论文公式与 released code 实现差异:公开仓库更偏 inference pipeline,pano_infer.py 中 loss 返回 dummy values,完整两阶段训练损失和训练脚本没有在该入口中完整呈现;

因此源码可验证 feed-forward inference 与 PLY export,但不能把论文中的完整 LRM training recipe 逐行映射到 released code。

def feedforward_lrm_reconstruct(video_path, pose_path, out_path, ckpt_path):
    # released script: code/panoramic_video_480p_to_3DScene_lrm.py
    cfg = OmegaConf.load("code/Pano_LRM/configs/infer.yaml")
    model = SATVideoDiffusionEngine(cfg).to("cuda").eval()
    load_model_weights(model, ckpt_path, device="cuda")
 
    dataset = PanoraScene(
        mp4_path=video_path,
        pose_path=pose_path,
        out_path=out_path,
        resolution=(960, 480),
        num_seq=100,
        num_frames=49,
        train_lrm=True,
    )
    sample = dataset[0]
    batch = move_to_device(collate_fn([sample]), "cuda")
 
    with torch.no_grad():
        # shared_step encodes video with the VAE and calls model inference.
        loss, loss_dict = model.shared_step(batch)
 
    # pano_infer.py exports render videos and generated_3dgs_lrm.ply.
    return {
        "ply": f"{out_path}/generated_3dgs_lrm.ply",
        "persp_video": f"{out_path}/generated_3dgs_lrm_render_persp.mp4",
    }

3.6 Matrix-Pano dataset

Matrix-Pano 的设计目标是同时服务 trajectory-guided panoramic video generation 与 3D reconstruction。论文称训练需要 detailed camera trajectory annotation 和 depth maps,而现有 panorama dataset 不提供这些信息。数据集完全在 Unreal Engine 5 中生成,包含 504 个高质量 3D scenes,覆盖室内外、天气、光照等多样环境。数据流程分三步:第一,在 Unreal Engine 中收集高保真场景;第二,对可行走区域做 trajectory sampling;第三,渲染 panorama videos、depth maps、camera poses,并用 Video-LLaMA3 做自动视频文本标注。

Figure 5 解读:Dataset figure 说明 Matrix-Pano 不只是“很多全景图”。上方展示从可行走路线中采样两个点、连接最短路径、再平滑得到相机轨迹;下方展示沿轨迹记录的 RGB panorama 和 depth map。红色线段对应初始路径,绿色曲线对应经过 Laplacian smoothing 后更平滑的轨迹。这个设计使每条视频天然带有 camera pose 与 depth supervision。

轨迹采样细节是数据集的关键。作者先识别 roads/floors 等 walkable surfaces,再用 Delaunay triangulation 在二维平面上由稀疏点构造非重叠三角网格;候选路径通过三步生成:随机选择两个 mesh vertices,用 Dijkstra 算法计算 shortest path,再用 Laplacian smoothing 减少 abrupt turns。论文只保留长度超过 18 米的 trajectories,以保证足够 temporal dynamics。渲染后,系统进行自动 filtering 和 manual assessment,去除低质量或缺细节样本;最终保留 116K/116,759 条 high-quality static panoramic video sequences,并提供 3D exploration route、depth map 和 text annotation。

Figure 6 解读:Figure 6 是 panorama video generation 的定性对比。每个生成视频取 的 panorama frames,并在下方展示四个正交 perspective views。它的重点是检验全景视频在时序推进时是否能保持几何一致,而不是只看单帧美观程度;Matrix-3D 在图中呈现出更好的全向纹理连续性和结构稳定性。

3.7 Code-to-paper mapping

Code reference: main @ 3f32ef8c (2025-11-25) — pseudocode and mapping based on this commit

Paper ConceptSource FileKey Class/Function
Text/Image to panorama initializationcode/panoramic_image_generation.pyFluxPipeline, FluxFillPipeline, i2pano wrapper
End-to-end example pipelinegenerate.shStep 1 panorama, Step 2 video, Step 3 3DGS extraction
Mesh-render trajectory conditioncode/panoramic_image_to_video.pyperform_camera_movement_with_cam_input, rendered_rgb.mp4, rendered_mask.mp4
Wan-based panoramic video generationcode/panoramic_image_to_video.pyWanVideoPipeline, TextVideoDataset, LoRA checkpoint loading
Optimization-based 3D reconstructioncode/panoramic_video_to_3DScene.pycalls data processing, StableSR, Pano_GS_Opt/train.py
3DGS optimization losscode/Pano_GS_Opt/train.pyl1_loss, ssim, --use_decoupled_appearance
Feed-forward PanoLRM inferencecode/panoramic_video_480p_to_3DScene_lrm.pySATVideoDiffusionEngine, PanoraScene, model.shared_step
LRM render/exportcode/Pano_LRM/pano_infer.pypanorama/perspective render videos, export_ply
Gaussian rendering corecode/Pano_LRM/sgm/gsrenderer/gs_core.pyGaussianModel, render_opencv_cam, save_ply

4. Experimental Setup (实验设置)

数据方面,Matrix-Pano 是训练和评估的核心数据来源。论文报告其包含 116,759 条高质量 static panoramic video sequences,每条有 trajectory、depth map 和 text annotation;数据来自 Unreal Engine 5 中 504 个 high-quality 3D scenes。数据集对比表显示,Matrix-Pano 相比 Imagine360、Web360、Argus、360-1M、PanoWan 的关键优势不是样本量最大,而是同时具备 high diversity、camera pose、depth、text、video、1024×2048 resolution。360-1M 有 1,076k samples 和 camera pose,但没有 depth/text;Argus 有 283k samples,但 diversity medium 且缺少 camera pose/depth/text;PanoWan 有 high diversity 和 text/video,但缺 camera pose/depth。Matrix-Pano 的设计更符合“按轨迹生成并重建”的监督需求。

训练配置方面,trajectory-constrained panoramic video generation model 基于 Wan2.1-I2V-14B。作者训练两个分辨率:480×960(480p)和 720×1440(720p)。每个训练视频包含 81 frames;模型在 curated 200K panoramic video sequences 上训练 6000 iterations,learning rate 为 ,batch size 为 21。训练时基础 Wan 模型冻结,只更新 LoRA 参数。released README 还给出了推理资源需求:Text2PanoImage 约 16GB VRAM;PanoVideoGen-480p 约 40GB、low-VRAM mode 约 15GB;PanoVideoGen-720p 约 60GB、low-VRAM mode 约 19GB;PanoVideoGen-720p-5B 约 19GB、low-VRAM mode 约 12GB;PanoLRM-480p 约 80GB,且 PanoLRM 可被 optimization-based reconstruction 替代,后者约 10GB VRAM。

LRM 训练方面,网络大体沿用 Wonderland 的 architecture,但关键修改是使用 DPT head 预测 3DGS attributes,并使用 sphere projection 预测 3DGS mean。large reconstruction model 基于 480p panorama video generation model 训练。每次选取 81 frames 作为 context inputs,random stride 在 1 到 3 之间;每次迭代选 32 reference views,来自 context、interpolated 和 extrapolated frames。LRM learning rate 也是 。推理时初始 panorama depth 可由用户提供,也可由 MoGe 估计。

评价指标分两类。视频质量和时序连贯性用 FID 与 FVD;camera controllability 参考 WorldScore,使用 VGGT 估计所有方法的 camera poses,并计算 rotation error 和 translation error ;重建或生成与 ground truth video clips 的接近程度用 PSNR、SSIM、LPIPS。对于 3D world reconstruction,论文说明除 time 外,所有指标都在从 panorama renderings 裁出的 perspective images 上计算。

对比基线包括 panoramic video generation models:360DVD、Imagine360、GenEx;camera-guided generation models:ViewCrafter、TrajectoryCrafter;3D reconstruction baseline:ODGS;定性对比还包括 ReconX、WonderWorld 和 WorldLabs。由于 Matrix-3D 原生输出 panorama video,而 ViewCrafter/TrajectoryCrafter 是 perspective video 方法,论文将 Matrix-3D 结果裁成 90° FoV perspective videos 后进行公平评估。

5. Experimental Results (实验结果)

5.1 Panoramic video generation 与 camera-guided generation

主表结果显示 Matrix-3D 在 panoramic video generation 上显著优于已有 panorama baselines。360DVD 的 PSNR/SSIM/LPIPS/FID/FVD 为 9.65/0.349/0.834/112/2700;Imagine360 为 11.6/0.391/0.599/66.7/1600;GenEx 为 16.1/0.600/0.380/42.2/1110。Matrix-3D 480p 达到 23.7/0.722/0.0776/15.4/234;Matrix-3D 720p 达到 23.9/0.747/0.0907/11.3/140。720p 的 PSNR、SSIM、FID、FVD 最好,480p 的 LPIPS 0.0776 略优于 720p 的 0.0907。这个结果说明高分辨率版本在分布级质量和时序指标上更强,但感知距离 LPIPS 并不单调随分辨率改善。

在 camera-guided perspective comparison 中,ViewCrafter 的 PSNR/SSIM/LPIPS/FID/FVD// 为 21.6/0.701/0.161/47.3/762/0.0940/0.0453;TrajectoryCrafter 为 21.8/0.682/0.126/33.1/675/0.0338/0.0488。Matrix-3D 480p Persp. 为 24.1/0.750/0.113/23.9/438/0.0325/0.0310;Matrix-3D 720p Persp. 为 24.3/0.777/0.108/12.5/165/0.0306/0.0297。这里最重要的结论是:即便把 Matrix-3D 的 panorama 输出裁成 90° perspective views,它仍在图像质量、视频分布指标和相机误差上优于直接面向 perspective camera-guided generation 的方法。这支持论文的核心假设:panorama intermediate representation 不只是覆盖范围更大,也能帮助 camera control 更稳定。

Figure 7 解读:Figure 7 展示 3D world reconstruction 的定性对比。它补充了数值表中 PSNR/LPIPS/SSIM 无法完全表达的内容:重建结果是否在不同视角下保持整体结构、是否有局部破碎、是否能表达远处区域。定性图的价值在于观察 3DGS 输出是否真的可漫游,而不仅是在测试裁剪图上指标较高。

5.2 3D world reconstruction:质量与速度的 trade-off

3D reconstruction 表中,ODGS 的 PSNR 为 22.04,LPIPS 为 0.444,SSIM 为 0.673,time 为 745 秒。Ours feed-forward 的 PSNR 为 22.30,LPIPS 为 0.389,SSIM 为 0.647,time 为 10 秒。Ours optimization-based 的 PSNR 为 27.62,LPIPS 为 0.294,SSIM 为 0.816,time 为 571 秒。优化版在质量上全面最好:相比 ODGS,PSNR 提升 5.58,LPIPS 降低 0.150,SSIM 提升 0.143,同时还比 ODGS 快 174 秒。feed-forward 版的质量不如 optimization-based,SSIM 甚至略低于 ODGS,但它把时间降到 10 秒,这解释了论文为什么同时保留两条路线:一个是 quality mode,一个是 speed mode。

这个表也暴露了使用方式的差异。如果应用需要快速原型或交互式生成,feed-forward pipeline 的 10 秒非常有吸引力;如果目标是最终资产质量,optimization-based pipeline 更合适。released README 也对应给出 PanoLRM 约 80GB VRAM 的高门槛,并说明用户可以用 optimization-based reconstruction 替代 PanoLRM,后者约 10GB VRAM。也就是说,速度快的 feed-forward 路线并不一定是轻量路线,它快在推理方式,不一定低在显存。

Figure 8 解读:Figure 8 对比 WorldLabs 与 Matrix-3D 从同一输入图像生成 3D scene 后沿直线前进的最远可达位置。论文强调 Matrix-3D 能生成更大范围的 scene,因此在相同 FoV 下走到更远位置仍有内容可渲染。这个定性对比与表格指标不同,它更接近用户实际探索体验:能否继续往前走,而不是只在初始附近看起来好。

Figure 9 解读:Figure 9 展示 endless exploration:用户先用 input image 和 initial trajectory 生成第一个 3D scene segment,再改变方向并沿第二条 trajectory 继续探索。图中为了便于观看,展示的是每个 panorama 中心的 perspective projection。它说明 Matrix-3D 的 pipeline 可以被迭代调用,但这并不等于真正无限全局一致;每段生成仍依赖当前可见信息和新轨迹。

5.3 Ablation:mesh renders 优于 point cloud renders

输入条件 ablation 比较 point cloud renders 和 mesh renders。Point cloud renders 的 PSNR/SSIM/LPIPS/FID/FVD// 为 23.4/0.746/0.0834/15.9/260/0.0410/0.0375;mesh renders 为 23.8/0.752/0.0793/15.3/242/0.0359/0.0344。所有指标都支持 mesh render:PSNR +0.4,SSIM +0.006,LPIPS -0.0041,FID -0.6,FVD -18,rotation error -0.0051,translation error -0.0031。提升幅度不是巨大,但方向一致,尤其 camera error 的下降对应论文的几何控制论点。

Figure 10 解读:Figure 10 是 ablation 的定性证据。Point cloud guidance 中,局部点投影带来的缺口和噪声会影响视频扩散模型对表面连续性的判断;mesh guidance 中,表面和遮挡关系更自然,因此生成结果在 texture consistency、camera controllability 和 visual quality 上更稳定。该图也解释了为什么数值表中 mesh renders 的 FVD 和 camera error 更低。

5.4 Two-stage LRM training 的必要性

论文对 LRM 的 two-stage strategy 做了定性 ablation。作者发现如果单阶段同时预测 ray distances 和其他 3DGS attributes,模型往往不能稳定收敛,导致重建质量下降;即便从第一阶段 checkpoint 初始化第二阶段,如果不冻结 depth-related parameters,depth prediction 也会在训练过程中逐渐退化。这个现象与任务耦合有关:depth 是几何骨架,color/opacity/scale/rotation 是外观和渲染属性;如果第二阶段为了拟合 RGB loss 改动 depth,模型可能牺牲可泛化几何来贴合 observed views。

Figure 11 解读:Figure 11 比较 DPT head 与 3D deconvolution head 的 depth prediction,并展示 depth-related parameters 未冻结时的退化。它支撑了两阶段训练策略:先把 metric/inverse depth 能力训练稳定,再在第二阶段冻结 depth branch,让其余 3DGS attributes 学习外观和可渲染性。否则 RGB 渲染目标可能把 depth 拉向局部最优。

5.5 结论、局限与实践 caveats

Matrix-3D 的主要结论是,panoramic representation + mesh-conditioned video diffusion + panorama-to-3D reconstruction 能显著改善 omnidirectional explorable 3D world generation。数值上,Matrix-3D 在 panorama video generation、perspective crop camera-guided comparison 和 3D reconstruction 上都达到或接近 SOTA;系统上,它提供了从 text/image 到 panorama video、再到 generated_3dgs_opt.plygenerated_3dgs_lrm.ply 的完整开源推理路径。

论文明确给出三个未来方向,也可以视为局限。第一,Matrix-3D 生成的 3D scenes 通常只包含当前可见区域的信息;未来需要通过特定轨迹设置或集成 3D object generation 来生成 unseen areas。第二,生成 3D worlds 的 editability 还不足,未来应支持“add a tree beside the house”“remove the car from the road”这类语义级编辑。第三,当前方法主要面向 static scene generation,未来要扩展到 dynamic scenes,让物体能够移动和交互,从而提供更沉浸的体验并推进 world model 研究。

实践上还有三个 caveats。第一,released code 的训练部分并不完全等同论文描述:video/LRM 的完整训练 recipe 主要在论文中,仓库更偏推理和 reconstruction;使用代码复现论文训练结果需要额外检查 checkpoint、数据和缺失训练脚本。第二,panorama representation 虽然扩大覆盖范围,但并不自动解决全局一致性和未见区域推理;Figure 9 的 iterative exploration 更像连续扩展,而不是一次性得到完整世界地图。第三,PanoLRM 虽快但显存高,optimization-based 质量高但仍需数百秒;实际部署时要在显存、速度、质量之间选择。