Hunyuan-GameCraft: High-dynamic Interactive Game Video Generation with Hybrid History Condition
Paper: arXiv:2506.17201 Code: Tencent-Hunyuan/Hunyuan-GameCraft-1.0 Code reference:
main@9a35ecf4(2025-11-28)
1. Motivation (研究动机)
Hunyuan-GameCraft 关注的是“可交互游戏视频生成”:给定一张起始图和文本描述,模型需要按玩家连续输入的移动/视角控制生成后续画面。它不是只追求短视频画质,而是同时要求高动态场景、动作可控、长时一致、推理足够快;这些约束叠加后,现有 video diffusion / controllable video 方法会暴露明显短板。
Figure 1 解读:这张 teaser 展示了论文的目标形态:模型从单张场景图和 prompt 出发,连续接收 与视角方向键,生成多段相互衔接的 gameplay 视频。关键不只是“画面动起来”,而是每一步动作都要改变摄像机位置或朝向,同时保持同一 courtyard 场景的几何与外观记忆。
当前方法的问题主要有三类:第一,许多 camera-controlled video 方法(如 CameraCtrl、MotionCtrl、WanX-Cam)可以做单段相机运动,但缺少游戏交互里的多步动作耦合与长时历史记忆;第二,已有 game world model 往往局限于特定游戏或低维离散动作,难以泛化到 100+ AAA 游戏风格;第三,扩展到长视频时,training-free 自回归容易场景崩塌,强 history conditioning 又会牺牲动作响应。
论文用表格直接对比了 Hunyuan-GameCraft 与 GameNGen、GameGenX、Oasis、Matrix、Genie 2、GameFactory、Matrix-Game:Hunyuan-GameCraft 的定位是 AAA Games、720p、continuous action space,并且同时具备 scene generalizable、scene dynamic、scene memory。这个组合是动机的核心:如果模型要成为 playable interactive generation 的基础组件,它必须在泛化、动态、记忆三者之间同时成立,而不能只优化其中一项。
值得研究的原因在于,interactive video generation 一旦可控、长时稳定且低延迟,就可以把静态图像或 prompt 扩展成可探索的 3D/4D 场景原型:游戏预演、虚拟摄影、开放世界内容生成、艺术风格世界探索都可以从“离线生成视频”变成“按输入滚动生成世界”。论文最后也承认当前动作空间仍偏探索类移动,尚未覆盖 shooting、throwing、explosion 等 game-specific actions;这说明它更像第一步通用 interactive game video world model,而不是完整游戏引擎替代品。
2. Idea (核心思想)
核心洞察是:游戏里的键盘/鼠标离散输入可以先统一映射到连续相机运动空间,再以 Plücker/camera trajectory 形式注入 video diffusion backbone;长视频不是靠单图反复 extrapolate,而是把“单帧、上一段 clip、多段历史 clip”混合成 hybrid history condition,让模型同时学会动作响应和场景记忆。
Hunyuan-GameCraft 的三项关键创新是:一是将 、方向键、Space 等输入转成共享 camera representation,减少不同游戏控制协议之间的割裂;二是在 HunyuanVideo 的 MMDiT latent token 上加入轻量 camera encoder 输出,实现动作条件与图像条件的 early token addition;三是用 hybrid history-conditioned training + PCM distillation,把长时自回归和交互延迟都纳入同一框架。
它与 Matrix-Game 的根本区别在于,Matrix-Game 更偏 Minecraft/有限 action space 的交互世界模型;Hunyuan-GameCraft 则以 HunyuanVideo 这类大规模 T2V foundation model 为 backbone,用连续 camera space 和 100+ AAA 游戏数据提升跨场景泛化。它与 CameraCtrl/MotionCtrl/WanX-Cam 的区别在于,后者主要做单段 camera-controlled video,而本文显式处理动作序列、历史片段条件和长视频滚动生成。
更具体地说,本文把“可交互”拆成两个同时优化的子问题:第一,当前 action 必须在短时间内改变下一段视频的相机轨迹,所以 action representation 要足够连续、可插值、与三维几何对齐;第二,长视频不能每段都重新从单帧开始,否则场景身份、物体位置和空间结构会随自回归漂移,所以模型必须看到历史 latent。难点是这两者互相拉扯:history 越强,画面越稳但越容易沿着上一段惯性继续;action 越强,响应越快但越容易丢失场景记忆。Hybrid history condition 的思想就是把这个 trade-off 变成训练分布本身,让模型在 single-frame、single-clip、multi-clip 条件之间学习平衡。
因此,这篇论文的新意不只是“把按键接到视频模型上”,而是把 interactive game generation 组织成一个有几何中间变量、有历史 latent 记忆、有推理加速路径的统一系统:continuous camera space 负责可控性,CameraNet token addition 负责把控制低成本注入 MMDiT,hybrid mask/latent conditioning 负责长时一致,PCM 负责把系统推向可交互延迟。
3. Method (方法)
3.1 Overall framework:从图像、prompt、动作到长视频
Hunyuan-GameCraft 建在 HunyuanVideo 上,整体 pipeline 是:输入 reference image 与 prompt;把键盘/鼠标动作转成连续相机轨迹;用轻量 action/camera encoder 把轨迹编码成与 video latent 对齐的特征;把 image/action features 在 patchify 后加到 MMDiT token;如果要生成长视频,就把历史 latent 作为 head condition,与当前 noisy chunk 和 binary mask 一起送入 denoising;最后可用 PCM distilled checkpoint 把标准多步采样压缩到 8 steps。
Figure 4 解读:图中左侧是输入端:reference image、prompt、键盘/鼠标信号。中间先把 action 转成连续 camera space,再通过 action encoder 与 image latent 对齐;右侧的 variable mask indicator 用 表示历史帧、 表示待预测帧。这个设计把 image-to-video 起始生成和 long video extension 放在同一 denoising 形式里,避免为首段生成和后续扩展维护两个模型。
直觉上,本文不是让 Transformer 自己从离散按键中“猜”三维运动,而是把人类控制先投影到 camera trajectory 这个更接近视频几何变化的中间层。这样做的好处是动作条件与画面变化之间有明确结构:前进/后退对应相机平移,左右/上下看对应相机旋转;模型学习的是“给定相机运动后如何渲染下一段视频”,而不是在 token 层直接记忆每个游戏的控制语义。
3.2 Dataset construction:让 foundation video model 学到游戏交互分布
Figure 3 解读:数据管线包含四步:Scene and Action-aware Data Partition、Data Filtering、Interaction Annotation、structured captioning。它把 2–3 小时的游戏录屏切成可训练的短片段,过滤低质量/过暗/异常片段,再重建相机轨迹并生成层级 caption,因此模型拿到的不只是视频帧,还包含动作与文本语义。
真实游戏数据来自 100+ AAA first-person perspective titles,包括 Assassin’s Creed、Red Dead Redemption、Hogwarts Legacy、Cyberpunk 2077 等。论文用 PySceneDetect 将 2–3 小时 gameplay recording 切成 6 秒 coherent clips,总规模超过 1M 个 1080p clips;再用 RAFT 的 optical flow gradients 检测 rapid aiming 等动作边界,使片段与动作变化更对齐。
过滤阶段使用 quality assessment 去掉 low-fidelity clips,使用 OpenCV luminance filtering 去掉暗场景,并使用 VLM 做 gradient detection 以从多个视角过滤异常样本。交互标注阶段用 Monst3R 重建 6-DoF camera trajectories,给每个 clip 标注 frame-by-frame position/orientation;captioning 阶段用 game-specific VLM 生成两级描述:约 30 字的短摘要和 100+ 字的详细描述,训练时随机采样。
论文还构建了约 3,000 条高质量 synthetic motion sequences,从 curated 3D assets 渲染不同起点、速度、平移、旋转及组合轨迹。合成数据主要补充精确几何与相机控制先验;真实游戏数据提供动态物体、复杂光照和画面真实感。为了缓解 forward-motion bias,作者使用 start-end vectors stratified sampling 平衡 3D 方向分布,并用 temporal inversion augmentation 增加 backward motion 覆盖。
3.3 Continuous action space:把离散输入统一成连续相机运动
论文定义动作空间 为相机参数空间 的一个子集: 其中 和 是平移/旋转方向的单位向量, 和 控制平移速度与旋转角速度,上界分别是 与 。论文特意去掉 roll 维度,因为常见 first-person / exploration 游戏中玩家更常控制 yaw/pitch 与平移,roll 对交互直觉和稳定训练都不是必要自由度。
released code 中,hymm_sp/sample_inference.py 的 generate_motion_segment() 支持 forward/backward/left/right/rotate_left/rotate_right/rotate_up/rotate_down,把每个 action 转成一段 positions/rotations;ActionToPoseFromID() 再把 action id 映射成 pose list。随后 GetPoseEmbedsFromPoses() 通过 camera intrinsics、relative pose 和 ray_condition() 生成 Plücker embedding 与 unconditional Plücker embedding。
3.4 Action control injection:轻量 CameraNet + token addition
论文尝试过 Token Addition、Token Concatenation、Channel-wise Concatenation,最终采用 Token Addition。原因是 Plücker embeddings 已经在时间和空间上与 video latent 对齐,直接在 patchified token 初期加 control signal 就能得到强控制能力,同时计算更轻。
released code 的 hymm_sp/modules/cameranet.py 中,CameraNet 先用 nn.PixelUnshuffle(downscale_coef) 把空间分辨率压到 latent 尺度,再通过两层 1x1 Conv2d + GroupNorm + ReLU 编码,并在中间用 compress_time() 做时间下采样;最后 final_proj 和 camera_in 把特征投影到 MMDiT latent token 所需通道。hymm_sp/modules/models.py 中的 HYVideoDiffusionTransformer 在 img = self.img_in(img) 后,如果有 camera_condition,就调用 self.camera_net(camera_condition) 得到 camera_latents,并执行 img = img + camera_latents。
如果去掉这一模块,模型仍可能根据 reference image 生成漂亮视频,但动作输入和具体画面变化会弱耦合:前进可能只变成随机动态,旋转可能无法稳定改变视角;如果改成 concat,控制可能仍可用,但 token 长度/通道会增加,效率和显存更差。
3.5 Hybrid history-conditioned long video extension
Figure 5 解读:图中比较三种长视频扩展方式:(i) training-free single-image inference 反复外推,历史上下文太弱;(ii) streaming generation 使用滚动窗口与非均匀噪声,和本文的 image-to-video backbone / causal VAE 兼容性差;(iii) hybrid history condition 把历史 latent 作为 head condition,逐 chunk denoise 新片段,是本文采用的方案。
每个自回归 step 被定义为 chunk latent denoising:当前要生成的 noisy chunk 接收两个条件,一是 head latent(可以是单帧、上一段 clip、或更长历史 clip),二是 action/camera signals。历史 head latent 在 noise schedule 中保持 clean,不参与加噪;待预测 chunk 则通过 flow matching 逐步去噪。额外的 binary mask 用 标记历史区域、 标记预测区域,告诉 Transformer 哪些 latent 是条件,哪些 latent 要生成。
Figure 6 解读:单图 training-free 外推会出现明显质量崩塌;只用 history clip condition 虽然更稳定,却容易被历史运动惯性“拖住”,导致动作控制退化;hybrid history condition 同时混合单帧、单 clip、多 clip 三种条件,在红框区域表现出更好的动作响应和历史保持。
训练时 hybrid history condition 的比例是:single historical clip ,multiple historical clips ,single frame 。这个比例体现了 trade-off:更多历史信息提升 temporal coherence 和 fidelity,但也会削弱对新 action 的响应;加入 single frame 条件能保留初始 image-to-video 能力,加入多历史条件能提升长时记忆,主比例给 single clip 则在稳定与控制之间折中。
released code 的推理路径与论文设计一致但只覆盖 inference:hymm_sp/sample_batch.py 会把输入图片或输入视频编码成 raw_ref_latents / raw_last_latents,循环 action_list 调用 HunyuanVideoSampler.predict(return_latents=True),再用返回的 ref_latents / last_latents 更新下一段生成的历史条件。pipeline_hunyuan_video_game.py 中会构造 gt_latents_concat 和 mask_concat,当 last_latents 是多帧时,把当前 latents 前半段与 condition 前半段替换为 last_latents,再把 [latents, gt_latents_concat, mask_concat] 在 channel 维 concat 后送入 transformer。
3.6 Accelerated generative interaction:PCM 与 CFG distillation
为降低交互延迟,论文采用 Phased Consistency Model (PCM),把原始 diffusion sampling 和 classifier-free guidance 蒸馏为 8-step consistency model。CFG distillation 的目标写作:
这里 是 prompt, 是 CFG weight,学生模型 被训练成直接输出 guided velocity/score,推理时不再需要额外执行 unconditional/conditional 两次前向来组合 guided output。论文报告最高 speedup,并达到 6.6 FPS;released repo 的 scripts/run_sample_batch_distill.sh 使用 weights/gamecraft_models/mp_rank_00_model_states_distill.pt、--infer-steps 8、--cfg-scale 1.0、--use-fp8,对应蒸馏推理设置。
论文公式与 released code 实现差异:论文描述的是训练期的 hybrid ratios 与 CFG distillation objective,但 GitHub repo 当前只发布 inference / Gradio / distilled checkpoint,没有 optimizer、loss.backward() 或 distillation training loop;因此笔记中的蒸馏 loss 来自论文公式,不能从 code 复现训练。另一个可见差异是论文实验写系统运行在 fps、每个 chunk 为 33-frame clips;released sample_batch.py 保存视频时 save_videos_grid(..., fps=24),同时 inference launch script 使用 --video-size 704 1216 近似 720p,而不是训练论文中的表述形式。
3.7 Pseudocode:按 released code 还原关键组件
3.7.1 Action-to-camera trajectory / Plücker embedding
import torch
def build_camera_condition(action_id, action_speed, height, width, start_index=0, step=1):
# hymm_sp/sample_inference.py: ActionToPoseFromID + GetPoseEmbedsFromPoses
pose_list = ActionToPoseFromID(action_id, value=action_speed)
plucker, uncond_plucker, poses = GetPoseEmbedsFromPoses(
pose_list,
target_height=height,
target_width=width,
target_length=33,
flip=False,
start_index=start_index,
step=step,
)
cam_latents = plucker.unsqueeze(0).to(torch.bfloat16).cuda()
uncond_cam_latents = uncond_plucker.unsqueeze(0).to(torch.bfloat16).cuda()
return cam_latents, uncond_cam_latents, poses3.7.2 CameraNet token addition
import torch
import torch.nn as nn
from einops import rearrange
class CameraNet(nn.Module):
def __init__(self, in_channels, downscale_coef, hidden_size, out_channels):
super().__init__()
start_channels = in_channels * (downscale_coef ** 2)
self.unshuffle = nn.PixelUnshuffle(downscale_coef)
self.encode_first = nn.Sequential(
nn.Conv2d(start_channels, start_channels // 2, 1),
nn.GroupNorm(2, start_channels // 2),
nn.ReLU(),
)
self.encode_second = nn.Sequential(
nn.Conv2d(start_channels // 2, start_channels // 4, 1),
nn.GroupNorm(2, start_channels // 4),
nn.ReLU(),
)
self.final_proj = nn.Conv2d(start_channels // 4, hidden_size, 1)
self.camera_in = nn.Conv3d(hidden_size, out_channels, 1)
self.scale = nn.Parameter(torch.ones(()))
def forward(self, camera_states):
b, f, c, h, w = camera_states.shape
x = rearrange(camera_states, "b f c h w -> (b f) c h w")
x = self.unshuffle(x)
x = self.encode_first(x)
x = compress_time(x, num_frames=f)
x = self.encode_second(x)
x = compress_time(x, num_frames=x.shape[0] // b)
x = self.final_proj(x)
x = rearrange(x, "(b f) c h w -> b c f h w", b=b)
return self.camera_in(x) * self.scale
def inject_camera_tokens(img_tokens, camera_condition, camera_net):
camera_latents = camera_net(camera_condition)
return img_tokens + camera_latents3.7.3 Hybrid history latent/mask construction
import torch
def build_hybrid_history_input(latents, gt_latents, last_latents):
# pipeline_hunyuan_video_game.py: gt_latents_concat + mask_concat + last_latents overwrite
frame_length = latents.shape[2]
gt_latents = gt_latents.repeat(1, 1, frame_length, 1, 1)
gt_latents_concat = gt_latents.clone()
if frame_length == 10:
gt_latents_concat[:, :, 1:, :, :] = 0.0
mask_concat = torch.ones(gt_latents.shape[0], 1, frame_length, gt_latents.shape[3], gt_latents.shape[4], device=gt_latents.device)
mask_concat[:, :, 1:, :, :] = 0.0
else:
half = frame_length // 2
gt_latents_concat[:, :, half:, :, :] = 0.0
mask_ones = torch.ones(gt_latents.shape[0], 1, half, gt_latents.shape[3], gt_latents.shape[4], device=gt_latents.device)
mask_zeros = torch.zeros_like(mask_ones)
mask_concat = torch.cat([mask_ones, mask_zeros], dim=2)
if last_latents.shape[2] == 1:
latents[:, :, 0, :, :] = last_latents[:, :, -1, :, :]
else:
half = latents.shape[2] // 2
latents[:, :, :half, :, :] = last_latents
gt_latents_concat[:, :, :half, :, :] = last_latents
return torch.cat([latents, gt_latents_concat, mask_concat], dim=1)3.7.4 Autoregressive multi-action sampling
@torch.no_grad()
def sample_game_video(sampler, prompt, ref_latents, last_latents, actions, speeds):
all_segments = []
for idx, (action_id, speed) in enumerate(zip(actions, speeds)):
out = sampler.predict(
prompt=prompt,
is_image=(idx == 0),
ref_latents=ref_latents,
last_latents=last_latents,
action_id=action_id,
action_speed=speed,
infer_steps=50,
guidance_scale=2.0,
return_latents=True,
output_type="pt",
)
all_segments.append(out["samples"][0])
ref_latents = out["ref_latents"]
last_latents = out["last_latents"]
return torch.cat(all_segments, dim=2)3.7.5 CFG distillation objective(论文公式;released repo 未发布训练代码)
import torch
import torch.nn.functional as F
def cfg_distillation_loss(student, teacher, z_t, t, prompt, empty_prompt, cfg_weight):
cond = teacher(z_t, t, prompt)
uncond = teacher(z_t, t, empty_prompt)
guided_target = (1.0 + cfg_weight) * cond - cfg_weight * uncond
guided_student = student(z_t, t, prompt, cfg_weight=cfg_weight)
return F.mse_loss(guided_student, guided_target)3.8 Code-to-paper mapping
Code reference:
main@9a35ecf4(2025-11-28) — pseudocode and mapping based on this commit
| Paper Concept | Source File | Key Class/Function |
|---|---|---|
| Action string/id to camera pose sequence | hymm_sp/sample_inference.py | generate_motion_segment, ActionToPoseFromID |
| Camera pose to Plücker embedding | hymm_sp/sample_inference.py | GetPoseEmbedsFromPoses, ray_condition, get_relative_pose |
| Lightweight action/camera encoder | hymm_sp/modules/cameranet.py | CameraNet.forward |
| Token-level camera addition in MMDiT | hymm_sp/modules/models.py | HYVideoDiffusionTransformer.forward, self.camera_net, img = img + camera_latents |
| Hybrid latent/mask conditioning | hymm_sp/diffusion/pipelines/pipeline_hunyuan_video_game.py | gt_latents_concat, mask_concat, last_latents overwrite, transformer call with cam_latents |
| Autoregressive multi-action extension | hymm_sp/sample_batch.py | reference encoding, action loop, predict(return_latents=True), update ref_latents / last_latents |
| Inference launch: original model | scripts/run_sample_batch_sp.sh | 8 GPU torchrun, --infer-steps 50, --cfg-scale 2.0, --video-size 704 1216 |
| Inference launch: distilled model | scripts/run_sample_batch_distill.sh | distilled checkpoint, --infer-steps 8, --cfg-scale 1.0, --use-fp8 |
| Gradio deployment | scripts/launch_app_sp.sh, hymm_sp/gradio/* | distributed worker, API server, UI |
4. Experimental Setup (实验设置)
4.1 Datasets
训练数据由两部分构成。第一部分是真实 gameplay recordings:100+ AAA first-person perspective titles,论文列举了 Assassin’s Creed、Red Dead Redemption、Hogwarts Legacy、Cyberpunk 2077 等;通过 scene/action-aware partition 形成超过 1M 个 1080p、约 6 秒的 coherent clips。第二部分是 synthetic rendered data:约 3,000 条高质量 motion sequences,从 curated 3D assets 系统采样起点、平移、旋转、组合轨迹和速度,用于增强精确相机控制与几何先验。
评测集是 150 张 diverse images 和 12 种 action signals,来源于在线仓库,覆盖 gaming scenarios、stylized artwork、AI-generated content。这个设置不是传统固定 benchmark,而是为了测试跨游戏/跨风格场景下的 action controllability、visual quality 和 generalization。
4.2 Baselines
论文比较了两类 baseline。交互游戏模型包括 Matrix-Game(重点用于同类 sequential action / long-term consistency 对比),并在引言表中对比 GameNGen、GameGenX、Oasis、Matrix、Genie 2、GameFactory。camera-controlled video generation baselines 包括 CameraCtrl、MotionCtrl、WanX-Cam,用于单动作相机控制、画质和 RPE 对比。
4.3 Evaluation metrics
- FVD ↓:Fréchet Video Distance,用于视频真实感/分布距离,越低越好。
- RPE trans / RPE rot ↓:Relative Pose Error,在对预测轨迹与 ground truth 做 Sim3 Umeyama alignment 后评估平移与旋转控制误差。
- Image Quality / Aesthetic / Temporal Consistency ↑:沿用 Matrix-Game 风格的视觉质量、美学与时序连续性分数。
- Dynamic Average ↑:从 VBench 的 Dynamic Degree 改造而来,不再做二分类,而是直接报告 absolute optical flow values,以连续方式衡量动态强度。
- Motion Smooth / User Study ranking ↑:Motion Smooth 衡量运动平滑性;user study 由 30 名 evaluator 匿名排名,5 表示最好、1 表示最差。
4.4 Training and inference config
论文训练设置:基于 HunyuanVideo,全参数训练,192 张 NVIDIA H20 GPUs,batch size 48,两阶段训练。第一阶段使用全部真实游戏数据和合成数据原始比例,训练 30k iterations,learning rate ;第二阶段引入 Sec. 3 的数据增强/分布平衡,将 learning rate 降到 ,继续 20,000 iterations。hybrid history condition 比例为 single historical clip 、multiple historical clips 、single frame 。系统按论文描述运行在 fps,每个视频 chunk 为 33-frame clips,720p 分辨率。
released repo 当前没有训练 launch/config,因此上述训练数字不能从 config.py 默认值推断,也不能用 repo 复跑训练;它们来自论文实验设置。repo 可复现的是 inference:scripts/run_sample_batch_sp.sh 使用 torchrun --nproc_per_node=8、weights/gamecraft_models/mp_rank_00_model_states.pt、--video-size 704 1216、--cfg-scale 2.0、--infer-steps 50;scripts/run_sample_batch_distill.sh 使用 distilled checkpoint、--cfg-scale 1.0、--infer-steps 8、--use-fp8。
5. Experimental Results (实验结果)
5.1 Main quantitative results
| Model | FVD ↓ | Image Quality ↑ | Dynamic Average ↑ | Aesthetic ↑ | Temporal Consistency ↑ | RPE Trans ↓ | RPE Rot ↓ | Infer Speed ↑ (FPS) |
|---|---|---|---|---|---|---|---|---|
| CameraCtrl | 1580.9 | 0.66 | 7.2 | 0.64 | 0.92 | 0.13 | 0.25 | 1.75 |
| MotionCtrl | 1902.0 | 0.68 | 7.8 | 0.48 | 0.94 | 0.17 | 0.32 | 0.67 |
| WanX-Cam | 1677.6 | 0.70 | 17.8 | 0.67 | 0.92 | 0.16 | 0.36 | 0.13 |
| Matrix-Game | 2260.7 | 0.72 | 31.7 | 0.65 | 0.94 | 0.18 | 0.35 | 0.06 |
| Ours | 1554.2 | 0.69 | 67.2 | 0.67 | 0.95 | 0.08 | 0.20 | 0.25 |
| Ours + PCM | 1883.3 | 0.67 | 43.8 | 0.65 | 0.93 | 0.08 | 0.20 | 6.6 |
主表说明两个 trade-off:标准 Hunyuan-GameCraft 在 FVD、Dynamic Average、Temporal Consistency、RPE trans/rot 上最强,尤其 Dynamic Average 从 Matrix-Game 的 31.7 提升到 67.2,说明游戏场景动态显著增强;PCM distilled 版本把 FPS 提升到 6.6,但 FVD 从 1554.2 退到 1883.3、Dynamic Average 从 67.2 降到 43.8,属于用部分视觉/动态质量换交互延迟。
Figure 7 解读:qualitative comparison 分三类:(a) 与 CameraCtrl/MotionCtrl/WanX-Cam 比单动作 camera control;(b) 与 Matrix-Game 比多动作序列和长时一致;(c) 展示 image-to-video generalization。蓝色高亮键表示当前按键,Hunyuan-GameCraft 的画面变化更贴合输入,同时保留同一场景的空间连续性。
5.2 User study
| Method | Video Quality ↑ | Temporal Consistency ↑ | Motion Smooth ↑ | Action Accuracy ↑ | Dynamic ↑ |
|---|---|---|---|---|---|
| CameraCtrl | 2.20 | 2.40 | 2.16 | 2.87 | 2.57 |
| MotionCtrl | 3.23 | 3.20 | 3.21 | 3.09 | 3.22 |
| WanX-Cam | 2.42 | 2.53 | 2.44 | 2.81 | 2.46 |
| Matrix-Game | 2.72 | 2.43 | 2.75 | 1.63 | 2.21 |
| Ours | 4.42 | 4.44 | 4.53 | 4.61 | 4.54 |
30 名 evaluator 的匿名排名中,Hunyuan-GameCraft 在五个维度全部第一,且 Action Accuracy 达到 4.61;Matrix-Game 的 Action Accuracy 只有 1.63,说明它在多动作/连续动作场景下更容易失去输入对齐。
5.3 Ablation study
| Variant | FVD ↓ | DA ↑ | Aesthetic ↑ | RPE trans ↓ | RPE rot ↓ |
|---|---|---|---|---|---|
| (a) Only Synthetic Data | 2550.7 | 34.6 | 0.56 | 0.07 | 0.17 |
| (b) Only Live Data | 1937.7 | 77.2 | 0.60 | 0.16 | 0.27 |
| (c) Token Concat. | 2236.4 | 59.7 | 0.54 | 0.13 | 0.29 |
| (d) Channel-wise Concat. | 1725.5 | 63.2 | 0.49 | 0.11 | 0.25 |
| (e) Image Condition | 1655.3 | 47.6 | 0.58 | 0.07 | 0.22 |
| (f) Clip Condition | 1743.5 | 55.3 | 0.57 | 0.16 | 0.30 |
| (g) Ours (Render:Live=1:5) | 1554.2 | 67.2 | 0.67 | 0.08 | 0.20 |
数据分布 ablation 说明 synthetic-only 的控制误差最低(RPE trans 0.07、rot 0.17),但动态和真实感差(FVD 2550.7、DA 34.6);live-only 动态最高(DA 77.2),但控制误差大(0.16/0.27)。最终 Render:Live=1:5 不是让某一指标极端最好,而是在 FVD、Aesthetic、RPE 和 DA 之间取得更实用平衡。
控制注入 ablation 中,Token Concat. 与 Channel-wise Concat. 都不如最终方案,说明“把已对齐的 camera feature 直接加到 token 初期”既简单又有效。历史条件 ablation 中,Image Condition 的 RPE trans 最低但 DA 低,Clip Condition 提升历史一致性却控制退化;最终 hybrid condition 结合两者优势,和 Figure 6 的定性观察一致。
5.4 Long video extension and applications
Figure 8 解读:长视频结果展示了 minute-level clips 的持续生成。每一段都以先前 latent 作为条件继续 denoise,因此画面不会像单图反复外推那样快速偏离初始场景;同时 action sequence 仍能改变移动方向或视角。
Figure 9 解读:third-person game video generation 说明方法不只适用于 first-person 相机漫游,也能扩展到更复杂的车辆/第三人称场景。这里的挑战是动作不仅改变视角,还会影响主体位置和背景相对运动。
Figure 10 解读:real-world image generalization 显示模型虽然用游戏数据强化交互,但仍继承 HunyuanVideo 的 foundation model 泛化能力。给定真实世界图像和 camera movement,模型可以生成高动态、相机控制较准确的视频,而不是只能处理训练中的游戏截图。
Figure 2 解读:补充多动作结果展示了多组 action sequence 下的生成稳定性。由于该图是高纵向 composite,使用较小宽度可以保留完整序列结构;它主要补足 Figure 1 的示例,说明模型在不同场景中都能按连续动作改变视角与位置。
5.5 Limitations and conclusion
作者明确指出当前 action space 主要面向 open-world exploration,缺少 shooting、throwing、explosions 等更丰富的 game-specific actions。换言之,Hunyuan-GameCraft 的强项是 camera/movement-conditioned video world exploration,而不是完整模拟所有游戏机制。未来方向是扩展数据集与动作空间,让模型从“可移动观看世界”走向“可产生更物理、更 playable 的游戏交互”。
整体结论是:Hunyuan-GameCraft 通过连续 action representation、hybrid history conditioning、PCM acceleration,把 interactive game video generation 的四个关键指标——动作可控、动态真实、长时记忆、低延迟——放进同一系统。实验数字显示标准模型质量与控制最强,distilled 模型延迟最优;二者合起来给出了一个可实际交互部署的 game video world model 雏形。