← 主页Blender 场景页编辑与动态建模页深度与相机页3D 场景浏览器

白膜能当条件吗?training-free 白膜控制实验

把 Blender 里重建的无纹理几何(白膜)沿相机轨迹渲染,交给五类视频模型,看它能不能像 World in World 那样控制生成,而且不需要训练

2026-10-08 夜间实验 · 场景 robot_bedroom(主)+ 一间彩色客厅(推广检验)· 原版 MiniMax-H3、LingBot-World 2.0 + World in World、SolarWM-H3、H3 Fun-ControlNet、Wan2.1-VACE · AMD MI300X / MI308X / MI350X

0.03 → 0.83原版 H3「照片 + 白膜」第一次左转的画面重合度(改成官方提示词格式、参考补到 243 帧前后)
1.00把白膜直接当 K/V 证据注入后,画面里灰像素的占比(SolarWM-H3):被当成外观照抄
3 / 3LingBot 用「自动上色的白膜」补空洞,3 个随机种子都优于直接补白膜,且几何跟随白膜
0.87 / 0.75现成的 H3 Fun-ControlNet:照片首帧 + 白膜线稿,卧室 / 8 个新场景平均的画面重合度,8 个场景全部优于原版 H3(0.58–0.64)

结论速览

一、白膜怎么渲染

场景用 GPT-6 Astra 在 Blender 里按照片重建,相机标定为 60° 视场角(见深度与相机页),沿 H3 的「换朝向回访」轨迹渲染 237 帧:先左转 40° 停住,回正;再左转 55° 并下俯 12°,停住,回正。

同一条轨迹上的六种画面:Astra 写的材质、白膜、深度、法向、照片投影上色、均色白膜。

二、原版 MiniMax-H3:用自带的 ref2va

ref2va 的视频参考不是 ControlNet 那种逐帧对齐的控制,而是在时间轴上拼在目标前面的上下文:Qwen3-VL 以 2 fps 读它(语义),视频 VAE 把每一帧编码成固定的锚点(像素)。保留什么、改什么完全由提示词决定,官方格式是六段式,任务前缀、保留标记和每个标签的角色都有固定写法。

白膜参考视频,以及原版 H3 的几种结果:照片 + 白膜(R3a,种子 42 和 7)、照片 + 均色白膜(R3m)、只给白膜(R3b),和第一批格式下的照片 + 白膜(WA)。注意第 44–64 帧第一次左转时谁跟上了。

「重合度」:在生成画面里用 SAM 3 分割床、床头柜、窗、门、床头板,与 3D 场景按同一相机投影的物体比 IoU,取 17 个采样帧平均;「第一次左转」看第 44、56 帧,「第二次左转」看第 180、196 帧。首帧 PSNR 和原始照片比较;机器人比例是检测到机器人的采样帧占比。

组参考图参考视频提示词整体第一次左转第二次左转首帧 PSNR有机器人
Cfl2va:照片作首帧,镜头只用文字描述0.1430.050.0035.1100%
A照片彩色渲染第一批0.1740.030.5918.977%
B—彩色渲染第一批0.3610.060.8413.683%
WA照片白膜第一批0.2070.030.5816.480%
WB—白膜第一批0.1880.130.1110.587%
WC照片深度第一批0.1660.020.0117.2100%
WD照片照片投影上色第一批0.2080.030.6520.583%
R3a照片白膜官方格式0.4610.830.3818.080%
R3a 种子 7照片白膜官方格式0.5220.800.3818.877%
R3a 种子 123照片白膜官方格式0.6940.780.6618.780%
R3a 种子 2025照片白膜官方格式0.2260.590.4020.280%
R3f照片白膜线稿官方格式0.4910.800.3918.677%
R3f 种子 123照片白膜线稿官方格式0.6730.810.6419.080%
R3n照片法向(带颜色)官方格式0.1670.190.3817.780%
R3b—白膜官方格式0.5010.710.3911.883%
R3b 种子 7—白膜官方格式0.1530.050.4713.880%
R3b 种子 123—白膜官方格式0.4300.920.14——
R3c照片深度官方格式0.3290.710.3719.080%
R3a2照片彩色渲染官方格式0.1900.030.6720.480%
R3p照片照片投影上色官方格式0.1820.030.6320.780%
R3m照片均色白膜官方格式0.1550.040.3819.680%
R3dfl2va:照片作首帧 + 彩色渲染第 208 帧作尾帧0.2110.320.4431.081%
R3a 去掉时间戳照片白膜镜头只写「跟随视频」0.1710.020.0818.487%
R3a 不补帧照片白膜(237 帧,被截成 226)官方格式0.1640.220.3317.380%
官方格式这一批:照片 + 白膜、只给白膜、照片 + 深度、照片 + 投影上色、照片 + 彩色渲染、fl2va 首尾帧,以及两种参考视频。
参考视频换成什么:线稿、法向两种参考视频,以及照片 + 白膜(种子 42)、照片 + 线稿(种子 42、123)、照片 + 法向。
第一批格式:照片 + 白膜、只给白膜、照片 + 深度,与照片 + 彩色渲染对照。
最早的三组:彩色渲染当参考(A、B)和文字镜头(C),与 SolarWM-H3 基线对照。

平移相机:有视差时还跟得住吗

