PAPER DEEP DIVE
DyCraft:面向长时程四维场景生成的智能体系统
DyCraft 将长时程四维动画拆成静态场景、关键姿态三维分镜与局部运动,并通过逐帧物理验证和修复,让编码智能体生成可编辑、少穿模的动画场景。
论文:DyCraft: An Agentic System for Long-Horizon 4D Scene Generation
作者:Jeff Tan、Hang Dai、Zeqian Long、Yanzhe Lyu、R. Kenny Jones、Shangzhe Wu、Chen Geng、Jiajun Wu
论文与项目:arXiv:2610.40754 · 项目页
代码状态:官方代码已公开,仓库为 jefftan969/dycraft,本文核对版本为提交 4d0fd0d,采用 Apache-2.0 许可证。
一句话总结
DyCraft 把“让编码智能体一次性写完整段动画”改造成“先规划、再搭静态场景、逐状态验收、最后补齐运动”的动画工作流,使通用编码智能体能够在 Blender 中生成分钟级、多镜头、带角色与机构交互的可编辑四维场景。
研究背景与动机
四维内容同时包含三维几何与时间演化。对于影视、游戏和机器人学习而言,真正有用的结果不仅要看起来像视频,还要保留物体身份、相机、关节、接触关系和可编辑结构。像素空间视频生成模型擅长产生逼真画面,却很难保证跨帧几何一致,也难以把一个错误精确定位到某个物体、关节或时间区间。因此,论文选择把动画表达为 Blender 代码:代码可持久保存、可检查、可修改,也更适合精确物理交互。
问题在于,代码表示只解决了“结果可编辑”,没有自动解决“长时程创作如何组织”。现成编码智能体往往把整段动画一次写进脚本。短序列里这种方式尚可工作,但镜头一多、角色与道具一多,错误会互相缠绕:布局不合理会让抓取失败,抓取失败会让物体悬空,悬空又可能被下一段运动掩盖。智能体看到的最终画面只有几十秒,真正出错的原因却分散在场景建模、关键姿态、时间插值和物理约束之间。
论文对失败模式的判断很明确:主要瓶颈不是智能体不会写 Blender Python,而是缺少适合动画创作的流程。直接编码的智能体容易让物体相互穿透、抓取没有真正闭合、运动在帧间跳变、相机看不见关键动作,或者用匀速位移假装重力。图 2 把这些现象集中展示出来,也说明仅靠“多渲染几帧看一看”无法稳定发现全部问题。
作者的出发点是传统二维动画中的姿势到姿势制作。动画师不会只写一条从起点到终点的连续曲线,而会先确定关键姿势、构图与状态,再补中间帧。DyCraft 把这个原则迁移到三维场景:先把长动画拆成一组必须通过的静态三维状态,再在这些已验收状态之间生成连续运动。这样,原本难以定位的时序错误就被转化为可逐个检查的几何、接触、关节和事件问题。
这条思路也解释了 DyCraft 为何没有训练新的四维生成网络。系统的主体是一个通用编码智能体外壳:它扩展智能体可调用的规划、CAD、故事板、运动求解和验证操作,同时保留文件编辑、Shell、Python 与渲染等原生能力。与把流程写死的专用代理相比,这种方式允许智能体根据任务自主选择工具和修复顺序,但通过必要门禁限制“看起来完成、实际上错误”的交付。
任务定义与系统总览
论文没有给方法流程标注编号公式。为便于分析,下面的公式是根据第 3 节描述和官方评分器实现做出的操作化重构,不应被理解为论文中的原编号等式。一个长时程任务可以拆成用户提示、镜头状态、物体集合和事件集合:
$$\mathcal{T}=\left(q,\{s_k\}_{k=1}^{K},\{o_i\}_{i=1}^{N},\{e_j\}_{j=1}^{M}\right)$$其中,$q$ 是稀疏文本提示,$s_k$ 是镜头或故事板状态,$o_i$ 是需要建模与驱动的物体,$e_j$ 是必须发生的关键事件。这个表示强调系统不是只追求一段连续画面,而是要求事件、物体和镜头在时间线上共同成立。因而最终影片可以写成从规划到渲染的操作链:
$$\mathcal{F}=\operatorname{Render}\left(\operatorname{Motion}\left(\operatorname{Storyboard}\left(\operatorname{SceneIR}\left(\operatorname{Plan}(q)\right)\right)\right)\right)$$这条链并非单向瀑布。验证器在故事板阶段和连续运动阶段都会回传诊断,智能体可以回到场景、故事板或运动层修复,再重新验证。图 3 给出了完整例子:机器人要把一块宽面板搬过窄门,系统先扩展提示并搭建 CAD 场景,然后检查关键搬运动作;当手臂穿过躯干时,验证器以橙色高亮错误,智能体修改后才进入最终渲染。
flowchart TB
Prompt[User prompt] --> SceneRewrite[Fresh-context scene rewrite]
Prompt --> MotionRewrite[Fresh-context motion rewrite]
SceneRewrite --> Plan[Shot and event plan]
MotionRewrite --> Plan
Plan --> SceneIR[CAD and SceneIR authoring]
SceneIR --> Boards[Accepted 3D storyboard states]
Boards --> Gate{All required checks pass?}
Gate -->|no| Repair[Repair scene or board]
Repair --> SceneIR
Gate -->|yes| Motion[IK simulation and motion tools]
Motion --> Verify[Per-frame verifiers]
Verify -->|fail| RepairMotion[Repair motion or storyboard]
RepairMotion --> Motion
Verify -->|pass| Render[Final Blender render]
系统有三个值得注意的工程特征。第一,故事板不是展示图,而是后续运动编辑的硬前置条件。第二,验证器返回的不只是通过或失败,还包括穿透深度、分离轴、失败关节和未满足事件等可执行诊断。第三,智能体可以调用子代理并行处理物体、场景或运动片段,但主智能体仍负责集成和最终验收。
方法详解
1. 提示重写把稀疏描述扩展成可执行计划
用户提示通常只说明结果,例如“机器人把面板搬过门”,却不会主动写出门的宽度、面板厚度、抓取点、转身顺序和镜头切换。论文使用两个独立的新上下文重写器,分别扩展场景与运动,避免同一个短提示在后续建模和动画阶段被反复做不同解释。其操作关系可概括为:
$$s,m=\left(\operatorname{SceneRewrite}(q),\operatorname{MotionRewrite}(q,s)\right)$$场景重写关注物体组织原则、材质和几何复杂度;运动重写关注空间关系、状态转移和可信动作顺序。重写结果与原始指令一起进入计划阶段,智能体据此确定完整动作、精确镜头序列、所需物体与事件。消融实验显示,去掉提示重写后,系统仍能调用后续工具,但场景和运动的细节明显减少,说明该步骤补的是“计划信息”,不是简单润色文本。
2. CAD 与场景中间表示提高几何可执行性
裸智能体常用立方体、圆柱和手写顶点列表搭建复杂物体。短镜头中,这些近似物可能刚好够用;当角色需要抓取、穿过或驱动它们时,表面是否闭合、孔洞是否真实、运动副是否连续就会暴露。DyCraft 引入基于边界表示的 CAD 接口,使用精确实体建模能力生成 Blender 场景,并补充部件、关节、命名坐标系、已摆姿实例和关节限位检查。
这里的关键不是“CAD 比网格更高级”,而是增加了适合智能体推理的结构。命名坐标系让“夹爪对齐把手”这样的语义关系可以落到可计算的局部轴上;显式关节让旋转轴、父体和限位可被验证;实体几何让碰撞与支撑不必依赖薄面片的视觉遮挡。图 4 的弹珠轨道对比很直观:CAD 版本能形成连续轨道、漏斗和齿轮,裸智能体版本则出现空壳、缝隙和错误配合。
这套 CAD 工具是增量扩展,不排斥 Blender 原生能力。角色蒙皮、布料、流体和其他难以用 CAD 表达的动态现象仍可由 Blender 处理。智能体因此可以在统一场景中选择“精确实体”或“可变形网格”,而不用被迫把所有东西都塞进同一种表示。
3. 三维故事板把时序问题变成静态验收问题
进入运动阶段前,智能体必须先构造关键三维时刻。故事板会通过影片实际使用的相机渲染,并接受与连续动画相同的验证。只有相关状态通过检查且被智能体视觉审核后,才允许在该片段内编辑运动。这个门禁可写成一个合取条件:
$$G_{\mathrm{board}}(\mathcal{S})=\prod_{s\in\mathcal{S}}\mathbf{1}\left[\operatorname{review}(s)=1\land\operatorname{checks}(s)=1\right]$$公式表达的含义很直接:只要有一个状态没有通过审核或验证,故事板门禁就不成立。它阻止智能体跳过关键姿态直接插值整段动画。对长时程任务而言,这比在最终影片中发现门宽不够、夹爪到不了或相机被遮挡更便宜,因为静态场景不含时间采样误差,定位也更容易。
代码中的门禁与论文描述一致。下面的实现位于 animation/storyboard.py:17,它会找出缺失、过期或因新增物体而需要复审的状态,并在任何动画编辑之前抛出错误:
def require_storyboards(self, workspace, check=None):
plan, build = self.plan_of(workspace), self.build_of(workspace)
boards = read_json(workspace / "storyboards.json", {})
missing = missing_states(
plan, boards, build["design_id"], build.get("design_objects")
)
appeared = self.appeared_since_review(workspace, check)
missing = sorted(set(missing) | set(appeared))
if missing:
raise ValueError(
"these states need a passing, accepted storyboard before an "
"animation edit: " + ", ".join(missing)
)
这段代码比“先画几张故事板”更强:它把状态缺失、设计版本过期和新增可见物体都纳入复审条件。也就是说,场景一旦改动到影响既有镜头,旧故事板不能继续冒充有效审批。这个细节对长任务很重要,因为智能体常在局部修复后忘记回头修改依赖该物体的镜头。
4. 领域运动工具负责补齐可信中间过程
已验收故事板只规定必须经过的状态,不自动产生自然运动。DyCraft 提供人形运动技能、脚步规划约束、关节方向提醒、刚体碰撞、流体模拟和 Blender 原生烘焙等工具。角色动作不再由手写关键帧独立完成,而是通过逆运动学、物理模拟和接触约束连接关键状态。图 5 展示了躯干平衡、肢体长度、碰撞和液体四类差异:裸智能体容易让质心越界、手臂被拉伸、沙滩球互相穿透,并把饮料表现成刚性圆柱。
工具并没有替智能体决定所有动作。智能体仍负责拆镜头、选择求解方法和判断哪个失败需要重建场景。工具的价值在于把常见物理规律从“语言提醒”变成“可调用求解器与可回读证据”。例如,脚步先于躯干移动并非一条空泛提示,而是影响逆运动学目标、平衡区间和接触验证的具体约束。
5. 必需验证器与建议性检查分层
验证器分为两种作用。动画结构、关节限位、穿透和事件满足是必需验证项,任一失败都会阻止无异常完成;连续运动、支撑余量、接触滑移和解剖限位更多以建议性证据出现,供智能体判断。官方代码把前四项集中定义为:
REQUIRED_VERIFIERS = (
"AnimationWellFormed",
"JointLimits",
"NoPenetration",
"EventsSatisfied",
)
def required_checks_pass(reports):
by_name = {r["name"]: r for r in reports}
return set(REQUIRED_VERIFIERS).issubset(by_name) and all(
by_name[n]["verdict"] in {"pass", "not_applicable"}
for n in REQUIRED_VERIFIERS
)
实现位置是 animation/planning.py:412。这里要求报告集合必须同时包含四类验证器,缺报告不能视为通过;not_applicable 用于“这个任务本来就没有关节、事件或封闭空间”的情况,而不是把缺失证据当成成功。这个区别直接影响长任务可靠性:如果某个验证器因崩溃而没有产出报告,系统应当阻止清洁完成,而不是默认放行。
图 6 显示三个典型修复:角色穿过家具、物体悬空、肘关节向错误方向弯曲。人工看视频时,这些错误可能只出现几帧;逐帧几何验证和关节轨迹检查则能稳定定位。智能体根据报告修改故事板或运动,再重新编译,形成“验证、诊断、修复、复验”的闭环。
6. 评分器如何把视觉问题变成物理指标
论文报告的穿透率定义为“至少存在一个动态网格穿透的帧占全部帧的比例”,并在 24 部影片上求平均。官方实现使用自适应阈值:薄物体不能用统一的 5 毫米判断,否则一张 4 毫米卡片会被完全漏掉;但阈值也不能低于网格和浮点噪声。重建式为:
$$P_m=\frac{1}{T_m}\sum_{t=1}^{T_m}\mathbf{1}\left[\exists(A,B):C_{ABt}=1\right]$$ $$P=\frac{1}{24}\sum_{m=1}^{24}P_m$$其中,$C_{ABt}$ 表示物体对 $(A,B)$ 在帧 $t$ 被计为有效穿透,$T_m$ 是影片 $m$ 的评估帧数。有效阈值取决于较薄物体的最小局部尺度:
$$\tau(A,B)=\max\left(1\text{ mm},\min\left(5\text{ mm},0.5\min\{\ell_A,\ell_B\}\right)\right)$$这里的 $\ell_A$ 与 $\ell_B$ 是物体最小局部尺寸。阈值下限 1 毫米抑制噪声,上限 5 毫米防止小物体检查过严,中间按薄体尺寸缩放。评分器还排除静态场景中的持续构造重叠、直接连接结构、液体与特效网格,并处理初始重叠、自碰撞、消费关系和运动状态。论文正文只给出摘要式定义,官方代码则把这些边界条件完整实现,因此复现时应以评分器为准。
悬浮率通过逐帧支撑图计算。每个动态物体必须能沿接触、结构连接、可变形承载或稳定抓取路径到达地面;自推进鸟类、浮力物体等会由任务配置豁免。其形式可写为:
$$F_m=\frac{\sum_{b,t}D_{bt}\mathbf{1}\left[\neg\operatorname{Reach}_G(b,t)\right]}{\sum_{b,t}D_{bt}}$$$D_{bt}$ 表示物体 $b$ 在帧 $t$ 是否属于动态且可见的评估单位,$\operatorname{Reach}_G(b,t)$ 表示它在该帧支撑图中是否可到达合法源点。这里的“支撑”不是视觉间距,而是几何接触和结构关系共同构成的图连通性。
关节限位则可表示为每个关节在每个时刻是否越界的二元判断:
$$J_{j,t}=\mathbf{1}\left[q_{j,t}\notin[\ell_j,u_j]\right]$$$q_{j,t}$ 是关节 $j$ 在帧 $t$ 的取值,$[\ell_j,u_j]$ 是其允许区间。该指标本身简单,难点在于关节轴、父子结构和授权区间必须同时正确;如果建模时把旋转轴定义错,数值上“未越界”的动作仍可能在视觉上弯曲到不可能的方向。
实验设计与主要结果
DyBench 包含 24 个长时程、多镜头文本到四维任务,三类各 8 个:Unitree G1 人形机器人、人与动物角色、物理机构。任务并非单一动作片段,而是要求多事件、多对象和时间顺序,例如机器人做炒蛋、安装办公椅、装载窑炉、倒车式拖地、搬运宽面板,以及自动灌装线、钟表打击机构和水车机构等。这样的设计同时考察角色、刚体、液体、布料和机构。
基线包括在同一种 Codex 外壳中使用 GPT-6-Astra 的裸智能体,以及带代码、渲染、检查循环的 VIGA。裸智能体获得同一组质量标准说明,但不获得 DyCraft 的提示重写、计划、故事板、专用运动工具和验证器。这个设置旨在区分“模型本身会写代码”与“系统是否提供了适合长时程动画的工作流”。
| 偏好维度 | DyCraft 对 VIGA | DyCraft 对裸智能体 |
|---|---|---|
| 整体四维真实感 | 92.0% | 75.6% |
| 物理合理性 | 88.5% | 70.1% |
| 运动质量 | 88.5% | 71.0% |
| 整体偏好 | 89.7% | 72.3% |
用户研究招募 109 名 Prolific 参与者,每人比较 5 对影片,并针对每对回答 3 个二元问题,共形成 1,538 次有效判断。偏好结果并不是单一“哪段更好看”,而是分别询问真实感、接触与支撑、角色和机构运动质量。DyCraft 对 VIGA 的四个维度都接近或超过 88%,说明优势不仅来自场景细节,也来自事件完整性和动态可信度。
对裸智能体的优势更值得细看。二者使用同一底层编码模型,但 DyCraft 的整体偏好仍达到 72.3%。这意味着提升主要来自外壳和工作流,而不是换成另一个生成模型。用户更偏好 DyCraft 的物理合理性与运动质量,分别高出 19.4 和 17.5 个百分点,说明故事板、领域工具和验证器确实改变了对最终动态的感知。
| 物理指标(越低越好) | 裸智能体 | VIGA | DyCraft |
|---|---|---|---|
| 穿透率 | 80.1% | 74.9% | 13.0% |
| 悬浮率 | 15.7% | 26.1% | 2.7% |
自动物理指标差距更大。24 部影片中,DyCraft 的穿透率从裸智能体的 80.1% 和 VIGA 的 74.9% 降到 13.0%,悬浮率从 15.7% 和 26.1% 降到 2.7%。穿透率仍有 13.0%,并不等于“完全物理正确”,但相比两个基线已经不是同一量级。论文指出,剩余问题主要出现在角色与持握物之间,例如狗嘴压入报纸,或缝合线等多层部件之间。
定性结果补充了数字无法表达的部分。VIGA 往往生成较短片段并漏掉关键事件,裸智能体虽然会尝试完成所有事件,却常把复杂物体简化为几何基元,运动也缺少物理响应。DyCraft 能覆盖分钟级多镜头,并让角色、液体、布料和机构在同一任务中持续演化。图 1 汇总了办公椅组装、搬钢琴和包裹分拣等不同场景,显示系统并非只针对单一角色类别。
消融实验分别移除提示重写、三维故事板、领域运动工具和外部验证器。四个变体都出现规划或物理合理性退化,完整系统最好。论文主要报告定性消融,因此无法据此估计每个组件对穿透率和悬浮率的独立贡献。这是一个重要的证据边界:系统级结果很强,但组件之间的定量归因仍不如主实验清晰。
复现成本与工程含义
官方 README 给出了比论文正文更直接的运行成本:在 GPT-6-Astra 与 Codex 配置下,一分钟成片的中位主智能体耗时约为 11 个智能体小时,计入辅助智能体后约为 15 个智能体小时。默认单次运行上限是 12 小时,长任务若不拆解会先撞上时间限制。评分器在 24 部 DyCraft 影片上约消耗 19 个 CPU 小时,24 部裸智能体影片约消耗 8 个 CPU 小时,主要成本来自逐帧几何。
| 工程指标 | 官方公开值 | 含义 |
|---|---|---|
| 成片智能体时间 | 约 11 小时/分钟 | 不含辅助智能体,中位数 |
| 含辅助智能体 | 约 15 小时/分钟 | 并行委派后的总智能体时间 |
| 默认运行上限 | 12 小时 | 长提示需拆分或显式调整 |
| 评分几何成本 | 约 19 CPU 小时/24 部 | 逐帧碰撞与支撑测量 |
这些数字说明 DyCraft 更像高价值内容的生产系统,而不是实时生成器。它适合需要可编辑场景、精确接触和稳定几何的机器人仿真、概念动画和复杂机制展示;若目标只是快速得到几秒氛围视频,像素生成模型仍有明显成本优势。论文的贡献因此不是宣称代码智能体在所有生成任务上替代视频模型,而是说明当控制、持久性和物理关系成为核心约束时,代码化工作流是可行路线。
局限与讨论
作者明确承认,DyCraft 仍会留下物理错误。第 4.4 节指出,剩余穿透主要集中在角色与持握物、服装或缝合线等多层部件之间。这类错误涉及软体变形、局部接触和语义上的“允许重叠”,比刚体间碰撞更难定义。系统的清洁完成规则要求必需验证器通过,但也保留了带异常交付的兜底路径,因此验证器覆盖不到的关系仍可能进入成片。
第二个作者可见的限制是评估仍以人类偏好为主。论文指出,动态场景的可靠自动指标难以设计,所以主结论依赖 109 人用户研究;穿透率和悬浮率只覆盖两类几何错误,无法完整衡量事件语义、叙事节奏、材质真实感或相机质量。它们降低的是明显物理违规,不等于全面评价四维生成质量。
从独立分析看,系统对底层编码模型、Blender 环境、角色资产和长时运行预算依赖很强。论文全部实验使用 GPT-6-Astra;若换成较弱模型,提示重写和 CAD 工具可能仍能工作,但智能体能否根据复杂诊断完成多轮修复尚不清楚。官方成本也表明,系统的高质量结果来自大量搜索和验证,不是一次前向生成。
另一个边界是多层物体和可变形交互。验证器擅长处理显式网格、关节和接触图,但软体自接触、可抓取布料、液体承载和“角色吃下食物”这类语义关系需要复杂例外规则。官方评分器已经包含消费、液体材质、自由飞行、稳定抓取和初始重叠等规则,说明纯几何判定必须不断加入领域例外;规则越复杂,跨任务泛化就越需要验证。
最后,DyBench 只有 24 个任务,虽覆盖三类实体,却不能穷尽真实影视或机器人工作流。人类偏好样本提供了统计信号,但每个参与者只比较 5 对,任务和基线组合也有限。后续工作若要证明系统在真实生产环境中稳定,需要更长的镜头、更复杂的多角色交互、失败恢复和跨模型复现实验。
结论与展望
DyCraft 的核心贡献不是某个单独的 Blender 工具,而是把动画制作重新组织成编码智能体能够可靠执行的层级:用提示重写补足计划,用 CAD 场景提供可检查结构,用故事板把连续时序拆成静态状态,用领域工具生成运动,再用逐帧验证器阻止错误交付。每个组件都对应长时程任务中的一种典型失控方式。
实验结果表明,这种工作流能够显著减少穿透与悬浮,并让用户更愿意选择 DyCraft 生成的影片。更重要的是,它提供了一条与像素生成不同的技术路线:四维内容不必只以视频张量存在,也可以作为场景、关节、事件、相机和代码的持久组合。对机器人领域而言,这种表示天然接近仿真资产与可执行环境,未来可能进一步连接任务规划、策略学习和 sim-to-real 验证。
如果要把这条路线继续推进,关键问题会从“智能体是否会写 Blender 代码”转向“如何为长时程创作设计可组合的中间表示和可验证门禁”。DyCraft 给出的答案是把大问题拆小,并让每一步都能被观察、诊断和回滚。这个原则可能比具体使用的某个模型或工具更持久。
当生成系统学会像动画师一样先确认关键姿势,再把时间填进去,长视频的难点就从“一次写对”变成了“每一步都能验收”。



