CinemaTraj: Composing Atomic Camera Trajectories for 3D Scenes with LLM Agents
Qianru Li, Xuyang Chen, Erkin Türköz, Lu Liu, Xuqin Wang, Liqiu Meng, Tao Wu, Yanfeng Zhang
cs.CV
2026-07-29
CinemaTraj(TUM+华为)把运镜拆成原子动作,交配 3D 场景图的 LLM 规划;ScanNet++ 上轨迹误差 1.74、覆盖率满分,优化比 3DGS 密度场快 45 倍。
给一个 3D 室内场景和一句「围着桌子绕一圈,再升到沙发上方,然后推进到自行车」,自动生成一条电影感十足的相机运镜轨迹。这事有实际用处:房产带看、虚拟漫游、游戏过场都在做。
已有的两条路各有硬伤。一条靠 2D 图像先验生成运镜,模型脑子里没有「墙是实体的」这个概念,轨迹常常穿墙穿家具;另一条把运镜当成几何路径规划,能避障,但产出的镜头平铺直叙,没有推拉摇移的电影语法。CinemaTraj 想同时吃下 3D 几何和电影意图这两头。
核心是把运镜规划重写成一个「语言接地的空间推理」问题,分四步走。
第一步建场景图。把 RGB-D 扫出来的场景拆成层次化的 3D scene graph:每个物体有带朝向的包围盒(OBB),记录它属于哪个房间、贴墙还是吊顶。墙地顶拼成水密的房间外壳,后面算距离场时不会从缝里漏出去。这个场景图就是 LLM 的空间记忆。
第二步把指令翻译成原子动作。LLM 拿到场景图、一套电影运镜工具集和对话协议,把自然语言拆成一串结构化命令(工具名+目标物体 ID+参数)。工具集分两类:物体级动作有环绕(整圈、半圈、四分之一圈)、横摇、纵摇、推拉、变焦、升降、定机位;转场动作用一段弧线连接两个物体,弧度 α 在 ±89° 之间,α=0 就是直线。场景图里的关系直接约束动作选择:贴墙的物体不准整圈环绕(没空间),吊顶的物体不准升降镜头。这一步把理解意图和生成轨迹彻底解耦。
第三步把动作实例化成参数轨迹。每种动作都用一组可解释参数定义,分固定参数(由锚点和几何给定)和自由参数(可优化)。比如环绕动作的自由参数是半径、高度、起止角和俯仰偏移。这套参数化让每个动作都保留自己的运动轮廓,优化完之后环绕还是环绕,不会因为避障变成乱七八糟的折线。
第四步做无碰撞优化。在体素网格上离散化一个 SDF(符号距离场)当碰撞代价,再跑两轮:第一轮调物体级片段的参数(含遮挡代价),第二轮用更新后的端点重建转场弧线,跨房间的弧线还会按门的连通关系拆成子弧。只调自由参数,是为了让动作在杂物堆里依然像那个动作。这里他们特意没用前人常用的 3DGS 密度场,因为高斯密度是实体几何的劣质近似,算出来还慢,他们的 SDF 每场景 10 秒,密度场要 450 秒,差 45 倍。
在 ScanNet++ 的 50 个场景上评,对照两条代表性路线:ChatCam+GenDoP(纯文本+2D 图像的扩散生成,拿不到 3D 几何)和 CCTG(有几何、能避障,但靠 SfM 恢复轨迹、没有电影约束)。
| 方法 | 轨迹误差↓ | CLaTr 语义↑ | 碰撞率↓ | 遮挡率↓ | 覆盖率↑ |
| ChatCam+GenDoP | 7.741 | 19.461 | 0.209 | 0.580 | 0.661 |
| CCTG | 9.143 | 24.031 | 0.035 | 0.516 | 0.700 |
| CinemaTraj | 1.741 | 28.982 | 0.056 | 0.503 | 1.000 |
CinemaTraj 在五项里四项最优,只有碰撞率排第二(0.056 vs 去掉锚点选择器的消融变体 0.023),但那个变体轨迹误差劣化到 7.055、覆盖掉到 0.882,是另一种权衡。40 人的用户研究里差距更直观:提示对齐、避障、电影质感三项,CinemaTraj 分别拿到 4.62、4.56、4.36(5 分制),两个基线最高才 2.93。
消融把三个组件挨个拆掉看贡献:把锚点选择器换成 CLIP 选点,碰撞率最低但常选错物体;把参数化换成 6-DoF 自由扩散,遮挡率最低但碰撞和误差都涨;把 SDF 换回 3DGS 密度场,碰撞率直接飙到 0.557,全场最差。
工程上这是个干净的系统设计,真正的贡献不是某个数字,是把「意图归意图、几何归几何」的解耦思路落地:LLM 只管读懂想拍什么、拆成哪种运镜,具体的避障交给可微优化器,中间用参数化模板兜住,这样既享受了语言模型的理解力,又不至于让它去瞎猜坐标。对做虚拟漫游、房产展示、自动过场动画的团队,这是一条比硬训扩散模型更可控、也更省的路径(优化快 45 倍)。SDF 比高斯密度更适合当实体几何代理这个结论,对其他 3D 场景任务也有参考价值。
作者自己点了三条。一是只处理静态场景,场景里有走动的人就得让规划器同时推演相机和角色轨迹、维持构图,这套没做。二是运镜工具集只覆盖基础动作,跟拍、过肩、主观视角这类相对主体的镜头还没纳入。三是整套依赖场景图提取得准,场景图错了下游全错;另外 LLM 输出本身有随机性,可复现性是个隐患。
读下来还有一个点值得盯着:主表用的是 fully-specified prompts(指令里把目标和动作都点明了),这种设置天然偏利好能精确执行指令的系统;论文对 partially-specified 和 open-ended 这两档只给了附录样例,没在主表里量化对比。开放指令下 LLM 自由编排运镜的真实表现,数据还撑得不够。