同样的配方换成「平移回访」轨迹:第二段动作时相机一边左转 50°,一边向左平移 0.66 m、向前 0.22 m,靠近门口。白膜按米制轨迹重新渲染,提示词里的第二段镜头改成平移描述。

组整体第一次左转(同旋转轨迹)平移后的停留段首帧 PSNR有机器人
照片 + 白膜0.2450.450.5117.887%
照片 + 均色白膜0.2300.220.6019.487%
只给白膜0.4150.480.5512.080%

平移后的视角跟到了(0.51–0.60),但这一次第一次左转只跟了一半(旋转轨迹上是 0.78–0.83),说明 H3 跟随视频参考的相机本身有随机性。

平移轨迹:白膜、照片 + 白膜、照片 + 均色白膜、均色白膜、只给白膜、法向。

用白膜做视频编辑

首帧换成之前在 Blender 里改过材质的版本(浅暖灰墙、绿色条纹被子、蜂蜜色木地板,机器人从原图贴回),参考视频仍是原来的白膜,提示词把材质描述换掉。结果首帧和编辑图一致(SSIM 0.83),第一次左转 0.80,转到的新区域也是编辑后的风格。也就是说,只要改一张首帧,几何和镜头由白膜保证,H3 会把编辑传播到整段视频。

同一份白膜:原照片(R3a)和改材质的首帧(R3e)各生成一段,另附 R3a 种子 123。

三、LingBot-World 2.0 + World in World:K/V 证据注入

World in World(WiW)的做法是:把证据画面(源视频按深度投影到目标相机的画面)在 t=0 过一遍冻结的 LingBot,取出每层注意力的 K/V,在前 3 个去噪步里拼进当前段的注意力,按可见度给 logit 加权。源视频看不到的区域是「空洞」,不给证据,由模型自己生成。我们沿用它的实现,只替换证据画面;相机内参改成标定的 60°(WiW 默认按 90° 处理这段视频)。

指标都在空洞区域里算(第 44 帧和第 196 帧镜头转开后露出来的墙、门、地板),取 3 个随机种子的均值:和白膜比的 PSNR 越高越像照抄白膜;和彩色渲染比的 PSNR 越高说明跟着上色的网格走;边缘相关衡量空洞里的几何是否跟白膜一致。

空洞里放什么与白膜 PSNR与彩色渲染 PSNR饱和度与白膜边缘相关观察
不放(WiW 原生)9.2 / 9.712.4 / 11.60.22 / 0.150.01 / −0.02空洞里编出圆镜、书桌、绿植,每个种子编的都不一样
白膜23.4 / 30.611.0 / 12.00.08 / 0.080.16 / 0.12几何跟上了,墙和地板照抄成灰色,机器人边缘有白色描边
彩色网格(Astra 材质)10.8 / 11.524.2 / 30.60.27 / 0.230.20 / 0.22几何跟随,深炭灰墙,机器人保留
均色白膜(自动上色)9.7 / 10.921.9 / 22.70.31 / 0.260.28 / 0.23和彩色网格几乎一样,闪烁最低;不需要任何材质

只跑了种子 42 的其他做法:白膜权重降到 0.25 时几何控制丢了,在白膜没有门的地方多编了一扇门;V 统计量对齐首帧后颜色偏紫蓝灰、地板长出砖纹;只在第 1 步注入时墙上多出开关面板和竖缝;整段画面都用白膜、彩色渲染或均色白膜当证据(不用源视频投影),会几乎逐帧照抄渲染,机器人消失。

LingBot(832×464,16 fps):原生、空洞补彩色网格、补白膜、补均色白膜、纯白膜证据、白膜 + V 统计对齐。

平移相机

相机向左平移时,第 180–196 帧约 99% 的画面都是源视频没见过的空洞。先用 WiW 的深度和白膜的米制深度算出单位换算(0.136 m / WiW 单位,近处和远处并不完全一致),再统一相机运动。3 个种子平均:空洞补均色白膜时,空洞和均色白膜的 PSNR 31.8 / 34.1 dB、与白膜边缘相关 0.52 / 0.55、停留段闪烁 0.20;原生只有 10.3 / 9.9 dB、相关约 0,闪烁 0.65。

平移轨迹:原生 WiW 在门口编出一扇大白门和绿植;补均色白膜后墙、门、床头柜都和白膜一致;补白膜则是灰色。

四、SolarWM-H3:我们的证据注入

SolarWM-H3 用和 WiW 同类的接口:证据画面在干净时刻过一遍冻结模型,取资产覆盖到的 token 的 K/V,从第 4 段(第 68 帧)起拼进注意力。种子 42,换朝向回访轨迹。

证据整体重合度第二次左转色彩度灰像素占比有机器人
无(基线)0.4610.096.60.6397%
彩色网格0.7640.729.40.4130%
白膜(全程注入)0.6630.482.11.0030%
白膜,只在第 1 步注入0.4570.063.40.9863%
白膜,只在前 2 步注入0.4130.212.20.9930%
白膜,V 统计对齐首帧0.7070.693.80.8730%
白膜,半权重混合0.5060.064.30.8363%
白膜,只给家具0.4780.045.90.7837%
彩色网格,只在第 1 步注入0.5610.426.90.4070%
照片投影(只用看得见的像素)0.6040.067.60.6067%
照片投影 + 白膜0.5590.156.00.7230%
均色白膜(自动上色)0.6240.697.60.4130%
SolarWM-H3:白膜、无证据、彩色网格、白膜全程、只第 1 步、V 统计对齐、照片投影、只给家具、半权重。

