WorldCraft: From Camera Navigation to Object Manipulation in Interactive Video World Models
Paper: arXiv:2605.25077 Project: WorldCraft demo page
1. Motivation (研究动机)
现有 video-based world model 已经能做“相机级交互”:用户输入 camera action,模型沿着视角变化生成连续视频。例如 WorldPlay 这类 autoregressive video world model 可以把 camera pose/action 放进 DiT 的 spatial-control pathway,并用历史 KV memory 做长程 rollout。但是这类系统的动作空间仍然是 viewpoint-centric:用户能移动相机,却不能指定“把某个物体沿这条路径推过去”。这使得模型更像被动观察器,而不是真正可操作的 interactive environment。
本文要解决的具体问题是:在一个已有 camera-controllable、autoregressive 的视频世界模型中,加入 object-level continuous trajectory action,使用户可以先点击选中目标物体,再画出轨迹,同时 camera 仍然按照自己的路径导航;模型需要生成目标物体沿指定轨迹运动、背景和相机运动仍保持一致的未来视频。
这个问题值得研究,因为真实交互往往是 object-centric:机器人推杯子、驾驶场景中行人进入道路、游戏里移动实体,都不是单纯“看向哪里”的问题,而是“世界中某个对象发生了什么”的问题。把 object trajectory 纳入 world model 的 action space 后,视频世界模型才开始接近可操控的模拟器,而不仅是长视频生成器。
论文指出,直接把 trajectory-guided video generation 移植到 interactive world model 会遇到三个耦合难点:
- camera-trajectory coupling:屏幕上的物体位置同时受物体自身运动和 camera ego-motion 影响;用户画出的 raw screen-space path 不会自动补偿相机移动。
- controllability preservation:已有 WorldPlay 的 camera controller 已经能工作;新增轨迹控制不能把原来的 camera pathway 覆盖掉。
- off-camera state prediction:物体离开视野时仍然在世界中继续运动;当相机返回时,autoregressive memory 不能把它错误地恢复到离开前的位置。
2. Idea (核心思想)
核心洞察是:物体轨迹不应该被当作普通二维像素路径,而应被当作一个随 camera pose 动态重投影的 world-space spatial state;同时,相机控制和物体轨迹控制本质上都在控制“视觉内容出现在 3D 空间的哪里”,因此可以复用 WorldPlay 已有的 spatial-control pathway,而不是重训 attention/MLP 的全局语义路由。
WorldCraft 的关键创新由三部分组成:Normalized World Trajectory (NWT) 把用户画出的路径锚定到首帧相机坐标并随当前 camera pose 重投影;Spatial-Pathway LoRA (SP-LoRA) 只在 action_in 和 prope_proj 上做低秩适配,以最小干扰加入 object trajectory control;Trajectory-Anchored State Persistence (TASP) 把轨迹当作跨 chunk 的 persistent “where” 信号,并过滤 stale memory,让离开视野的物体在相机返回时出现在更新后的位置。
与 DragAnything / Wan-Move 这类 trajectory-guided video generation 相比,WorldCraft 的区别是它支持 camera action 与 object trajectory 的组合、并能 autoregressively rollout。与 WorldPlay / Genie 3 / GameCraft 这类 interactive video world model 相比,WorldCraft 的区别是它不仅支持 camera navigation,还支持目标物体的连续轨迹操控和 off-camera state persistence。
3. Method (方法)
3.1 Overall framework: trajectory-centric control pipeline
Figure 1 解读:左上部分展示用户输入:首帧、点击选中的对象、手绘轨迹以及 camera pose/action 序列。WorldCraft 先把 raw screen trajectory lift 到 normalized world trajectory,再在每个生成时刻按当前 camera pose 重投影;右上部分展示轨迹控制和 camera control 共同进入 spatial-control pathway,SP-LoRA 只改 action_in 与 prope_proj;底部展示 autoregressive chunk generation,TASP 会更新 anchor frame / depth,并在 re-entry 时刷新或过滤会导致旧位置复现的 memory。
WorldCraft 建立在 WorldPlay 上。WorldPlay 是基于 HunyuanVideo-1.5 的 8B autoregressive video world model。其 DiT 输入为 65 个通道:32 个 noisy latent 、32 个 image conditioning (首帧 latent,后续帧 zero padding)和 1 个 task mask 。WorldPlay 通过两类 spatial-control interface 注入 camera:action_in 处理离散 camera action,Projective Positional Encoding (ProPE) 及每层 prope_proj^{(l)} 注入 camera pose。
WorldCraft 不推翻这个 backbone,而是把“物体轨迹”也变成 spatial-control signal。整体数据流可以概括为:
- 用户在首帧点击目标对象并画出 screen trajectory。
- NWT 用首帧 intrinsics 和 depth 将轨迹变成 normalized world-space coordinates 。
- 每个生成 step/chunk 中, 按当前 camera extrinsic 重投影为 。
- in-context trajectory conditioning 把首帧目标 latent 拷贝到目标位置,形成 。
- SP-LoRA 在 spatial pathway 上微调低秩 adapter;其他 backbone 参数冻结。
- TASP 在 autoregressive rollout 中维护轨迹状态,并在物体离开/重入视野时抑制 stale memory。
这套设计的直觉是:camera control 和 object trajectory control 不必通过两个互不相干的控制器实现。camera motion 是全局空间变换,object trajectory 是局部实例空间变换;二者都影响“同一视觉内容在几何空间中的位置”。因此,把轨迹信号变成 camera-compatible 的 spatial signal,并只在空间路径上低秩适配,可以同时获得新能力和保留旧能力。
3.2 In-context trajectory conditioning
WorldCraft 首先把 trajectory 注入方式设计成与 pretrained PatchEmbed 兼容。给定首帧 latent 和 条点轨迹 ,轨迹条件 通过“把首帧目标位置的 latent feature 搬到目标时间的位置”构造: 未被轨迹指定的位置保持为 0。最终模型输入变为: 这个设计的好处是即使在 trajectory-specific training 之前也有粗粒度先验:被移动的首帧特征本身就是“目标物体应该出现在这里”的位置提示,base model 的空间理解可以部分解码这种提示。后续 NWT 决定拷贝到哪些坐标,SP-LoRA 决定哪些参数要适配,TASP 决定跨 chunk memory 如何配合这个信号。
3.3 Normalized World Trajectory (NWT)
NWT 解决 camera-trajectory coupling。若直接使用屏幕坐标,训练视频中的点轨迹满足: 其中 已经混入了物体运动与 camera ego-motion。推理时用户通常只表达“希望物体怎么动”,不会手动补偿 camera movement;直接把 raw user path 当 screen-space condition 会导致 camera 与 object control 不可组合。
NWT 的做法是先把用户轨迹锚定到首帧参考平面。给定用户画出的 screen trajectory 和参考深度 ,用首帧 intrinsics 得到 normalized coordinate: 描述的是首帧相机参考平面上的位置,而不是当前屏幕像素位置。每个生成时刻再把它按当前 camera pose 重投影: $ \boldsymbol{p}^{\text{anchored}}_t
\pi\left( \boldsymbol{K}_t, \boldsymbol{E}_t\boldsymbol{E}_0^{-1} \cdot \mathrm{lift}(\boldsymbol{q}_t, d) \right). \boldsymbol{E}_t\mathrm{lift}(\boldsymbol{q}_t,d)$ 把 normalized coordinate 放到参考深度平面上的 3D 点。重投影会自动把 camera-induced displacement 叠加进模型看到的 trajectory signal,因此用户不需要预测相机运动对屏幕位置的影响。
深度 初始来自 monocular depth estimator: 在长程 autoregressive rollout 中,如果一直使用首帧 depth 和 visual anchor,projection error 会跨 chunk 累积。因此论文引入 iterative anchor refinement:每生成一个 chunk 后,用最新可靠帧重新估计目标深度,并把更新后的 anchor-depth pair 用于后续重投影。这相当于闭环修正,使 trajectory condition 与模型已经生成的视觉状态保持对齐。
def normalized_world_trajectory_rollout(world_model, first_frame, user_path, camera_poses, intrinsics, chunk_size):
depth = depth_estimator(first_frame)[user_path[0]]
fx, fy, cx, cy = intrinsics[0]
world_path = []
for x_t, y_t in user_path:
q_t = torch.tensor([(x_t - cx) / fx, (y_t - cy) / fy])
world_path.append(q_t)
frames = [first_frame]
memory = None
for chunk in split_into_chunks(range(1, len(user_path)), chunk_size):
anchored_path = []
for t in chunk:
point3d = lift_to_reference_plane(world_path[t], depth)
screen_point = project(intrinsics[t], camera_poses[t] @ torch.inverse(camera_poses[0]), point3d)
anchored_path.append(screen_point)
new_frames, memory = world_model.generate_chunk(
context_frames=frames,
trajectory_points=anchored_path,
camera_poses=[camera_poses[t] for t in chunk],
memory=memory,
)
frames.extend(new_frames)
depth = refine_depth(new_frames[-1], anchored_path[-1], previous_depth=depth)
return frames3.4 Spatial-Pathway LoRA (SP-LoRA)
SP-LoRA 解决 controllability preservation。论文先做 full-parameter trajectory fine-tuning 后的相对权重变化分析:
结果显示 optimizer 的更新集中在 spatial-control pathway:action_in 和 prope_proj 的变化比 attention / feed-forward layers 高 –。这支持作者的假设:trajectory control 主要需要改变 spatial intent 到 feature-space position 的映射,而不是改变全局语义路由。
因此 WorldCraft 只在 action encoder 和 ProPE projection layers 上加 LoRA: 所有其他参数冻结。直观上,SP-LoRA 给 spatial pathway 增加一个低秩“局部物体控制偏移”,同时保留原有 camera-control 表示。与 conventional LoRA 改 Q/K/V 或 MLP 相比,它更少触碰全局 routing,因此更不容易破坏 camera fidelity。
Figure 4 解读:Figure 4a 把 camera-only、trajectory-only、combined 等条件下的 prope_proj activation delta 分解出来,显示 trajectory signal 是叠在 camera signal 上的小扰动,平均 trajectory/camera energy ratio 为 。Figure 4b 用 counterfactual design 比较不同轨迹下 camera effect direction,block 5 之后的 cosine 基本高于 ,跨 block 均值 ,说明 trajectory conditioning 没有旋转或破坏 camera effect 的方向。
Figure 5 解读:PCA 图把 camera-control update 和 trajectory-control update 投影到同一子空间。中间层的两个分布沿相似主方向排列,说明物体轨迹确实被注入到 camera-compatible 的 spatial-control subspace,而不是另开一个会互相冲突的控制通道。
class SpatialPathwayLoRA(torch.nn.Module):
def __init__(self, worldplay_backbone, rank=32, alpha=32):
super().__init__()
self.backbone = worldplay_backbone
freeze_all_parameters(self.backbone)
self.action_in = attach_lora(self.backbone.action_in, rank=rank, alpha=alpha)
self.prope_proj = torch.nn.ModuleList([
attach_lora(block.prope_proj, rank=rank, alpha=alpha)
for block in self.backbone.dit_blocks
])
def forward(self, noisy_latents, trajectory_condition, task_mask, camera_poses, memory=None):
model_input = torch.cat([noisy_latents, trajectory_condition, task_mask], dim=1)
camera_tokens = self.action_in(camera_poses.discrete_actions)
prope_tokens = [proj(camera_poses.view_matrices) for proj in self.prope_proj]
return self.backbone.denoise(
model_input,
camera_tokens=camera_tokens,
prope_tokens=prope_tokens,
memory=memory,
)3.5 Trajectory-Anchored State Persistence (TASP)
TASP 解决 off-camera state prediction。autoregressive world model 的 memory 里存的是历史视觉状态;当相机在 看着物体、随后转开、再在 返回时, 可能仍然强烈编码“物体在离开前的位置”。如果直接检索这段 memory,模型会把物体拉回旧位置。
TASP 有两个协调机制:
- Trajectory as persistent spatial signal:world-space trajectory 不依赖物体是否可见。即使重投影位置落在当前 frustum 外,轨迹仍然作为“物体在世界中应该在哪里”的 hidden spatial state 继续存在;相机返回时, 会被重投影回可见区域的正确更新位置。
- Pre-exit memory filtering:在 re-entry chunk,识别 off-screen 发生前最后 个 temporal latent 所在的 pre-exit zone;如果这些 memory frame 的 FOV 与当前 chunk 过于相似,就从 retrieval set 中 mask 掉,避免旧位置被注意力强行恢复: 这里 和 是 memory frame 和当前 chunk 首帧的 view matrices。轨迹提供 re-entry 的正确 “where”,memory filtering 则削弱 stale “what/where” 上下文。
def tasp_generate_chunk(model, memory, world_path, camera_poses, chunk, pre_exit_zone, tau):
anchored_path = []
for t in chunk:
anchored_path.append(reproject_world_path(world_path[t], camera_poses[t]))
current_view = camera_poses[chunk[0]].view_matrix
filtered_memory = []
for frame_id, key_values in memory:
if frame_id in pre_exit_zone:
old_view = camera_poses[frame_id].view_matrix
if fov_similarity(old_view, current_view) > tau:
continue
filtered_memory.append((frame_id, key_values))
trajectory_condition = build_in_context_condition(anchored_path)
new_frames, new_memory = model.generate_chunk(
trajectory_condition=trajectory_condition,
camera_poses=[camera_poses[t] for t in chunk],
memory=filtered_memory,
)
return new_frames, refresh_memory(filtered_memory, new_memory)3.6 Scalable data curation pipeline
WorldCraft 需要每个训练样本同时有 video clip、camera intrinsics/extrinsics、per-frame binary mask、multi-point trajectory。现有 world-model 数据集通常不同时提供这些结构化监督,因此作者构建自动数据管线。
Figure 2 解读:Figure 2 展示从 unlabeled video 到训练 tuple 的流程:先获取 camera parameters;再用 VLM/GroundingDINO 或 tracklet matching 找到适合跟踪的 moving subject;然后用 SAM2 生成 per-frame mask,并用 CoTracker3 在 mask 内跟踪 20 个点;最后用 physical-plausibility filters 去掉退化样本。WISA-80K 侧重开放真实场景,SpatialVID-HQ 侧重已有 metric camera annotation。
Figure 3 解读:Figure 3 汇总过滤后 个 clips 的对象位移分布,以及 camera motion 与 object motion 的联合分布。它的作用不是证明模型效果,而是说明训练数据确实覆盖“物体动、相机也可能动”的组合区域;这对 Stage 2 的 dynamic-camera + AR attention 训练很关键。
数据处理细节:
- Camera estimation:WISA-80K 无 camera annotation 时用 ViPE 恢复 per-frame intrinsics 与 poses;SpatialVID-HQ 已有 normalized intrinsics 和 quaternion-translation,作者转换为 pixel-space intrinsics 与 world-to-camera matrices,并把稀疏帧插值到全帧率。
- Subject discovery:WISA-80K 采样 5 帧,用 Qwen3-VL-8B 找 salient moving subject,再把文本 query 交给 GroundingDINO 定位;SpatialVID-HQ 使用
dyn_masks,先过滤面积在 – 的 connected components,再按 centroid proximity(阈值为图像对角线 )跨帧贪心关联成 tracklet,并用 打分。 - Tracking and trajectory extraction:SAM2 用 mask logits、centroid positive point、bounding box 三重 prompt 做 video segmentation;在 SAM2 输出中选择 97-frame window,要求至少 帧有 valid subject mask;再用 CoTracker3 从 mask 内采样 20 个点(1 个 centroid + 19 个 interior points)得到多点轨迹。
- Standardization:所有视频标准化为 30 fps、97 frames(约 s),camera 统一为每帧 intrinsics 和 world-to-camera matrices,video latents 通过 HunyuanVideo VAE 预缓存。
def curate_worldcraft_sample(video, source):
if source == "WISA-80K":
cameras = vipe_estimate_camera(video)
query = qwen3_vl_describe_salient_moving_subject(sample_uniform_frames(video, n=5))
box = grounding_dino_localize(video, query)
prompt = {"box": box}
elif source == "SpatialVID-HQ":
cameras = convert_metric_camera_annotations(video.metadata)
components = extract_dynamic_components(video.dyn_masks, min_area=0.001, max_area=0.30)
tracklets = greedy_match_components(components, max_centroid_distance=0.15)
best = max(tracklets, key=lambda tr: tr.num_frames * tr.area_score * tr.coherence_score)
prompt = {"mask": best.mask, "point": best.centroid, "box": best.box}
else:
cameras = video.camera_annotations
prompt = video.object_prompt
masks = sam2_bidirectional_segment(video.frames, prompt)
window = select_97_frame_window(masks, min_valid_ratio=0.30)
if centroid_displacement(masks, window) < MIN_DISPLACEMENT:
return None
points = sample_mask_points(masks[window.start], n_points=20)
trajectories = cotracker3_track(video.frames[window], points)
return {"frames": video.frames[window], "cameras": cameras[window], "masks": masks[window], "trajectories": trajectories}3.7 Progressive training
附录给出三阶段训练策略,目标是在逐步增加数据复杂度的同时避免 trajectory training 与 camera controller 互相干扰。
- Stage 0: real-domain adaptation:对预训练模型做 full-parameter fine-tuning,学习率 ,训练 2000 steps;不启用 trajectory conditioning(
trajectory_rate=0),因此不会产生 camera-trajectory conflict。 - Stage 1: static-camera trajectory learning:在 static-camera 数据上训练 trajectory control,使用 BI attention 与 SP-LoRA。因为 时 screen-space entanglement 消失,模型可以先学干净的 trajectory object motion 映射。
- Stage 2: dynamic-camera AR training:扩展到 dynamic-camera sequences,使用 AR attention,使模型学习 simultaneous camera + object motion,并恢复长程 autoregressive generation 的兼容性。
论文正文还报告:LoRA rank 为 32;SP-LoRA 约 M trainable parameters;所有实验在 8× NVIDIA H200 GPUs 上完成。论文未详细说明 Stage 1/2 的 learning rate、batch size、总训练 steps 等完整 launch config。
3.8 开源代码状态与概念映射
代码搜索未找到开源实现(checked: arXiv/PDF/source/project page, title+github, WorldCraft+github, arXiv ID, first-author/org candidate repos, GitHub repo/code search, direct owner/name probes; only project-page/demo repo and unrelated game metadata found)。
检索中发现 NevSNev/WorldCraft(main@390d8810, 2026-05-26),但该仓库只包含 GitHub Pages index.html、demo videos/images 和 WorldCraft_汇报.md,没有 training/inference scripts、configs、model/loss/data modules 或 runnable README,因此不作为 released implementation 引用,也不设置 github_ref。
| Paper Concept | Source File / Evidence | Key Class/Function |
|---|---|---|
| NWT | 论文 §3.3 与 Algorithm 1;未找到 released code | normalized_world_trajectory_rollout 为论文公式级伪代码 |
| SP-LoRA | 论文 §3.4、Appendix activation analysis;项目页仓库无实现文件 | SpatialPathwayLoRA 为论文公式级伪代码 |
| TASP | 论文 §3.5;未找到 memory filtering 实现 | tasp_generate_chunk 为论文机制级伪代码 |
| Data curation | 论文 Appendix / dataset_pipeline.tex;未找到数据脚本 | curate_worldcraft_sample 为论文流程级伪代码 |
4. Experimental Setup (实验设置)
Datasets
| Dataset | Raw | After curation | Camera source | Subject method | Traj. points |
|---|---|---|---|---|---|
| WISA-80K | 80K | 8.5K | ViPE estimated | VLM + GroundingDINO | 20 |
| SpatialVID-HQ | 100K | 24K | Provided metric | Tracklet matching | 20 |
| OmniWorld | — | 2K | Provided | Provided | — |
| Total | — | ~34.5K | — | — | — |
论文的 Figure 3 另外说明过滤后用于统计的 clips 数为 ;表中 K 是训练数据来源汇总,二者统计口径不同。
Evaluation sets
- Trajectory Accuracy (TA) set:50 clips,static camera;SAM2 给 object masks,CoTracker 给 ground-truth object trajectories。
- Camera Fidelity (CF) set:50 clips,dynamic camera,无 trajectory;使用 ViPE 抽取 per-latent camera poses(extrinsic + intrinsic )。
- Composable camera + trajectory set:45 clips,按 camera rotation 分为 small 、mid –、large ,每档 15 clips;用于 simultaneous camera + trajectory ablation。
Baselines
- Trajectory-guided generation:DragAnything、Wan-Move。
- Camera-controlled world models:Yume、Matrix-Game 2.0、GameCraft、WorldPlay。
- Capability comparison:DragAnything、Wan-Move、GameCraft、Genie 3、WorldPlay 与 WorldCraft。
Metrics
- TE (Trajectory Error):CoTracker 跟踪到的对象位置与指定 trajectory 的 mean L2 pixel error,越低越好。
- RPE / RPE / RPE:ViPE 从生成视频估计 camera trajectory 后,与 ground-truth camera motion 比较;使用 Sim(3) Umeyama alignment 补偿 scale 和坐标系差异。
- PSNR / SSIM / LPIPS:像素与感知质量指标。
- DINO:逐帧 DINOv2 feature similarity,衡量 semantic consistency。
- VBench++ SubjC / BgC / Temp:主体一致性、背景一致性、temporal flickering 分数。
Training config
- Base model:WorldPlay 8B,基于 HunyuanVideo-1.5。
- Adaptation:SP-LoRA;LoRA rank ;约 M trainable parameters。
- Progressive schedule:Stage 0 real-domain adaptation(full-parameter,,2000 steps,
trajectory_rate=0);Stage 1 static-camera + BI attention + SP-LoRA;Stage 2 dynamic-camera + AR attention。 - Hardware:8× NVIDIA H200 GPUs on AWS cloud servers。
- Not specified:论文未详细说明 Stage 1/2 的 batch size、learning rate、optimizer、总训练 steps;因未找到 released implementation,无法从 launch config 补全。
5. Experimental Results (实验结果)
5.1 Capability comparison
| Method | Camera | Object Traj. | Camera-Traj. Composable | Off-Cam. State | Autoregressive |
|---|---|---|---|---|---|
| DragAnything | ✗ | ✓ | ✗ | ✗ | ✗ |
| Wan-Move | ✗ | ✓ | ✗ | ✗ | ✗ |
| GameCraft | ✓ | ✗ | ✗ | ✗ | ✓ |
| Genie 3 | ✓ | ✗ | ✗ | ✗ | ✓ |
| WorldPlay | ✓ | ✗ | ✗ | ✗ | ✓ |
| WorldCraft | ✓ | ✓ | ✓ | ✓ | ✓ |
该表说明 WorldCraft 的定位不是单纯提高视频质量,而是补齐 action space:trajectory-guided methods 有 object trajectory 但不支持 interactive camera / autoregression;interactive world models 有 camera action 和长程生成但没有 object trajectory;WorldCraft 同时覆盖这五项能力。
5.2 Trajectory control under static camera
| Method | PSNR ↑ | SSIM ↑ | LPIPS ↓ | DINO ↑ | SubjC ↑ | BgC ↑ | Temp ↑ | TE ↓ |
|---|---|---|---|---|---|---|---|---|
| DragAnything | 15.97 | 0.600 | 0.468 | 0.777 | 0.896 | 0.913 | 0.938 | 39.86 |
| Wan-Move | 16.42 | 0.592 | 0.375 | 0.782 | 0.927 | 0.943 | 0.985 | 44.08 |
| WorldCraft | 17.23 | 0.616 | 0.363 | 0.807 | 0.942 | 0.945 | 0.989 | 38.90 |
WorldCraft 在 61-frame、50-clip TA set 上同时取得最低 TE 与最高视觉质量。这一点很重要:如果只是强行拉动物体,TE 可能下降但画面质量下降;表中 PSNR/SSIM/LPIPS/DINO/VBench++ 都更好,说明轨迹控制没有以破坏外观一致性为代价。
Figure 6 解读:Figure 6 是 trajectory control 的 qualitative comparison。WorldPlay 能生成合理场景但不能精确按用户路径移动对象;DragAnything / Wan-Move 在各自静态或非交互设定中可以使用轨迹,但与 camera-world-model 组合能力有限。WorldCraft 在同一首帧和稀疏轨迹条件下,目标对象更稳定地沿红色路径运动。
5.3 Camera fidelity under camera-only input
| Method | 61f RPErot ↓ | 61f RPEtrans ↓ | 61f RPEcam ↓ | 61f PSNR ↑ | 61f SSIM ↑ | 61f LPIPS ↓ | 253f RPErot ↓ | 253f RPEtrans ↓ | 253f RPEcam ↓ |
|---|---|---|---|---|---|---|---|---|---|
| Yume | 0.261 | 0.0143 | 0.0169 | 12.39 | 0.2931 | 0.5718 | 0.374 | 0.0247 | 0.0285 |
| Matrix-Game 2.0 | 0.342 | 0.0137 | 0.0196 | 12.96 | 0.3235 | 0.5326 | 0.162 | 0.0243 | 0.0261 |
| GameCraft | 0.252 | 0.0130 | 0.0157 | 12.42 | 0.2861 | 0.5529 | 0.198 | 0.0243 | 0.0265 |
| WorldPlay | 0.120 | 0.0155 | 0.0165 | 13.77 | 0.3434 | 0.4700 | 0.130 | 0.0262 | 0.0276 |
| WorldCraft | 0.131 | 0.0161 | 0.0170 | 13.95 | 0.3474 | 0.4621 | 0.123 | 0.0225 | 0.0233 |
在 61 frames 下,WorldCraft 的 RPE,略高于 WorldPlay 的 ,但明显优于外部 camera baselines;在 253 frames 长程设定下,WorldCraft 的 RPE,优于 WorldPlay 的 。这支持 SP-LoRA 的核心主张:加入 object-level trajectory control 后,camera controller 没有被覆盖。
Figure 7 解读:Figure 7 展示 off-camera long-horizon case:鹅向右移动,相机先向左 pan 再向右返回。Matrix-Game 2.0 在相机返回时场景一致性明显下降;WorldPlay 保留背景结构但没有对象轨迹状态;WorldCraft 通过 TASP 让鹅即使离开视野也沿轨迹继续更新,并在相机返回时出现在正确位置。
5.4 NWT representation ablation
| Representation | TE small rot. ↓ | TE mid rot. ↓ | TE large rot. ↓ |
|---|---|---|---|
| Pixel space raw user traj. | 35.82 | 40.69 | 45.28 |
| World space + single-shot depth | 33.82 | 37.69 | 41.28 |
| World space + iterative depth | 30.82 | 32.10 | 34.65 |
NWT 在所有 camera-rotation bucket 上都优于 raw pixel-space conditioning;iterative depth refinement 的收益在 large rotation 下最大(TE 从 41.28 降到 34.65),说明误差主要来自长程重投影与 camera pose 改变导致的 depth/projection drift。
5.5 SP-LoRA and curriculum ablation
| Configuration | Params | TE ↓ | RPErot ↓ |
|---|---|---|---|
| Spatial-pathway LoRA (ProPE + action) | ~50M | 38.90 | 0.131 |
| Spatial pathway + V + MLP (blocks 28–42) | ~120M | 46.60 | 0.136 |
| Spatial pathway + V + MLP (all blocks) | ~180M | 47.65 | 0.169 |
| Q/K/V + MLP conventional LoRA | ~200M | 49.43 | 0.139 |
| Full fine-tune | 8B | 37.20 | 0.237 |
Full fine-tune 的 TE 最低(37.20),但 RPE,camera fidelity 明显受损。SP-LoRA 的 TE=38.90 略高,但 RPE 最好,且只训练约 50M 参数。更大的 LoRA 范围没有带来更好 trade-off,反而提高 TE 或 RPE,说明“只改 spatial-control pathway”不是为了省参数而已,而是结构上更符合 camera/trajectory 的共享空间路径。
| Training strategy with SP-LoRA | Params | TE ↓ | RPErot ↓ |
|---|---|---|---|
| Dynamic data, AR attention | ~50M | 46.63 | 0.170 |
| Dynamic BI → Dynamic AR | ~50M | 38.25 | 0.177 |
| Static BI → Dynamic AR | ~50M | 38.90 | 0.131 |
Dynamic BI → Dynamic AR 的 TE 最低,但 RPE 较差;Static BI → Dynamic AR 在 TE 与 camera fidelity 之间最均衡。这验证了 progressive curriculum 的动机:先在 static camera 中学干净的 trajectory-object mapping,再把动态相机与 AR attention 加进来。
Figure 8 解读:Figure 8 展示 WorldCraft 的扩展能力:part-level control 中只让盾牌沿轨迹移动、身体保持相对稳定;multi-object control 中三个对象同时沿独立轨迹运动;long-horizon case 支持 253 frames(约 s at 24 fps)的长轨迹 rollout。这些 qualitative cases 说明方法不只适用于单目标短视频。
5.6 Limitations
作者明确指出三个限制:
- TASP 只维护用户指定 trajectory 的实体状态;未被指定的 broader off-camera world dynamics 仍然是开放问题。
- camera-trajectory compensation 依赖 monocular depth estimation;在大 camera rotation 下会引入 projection error,这也解释了 NWT ablation 中 large rotation 更困难。
- trajectory control 的粒度是 latent tokens( pixels),因此对 very small objects 的精细控制有限。
总体结论:WorldCraft 证明 object-level trajectory action 可以被加入 camera-controllable autoregressive video world model 中,而且无需牺牲已有 camera fidelity。NWT 负责几何解耦,SP-LoRA 负责低干扰适配,TASP 负责离屏状态持久化;三者组合后,模型从“相机可导航”推进到“对象可操控”的 interactive video world model。