五、现成的控制模型(训练好的,我们不用训练)

H3 Fun-ControlNet-Union 2.0

阿里 PAI 为 H3 训练的控制分支(10 层注入,支持深度、Canny、MLSD 等)。控制视频由白膜生成:深度用逆深度可视化,线稿 = 法向图的折线 + 深度图的遮挡边。官方管线只支持 t2va(外观全靠文字);「照片首帧」是我们参照 ComfyUI 的做法,给首帧条件行补零控制行接上的。

控制整体重合度第一次左转第二次左转首帧 PSNR有机器人
白膜线稿0.8390.890.7213.277%
白膜深度0.6240.610.5912.480%
照片首帧 + 深度0.6690.870.2128.883%
深度,控制强度 0.60.2900.030.247.383%
照片首帧 + 白膜线稿0.8720.900.7229.880%
白膜线稿,种子 70.8350.900.9013.080%
平移轨迹:白膜线稿0.8500.900.9813.680%
平移轨迹:照片首帧 + 白膜线稿0.8850.910.9829.783%
照片首帧 + 线稿,种子 70.8110.750.7129.63%
照片首帧 + 线稿,种子 1230.8640.890.9229.577%
照片首帧 + 线稿,种子 20250.8970.810.9429.770%
照片首帧 + 线稿,控制强度 0.80.8470.890.6929.977%
照片首帧 + 线稿,只跑 25 步0.8700.900.7129.577%

稳健性:照片首帧 + 线稿换种子很稳,卧室 4 个种子 0.872 / 0.811 / 0.864 / 0.897(均值 0.861),第二个场景 3 个种子 0.623 / 0.627 / 0.640。原版 H3 的照片 + 白膜,4 个种子在 0.23–0.69 之间。只跑 25 步和 40 步几乎没有差别(0.870 对 0.872,首帧 PSNR 和机器人比例都一样),耗时降到约六成。控制强度降到 0.8 略低(0.847)。要注意的是种子 7 几乎把机器人全丢了,只有 3% 的帧检测得到:动态主体在白膜里没有几何,能不能保住和种子有关。

照片首帧 + 线稿的稳健性:控制视频,种子 43 / 7 / 123,控制强度 0.8,只跑 25 步。

线稿比深度强:深度在大面墙上几乎没有结构,线稿把墙角、踢脚线、门框、地板缝都画了出来。平移轨迹上第二次转身后的停留段达到 0.98。照片首帧的接法是经验性的(控制分支训练时没见过首帧条件行),首帧加深度时第二次左转明显变差,首帧加线稿则没有这个问题。

H3 Fun-ControlNet(旋转轨迹):白膜线稿控制视频、线稿、照片首帧 + 线稿、深度、照片首帧 + 深度、线稿换种子。
H3 Fun-ControlNet(平移轨迹):白膜线稿控制视频、线稿、照片首帧 + 线稿。

Wan2.1-VACE

832×480、81 帧、50 步。「深度相关」是生成画面估出的视差和白膜深度的相关系数(白膜渲染本身 0.966,真实照片对白膜深度 0.906)。

设置深度相关首帧 PSNR / SSIM观察
深度 + 参考图0.95315.7 / 0.72几何和镜头完全跟随;照片只迁移配色材质,细节由模型编
只有深度0.95812.7 / 0.57外观完全由文字决定,和照片不符
深度 + 照片作首帧0.93933.7 / 0.97首帧锁住、色调继承照片;照片里有、网格里没有的机器人在第 1–2 帧消失
白膜当灰度控制0.95710.0 / 0.46亮度被锁死,输出就是上了色的白膜,不可用
VACE 各设置对比(每 3 帧取 1 帧覆盖整条轨迹,镜头约 2 倍速)。

六、怎么选

需求推荐做法注意
外观来自照片、几何和镜头来自白膜,离线生成原版 H3 ref2va:照片作编辑后的首帧 + 纯白膜视频,官方六段式提示词,镜头逐段写时间,参考补到 243 帧不要给彩色或投影参考;第一次转身偶尔跟不全,建议多种子挑选
交互式 / 长时序世界模型(LingBot、WiW)白膜按物体自动上色,只补源视频投影的空洞不要把纯白膜当证据,也不要整段画面都用网格证据
几何控制最准,外观也要像照片H3 Fun-ControlNet:照片首帧 + 白膜线稿(卧室 0.87,8 个新场景平均 0.75),25 步即可;或 VACE 深度 + 照片首帧需要第三方控制权重;白膜要建准(换成粗糙的白膜会掉 0.26);照片里有、网格里没有的动态主体在 VACE 里会消失
视频编辑(改材质、换风格)Blender 里改材质,渲染首帧贴回动态主体,配原白膜跑 H3 ref2va首帧里的动态主体需要从原图贴回

七、第二个场景:彩色客厅

为了检验结论能不能推广,换一张颜色丰富得多的客厅照片(淡紫墙、奶白布艺沙发、红紫黄抱枕、人字纹地板、绿植、挂衣架)。没有视频可以自标定,视场角用 MoGe-2 估计(53.6°);Astra 建模 3 轮,物体 IoU 0.458 → 0.524 → 0.569,深度误差 2.3%,有一个物体悬空。沿同一条换朝向轨迹渲染白膜,照搬卧室上的 R3a 配方(官方格式、逐段时间、补帧)。

这个场景用另一种对齐指标:直接拿 Blender 的物体 ID 图当真值,按名字归成沙发、抱枕、地毯、边桌、挂衣架、书架、植物、海报、坐墩、窗帘十类,和生成画面里 SAM 3 的分割比 IoU。Astra 的彩色渲染自己也只有 0.704(SAM 3 在渲染图上本身就有漏检),可以当作上限。

组物体对齐开头第一次左转第二次左转色彩度灰像素占比首帧 PSNR
原版 H3 照片 + 白膜,种子 420.3750.630.390.2035.60.0819.3
原版 H3 照片 + 白膜,种子 70.2890.630.000.3933.10.3018.5
原版 H3 照片 + 白膜,种子 1230.5620.630.380.62———
原版 H3 照片 + 白膜,种子 20250.3640.610.200.30———
Fun-ControlNet 白膜线稿0.5970.680.370.6633.40.2511.1
Fun-ControlNet 照片首帧 + 白膜线稿0.6230.670.490.6736.70.1029.0
Fun-ControlNet 照片首帧 + 白膜深度0.5990.640.470.6342.40.0728.6
参照:Astra 彩色渲染0.7040.710.650.7420.70.54—
参照:白膜本身————3.11.00—
第二个场景:白膜线稿、原版 H3 照片 + 白膜、Fun-ControlNet 线稿、照片首帧 + 线稿、照片首帧 + 深度、Astra 彩色渲染。
第二个场景,照片首帧 + 线稿的 3 个种子(43 / 7 / 123)。
第二个场景的渲染:Astra 材质、白膜、均色白膜、深度、法向、线稿。
白膜参考视频、原版 H3 照片 + 白膜(两个种子)、Astra 彩色渲染。

八、再加 8 个场景

再换 8 张参考图:儿童房是真实照片,其余 7 张(厨房、带猫的书房、地中海餐厅、和室、Loft 客厅、家庭办公室、咖啡馆)是图像模型生成的写实室内图。每个场景都走同一套流程:Astra 建模 3 轮,沿同一条摇镜头轨迹渲染白膜和线稿,再用两种配方生成。一种是原版 H3 的照片 + 白膜(种子 42、7),一种是 Fun-ControlNet 的照片首帧 + 线稿(种子 43、7、123,25 步)。物体对齐以 Blender 物体编号为真值,编号通道关掉抖动后重渲;「上限」是 Astra 彩色渲染自己的得分。

8 张新参考图
8 张新参考图(已裁成生成用的 1344×768 构图)。

物体对齐:每个场景挑 6–10 类大件(家具、窗、柜、灯、地毯、植物;不含墙地顶),SAM 3 在生成画面里分割,与同一相机下 Blender 物体编号的并集比 IoU,取 12 个采样帧。两套白膜(Astra、Claude)用同一组类别,关键词逐个核对过命中的物体。

方法(8 个场景平均)物体对齐起始段第一次左转第二次左转首帧 PSNR / SSIM色彩度灰像素
原版 H3 照片 + 白膜,种子 420.5820.680.660.4218.3 / 0.5133.10.15
原版 H3 照片 + 白膜,种子 70.6440.690.670.5518.2 / 0.5232.80.16
Fun-ControlNet 照片首帧 + 线稿,种子 430.7480.750.780.6826.2 / 0.8132.00.17
Fun-ControlNet,种子 70.7570.770.810.6526.2 / 0.8131.10.17
Fun-ControlNet,种子 1230.7540.780.790.6526.2 / 0.8132.00.16
参照:Astra 彩色渲染0.7570.830.750.6513.7 / 0.4724.10.18
场景原版 H3(种子 42 / 7)Fun-ControlNet(种子 43 / 7 / 123)参照:Astra 渲染Astra 建模 IoU
儿童房(真实照片)0.702 / 0.7260.707 / 0.781 / 0.7810.552*0.574
厨房0.458 / 0.5340.770 / 0.773 / 0.7720.8850.652
书房(带猫)0.536 / 0.6380.606 / 0.609 / 0.6690.6850.656
地中海餐厅0.548 / 0.5540.827 / 0.801 / 0.8090.7740.706
和室0.640 / 0.7770.894 / 0.867 / 0.8560.8510.634
Loft 客厅0.549 / 0.6970.777 / 0.738 / 0.7360.8400.793
家庭办公室0.660 / 0.7070.816 / 0.821 / 0.8170.8210.648
咖啡馆0.559 / 0.5160.590 / 0.668 / 0.5890.651*0.619
儿童房(真实照片)
厨房
书房(带猫)
地中海餐厅
和室
Loft 客厅
家庭办公室
咖啡馆

每个视频四格:白膜线稿(控制)、原版 H3 照片 + 白膜、Fun-ControlNet 照片首帧 + 线稿、Astra 彩色渲染。

换成平移镜头轨迹

同样 8 个场景、同样的照片首帧 + 线稿(种子 43,25 步),镜头换成卧室用过的平移回访轨迹:第二段动作时边左转约 50°,边向左平移 0.66 m、向前 0.22 m。这条轨迹是按卧室设计的,换到这些房间后,平移结束时相机离左墙很近:儿童房和厨房只看得到整面墙(没有可评的物体),Loft 和咖啡馆只剩一两类物体。

场景物体对齐:旋转 → 平移平移后的停留段:旋转 → 平移首帧 PSNR(平移)
儿童房0.707 → 0.717—(只有墙)28.2
厨房0.770 → 0.742—(只有墙)27.8
书房0.606 → 0.4440.414 → 0.16325.2
地中海餐厅0.827 → 0.7190.856 → 0.59724.2
和室0.894 → 0.8900.909 → 0.88628.0
Loft 客厅0.777 → 0.7010.708 → 0.799(只剩盆栽)25.5
家庭办公室0.816 → 0.8330.840 → 0.85826.6
咖啡馆0.590 → 0.5090.351 → 0.026(真值只有约 1% 面积)24.5
平均0.748 → 0.6940.680 → 0.555(6 个场景)26.3(旋转 26.2)
8 个场景的平移轨迹结果(Fun-ControlNet 照片首帧 + 线稿)。第 188–207 帧的横幅写的是「换了朝向」,在这条轨迹上实际是位置和朝向都变了。

九、同一白膜,换参考图

卧室的几何和镜头不变(同一份白膜和线稿),只换首帧照片:一张是之前在 Blender 里改材质的版本(浅暖灰墙、绿色条纹被子、蜂蜜色地板),一张是图像模型换的风格(陶土色墙、胡桃木地板、芥末黄被子;生成图的取景和原图不同,用 SIFT 特征匹配做相似变换对齐回原构图,中位误差 1.3 像素)。看外观能不能跟着参考图走,几何和镜头是否不受影响。

首帧照片方法整体重合度第一次左转第二次左转首帧 PSNR / SSIM色彩度有机器人
原照片Fun-ControlNet 首帧 + 线稿0.8720.900.7229.8 / 0.93约 980%
Blender 改材质Fun-ControlNet 首帧 + 线稿0.8020.680.9531.9 / 0.9649.280%
图像模型换风格Fun-ControlNet 首帧 + 线稿0.8830.920.9229.3 / 0.9048.280%
原照片原版 H3 照片 + 白膜0.4610.830.3818.0 / —约 980%
Blender 改材质原版 H3 照片 + 白膜0.2980.80—— / 0.83——
图像模型换风格原版 H3 照片 + 白膜0.4940.880.5218.9 / 0.7152.083%
同一份白膜线稿(左上),首帧分别是原照片、Blender 改材质、图像模型换风格(Fun-ControlNet),以及换风格首帧 + 白膜(原版 H3)和白膜本身。

十、顺带:Claude Opus 5.5、GPT-6.1 Sol 和 GPT-6 Astra 谁建模更好

同样的 60° 标定输入、系统提示、反馈和评分,从零开始建 Blender 场景。

模型物体 IoU(逐轮)深度误差每轮耗时费用脚本长度
GPT-6 Astra,4 轮0.717 → 0.755 → 0.759 → 0.7943.4–3.5%285–362 s$3.82688–1102 行
Claude Opus 5.5,4 轮报错 → 0.365 → 0.456 → 0.5454.4–5.5%约 31 s$0.50123–139 行
Claude 接着跑满 12 轮最好 0.6743.4–4.7%约 31 s约 $1.55约 130 行
Astra 最好一轮
Astra 第 4 轮:被子褶皱和条纹、枕头、床单、带抽屉的床头柜、壁灯、门窗。
Claude 最好一轮
Claude 最好一轮:被子是一整块光滑的条纹曲面,床垫是白色方块。

Astra 第 1 轮就超过了 Claude 12 轮的最好成绩;差距主要在细节量。Claude 快约 10 倍、便宜约 7 倍,适合快速迭代粗模。

再比 8 个场景:Astra 3 轮,Claude 6 轮

第八节的 8 个新场景,两个模型用同样的输入和反馈各建一遍。IoU 和深度误差取评分选出的那一轮(之后渲染白膜用的就是这一轮),费用和 LLM 时间是全部轮次的合计。

场景Astra IoUClaude IoUAstra 深度误差Claude 深度误差Astra 费用Claude 费用脚本行数(A / C)
儿童房0.5740.38832.8%2.7%$3.43$1.131100 / 151
厨房0.6520.4091.8%2.9%$3.76$1.48979 / 202
书房0.6560.4993.3%5.3%$4.89$1.281232 / 217
餐厅0.7060.4834.4%6.3%$2.80$1.011123 / 170
和室0.6340.4761.2%4.9%$3.80$0.901206 / 102
Loft 客厅0.7930.6561.3%1.6%$3.69$1.081241 / 155
家庭办公室0.6480.5331.6%3.5%$4.95$1.311082 / 178
咖啡馆0.6190.42816.7%3.5%$4.47$1.431082 / 196
平均 / 合计0.6600.484中位 2.6%中位 3.5%$31.79$9.621131 / 171

Claude 每个场景都低于 Astra,轮数翻倍也没追上;第 1 轮均值 0.33 对 0.60,第 3 轮以后基本不再提高。费用约为 Astra 的三分之一,LLM 时间约四分之一(每次调用约 54 秒对约 6 分钟)。深度误差两者相当,Claude 还避开了 Astra 在儿童房和咖啡馆上的尺度错误;悬空和静置不稳两边都有。

厨房:参考图、Astra、Claude Loft:参考图、Astra、Claude 书房:参考图、Astra、Claude 咖啡馆:参考图、Astra、Claude
每行从左到右:参考图、Astra 选中轮的渲染、Claude 选中轮的渲染(参考相机视角)。

白膜换成 Claude 建的,视频会差多少

8 个场景各用 Claude 的白膜再生成一遍(同样的照片和提示词),按 Astra 白膜的物体编号评分(更接近真实房间);括号里是按 Claude 自己白膜评分的结果(模型有没有跟着控制走)。

方法(8 个场景平均)Astra 白膜Claude 白膜变化
Fun-ControlNet 照片首帧 + 线稿(种子 43)0.7480.485(0.642)−0.26,8 个场景全部下降
原版 H3 照片 + 白膜(种子 42)0.5820.503(0.442)−0.08,5 个场景下降
厨房和 Loft:Astra 白膜 / Claude 白膜(左)及对应的 Fun-ControlNet 结果(右)。

再比 GPT-6.1 Sol:同样 3 轮,再续到 6 轮

同样的输入、系统提示、反馈和评分,GPT-6.1 Sol 在 10 个场景上各从零建 3 轮:上面 8 个新场景,加上彩色客厅和机器人卧室(卧室的 Astra 取同一次从零运行的前 3 轮)。之后 8 个新场景接着跑第 4–6 轮。IoU 和深度误差取评分选出的那一轮,费用是全部轮次的合计。

场景Astra 3 轮Sol 3 轮Sol 6 轮深度误差(A / S)Astra 费用Sol 费用(3 / 6 轮)脚本行数(A / S)
儿童房0.5740.4590.60132.8% / 29.5%$3.43$1.09 / $2.271100 / 979
厨房0.6520.6590.6551.8% / 2.8%$3.76$1.22 / $2.36979 / 1127
书房0.6560.6250.6263.3% / 3.5%$4.89$1.04 / $2.061232 / 1222
餐厅0.7060.6670.6864.4% / 3.2%$2.80$0.98 / $1.901123 / 1014
和室0.6340.6700.6841.2% / 1.4%$3.80$0.84 / $1.611206 / 1008
Loft 客厅0.7930.745*0.7911.3% / 1.8%$3.69$0.94 / $2.121241 / 982
家庭办公室0.6480.595*0.6841.6% / 1.6%$4.95$0.97 / $2.591082 / 1151
咖啡馆0.6190.561*0.63016.7% / 13.6%$4.47$0.94 / $1.991082 / 1145
8 个新场景平均 / 合计0.6600.6230.670中位 2.6% / 3.0%$31.80$8.02 / $16.901131 / 1078
彩色客厅0.5240.527—2.4% / 2.3%$4.34$1.041351 / 1088
机器人卧室0.7590.742*—3.5% / 3.3%$2.50$0.61776 / 711
10 个场景平均 / 合计0.6570.625—中位 2.9% / 3.0%$38.64$9.671117 / 1043

* 第 1 轮脚本语法错误,这个场景实际只有 2 轮成功(见下)。

逐轮物体 IoU 与累计费用
左:8 个新场景每一轮的平均物体 IoU(Sol 第 4–6 轮接着第 3 轮跑)。右:评分选中那一轮的 IoU 对每个场景累计花费;同样的钱,Sol 的曲线更高。
厨房:参考图、Astra、Sol 和室:参考图、Astra、Sol Loft:参考图、Astra、Sol 儿童房:参考图、Astra、Sol
每行从左到右:参考图、Astra 选中轮、Sol 选中轮(参考相机视角,各 3 轮)。儿童房 Sol 的曝光和墙色更接近照片,但毛绒玩具和凳子的轮廓不准,IoU 反而更低。
儿童房:Astra 3 轮、Sol 3 轮、Sol 6 轮 家庭办公室:Astra 3 轮、Sol 3 轮、Sol 6 轮
多跑 3 轮提高最多的两个场景:参考图、Astra 3 轮、Sol 3 轮、Sol 6 轮。
Loft:检查视角和俯视图
Loft 的检查视角和俯视图(上:Astra,下:Sol)。布局一致,但 Sol 的窗墙上方多出两块砖墙片,房间外还有一根孤立的条状物。

结论:要进视频的最终白膜仍用 Astra 3 轮(质量最高、不丢轮、耗时稳定);场景多、要省钱时用 Sol 6 轮,平均质量相同、费用约一半,但最好先加一道语法检查,免得第 1 轮白费。

十一、对照相关论文的标准指标

前面的物体对齐是我们自己的指标。这一节按相关论文的评估协议再算一遍,71 个生成视频全部参与,不需要真值视频:

卧室(种子间平均)旋转误差 ↓转到指令角的比例回访 LPIPS ↓回访对照片 PSNR ↑VBench 成像 ↑深度误差 ↓线稿 F1 ↑
原版 H3 照片 + 白膜(4 个种子)7.25° ± 2.980.830.28615.8567.90.1240.235
Fun-ControlNet 照片首帧 + 线稿(4 个种子)0.63° ± 0.070.980.07115.4070.90.0860.542
参照:白膜渲染本身0.77°1.08———0.0460.306
8 个新场景平均旋转误差 ↓回访 LPIPS ↓回访对照片 PSNR ↑光流往返误差 ↓VBench 主体 / 美学 / 成像深度误差 ↓线稿 F1 ↑
原版 H3 照片 + 白膜6.01°0.19617.630.170.916 / 0.544 / 76.20.1760.412
Fun-ControlNet 照片首帧 + 线稿1.24°0.09014.040.470.887 / 0.522 / 76.50.1290.656

十二、空洞机制:照片没看见的白膜不进条件

参考照片只覆盖自己的视野。镜头转出去以后看到的墙和家具,是 Astra 在照片外「编」出来的,不可靠;但原方案把整段白膜都当硬条件。这一节把没观测到的像素标成洞,洞里不喂控制,让视频模型自己生成,再用新视角反哺 Astra 扩模。

文献做法(training-free 能直接用的)

洞怎么定义

某帧某像素显示的白膜表面点,若投影到参考相机(第 0 帧)在画面内,且通过深度测试(|z_ref − z₀| < max(3 cm, 3%)),就算观测到;否则是洞。只旋转轨迹下,洞 ≈ 转出照片视野的部分。第二次左转时洞占画面的 79–94%。

三种处理,最好的是「清零 + inpaint」

变体做法洞内边缘 F ↓观测区对照片 PSNR ↑结论
全控制(原方案)整段线稿硬控0.41–0.6313–17 dB洞里照抄 Astra 编的布局
涂黑洞内线稿置黑0.05–0.3413–18 dB模型把「没线」当平墙,仍部分照抄
零控制洞内控制 token 清零0.10–0.2113–18 dB洞内基本不照抄;外观仍漂
零控制 + inpaint清零 + mask=洞 + 照片重投影0.05–0.1022–28 dB洞内自由生成,观测区被照片锁住

卧室 / 厨房 / 餐厅,seed 43,25 步,243 帧。餐厅地毯最直观:全控制洞内 IoU 0.93,零控制 0.38,inpaint 0.00(那里画了户外露台)。代价是两次访问同一片洞时内容不一定一致(复访 PSNR 从 27–32 降到 19–28 dB)——这正是闭环要解决的。

三行 = 卧室 / 厨房 / 餐厅;四列 = 线稿+洞(紫) / 全控制 / 洞内零控制 / 零控制+照片 inpaint。第 196 帧左转 55°、俯 12°,洞占 79–94%。

生成 → Astra 扩模闭环

餐厅用「洞内零控制」视频,取洞最大的停留帧(第 54、196 帧)交给 Astra。第 1 轮($1.97)把照片外的左墙改成两个拱形露台开口,加户外藤编沙发、茶几、橄榄树;洞内 SAM 对 SAM IoU 从 0.02 → 0.47。第 2 轮($1.25)主要改名和细修(0.42)。参考视角实例 IoU 三轮都是 0.706,说明只改了照片外的部分。两轮共 $3.22。

生成帧与 Astra 扩模前后对比
第 54 / 196 帧:生成帧 | 原模型 | 第 1 轮 | 第 2 轮(黄线 = 照片视野边界)。

第二遍:用扩展后的模型重画

Astra 把第一遍视频在洞里「发明」的东西建进模型以后,原来的洞就有了几何。第二遍用新模型重渲的线稿做全控制,再加照片 inpaint(mask 仍是照片的洞),照片区域照抄、洞里跟着新网格画。餐厅这一轮用的是早期的「洞内零控制」视频(没加 inpaint)。

餐厅洞内复访 PSNR洞内与第一遍一致观测区对照片 PSNR洞内边缘 F(对新网格)
全控制(旧网格)31.611.013.20.17
第一遍:洞内零控制(闭环的输入)19.1—13.20.39
第二遍:新线稿全控制26.215.913.30.64
第二遍:新线稿 + 照片 inpaint24.115.122.30.60

PSNR 单位 dB。「洞内与第一遍一致」:照片的洞里、两段停留每 4 帧,与第一遍视频的 PSNR;两次互相独立的第一遍之间只有 10.5–11.6 dB,Astra 扩展后模型自己的渲染是 13.0 dB。旧网格在那里只是一面平墙,所以它的复访最容易一致。

餐厅:第一遍(洞里自由生成)| 第二遍(扩展后模型的线稿 + 照片 inpaint)| Astra 模型扩展前(照片外是一面平墙)| 扩展后(拱形柱、露台沙发、茶几、橄榄树)。

自动化闭环:一条命令跑完整个流程

整条流程做成了一条可中断重跑的命令:洞 mask → 第一遍(洞内零控制 + 照片 inpaint)→ 每段停留里洞最大的一帧交给 Astra(这条轨迹选到第 54、198 帧)→ 每轮按不看名字的 SAM 对 SAM 洞内 IoU 打分,参考视角实例 IoU 掉超过 0.02、或出现新的悬空 / 静置测试里倒下的物体,这一轮就不能选 → 用选中的模型重渲线稿 → 第二遍(新线稿全控制 + 照片 inpaint;照片和关键帧都没见过、超过画面 5% 的残余洞里仍清零控制)→ 评测。先在卧室、厨房、书房、和室、Loft 五个场景上并行跑通(每个 46–66 分钟,10 轮 Astra、$13.30),之后扩到全部 10 个场景。

场景Astra 轮数 / 费用选中洞内 SAM 对 SAM IoU参考视角实例 IoU
卧室2 轮 / $3.28第 1 轮0.32 → 0.880.861 → 0.861
厨房2 轮 / $2.05第 2 轮0.00 → 0.620.651 → 0.655
书房2 轮(第 1 轮被门控拒绝)/ $2.95第 2 轮0.10 → 0.690.656 → 0.657
和室2 轮 / $3.10第 2 轮0.01 → 0.140.633 → 0.647
Loft2 轮 / $1.93第 2 轮0.47 → 0.700.794 → 0.794
场景洞内复访 PSNR
第一遍 → 第二遍
洞内与第一遍一致
(独立生成参照)
观测区对照片 PSNR
第一遍 / 第二遍
洞内边缘 F(对新网格)
第一遍 → 第二遍
卧室21.0 → 28.219.1(11.9)28.5 / 28.50.19 → 0.48
厨房27.9 → 28.519.1(17.0)26.9 / 26.80.06 → 0.46
书房20.4 → 26.315.6(11.2)24.4 / 24.40.37 → 0.63
和室22.8 → 30.820.7(17.3)24.6 / 24.50.52 → 0.64
Loft18.3 → 19.416.5(16.0)24.0 / 23.90.70 → 0.84

PSNR 单位 dB,每个场景 1 个种子。「独立生成参照」= 旧网格全控制的视频(与第一遍互不相干)在同样的帧和区域与第一遍的 PSNR。

五个场景第 198 帧:生成帧与 Astra 各轮模型
第 198 帧(左转 55°、俯 12°):生成帧 | Astra 第 0 轮(原模型)| 第 1 轮 | 第 2 轮,绿框 = 选中,黄线 = 照片视野边界。书房第 1 轮被拒(参考图里的猫在静置测试里倒下),第 2 轮改正。
厨房:第一遍在照片外画了挂画、墙角和侧门,Astra 建进模型,第二遍照着画。右下的白色方块是第一遍的瑕疵,也被建了进去。
书房:原模型在照片外编了一面书墙;第一遍画的是绿墙、窗和地毯,扩展后的模型和第二遍都换成了它。
和室:木柱、推拉门和榻榻米分格建进了模型;这些不在概念表里,所以 IoU 只到 0.14,但第二遍的复访一致性提升最多(+8 dB)。
Loft:照片外加了一面砖墙。Astra 把砖逐块建出来,第二遍照线稿画出 Astra 尺寸的砖,布局对、纹理和第一遍不同,所以像素一致性提升小。

十三、和外部 baseline 比:WorldPlay、Voyager

论文需要外部对比对象。选了两个开源、能单图 + 相机轨迹生成、主打「长时一致」的方法,在同一测试集上实跑,用同一套指标打分:

10 个场景均值(单 seed)旋转误差 ° ↓到达率 56°回访 LPIPS ↓照片外回访 PSNR ↑对照片 PSNR ↑MEt3R ↓照片外边缘密度VBench 美学 ↑
WorldPlay18.820.240.51510.4512.100.1280.078*0.598
Voyager0.870.980.33313.7115.160.2340.0500.502
原版 H3 ref2va8.280.910.19618.9917.710.0720.0400.542
我们:白膜线稿全控制1.060.990.05527.4814.520.0180.0410.530
我们:+ 洞内清零 + 照片 inpaint3.200.850.05819.8926.550.0180.0710.563
我们:+ Astra 扩模闭环2.900.910.05726.8526.540.0170.0770.561
我们:洞内整张外壳线稿 + 记忆缓存0.910.970.05438.0526.370.0170.0290.536
我们:洞内只给外壳边缘、其余清零1.041.000.05724.1226.500.0170.0730.559
我们(主行):外壳边缘 + 记忆缓存0.680.980.05431.9126.410.0170.0710.552
 主行 3 个 seed 均值 ± seed 间标准差0.92 ± 0.490.960.05431.6 ± 0.626.6 ± 0.20.0170.075—

回访 LPIPS:回到照片视角的帧对首访帧。照片外回访:第二次左转帧经单应性对齐到第一次左转帧,只算两次都可见、照片看不到的像素。MEt3R:无需位姿的 3D 一致性(ROCm 移植版,与官方实现差 ≤ 0.0014)。边缘密度:第二次左转停留帧里照片看不到的区域的 Canny 边缘占比,越高内容越多。* WorldPlay 没转过去,那块区域里多是照片内容,不可比。

按轨迹帧对齐的并排对比(厨房、卧室):我们(主行:外壳边缘 + 记忆缓存)| WorldPlay | Voyager | 原版 H3。截图是第 196 帧(左转 55°、俯 12°):WorldPlay 还停在中岛附近,Voyager 的桌椅几何扭曲。

十四、方法与局限