← Blender 场景页编辑与动态建模页主页

深度和尺度准不准?问题出在相机视场角

检查 Blender 场景的米制尺度和三维形状,比较 DA3 与 MoGe-2,并用 H3 视频本身标定相机

2026-10-07 · 场景 robot_bedroom · H3 视频:种子 42,换朝向回访轨迹

约 60°H3 视频实际相当的水平视场角(相机条件里的名义值是 89.4°)
3–5%现用尺度和 MoGe-2 的差别(两者用同一个视场角时)
1.0 → 1.5 m重建后床的长度(旧场景的床比宽还短)
0.22 → 0.46镜头转动后,场景家具和 H3 画面的重合度(17 帧平均)

结论速览

一、现在的尺度准不准

在第 0 帧上对比五种深度。前四种都用 H3 的名义内参(89.4°)把深度反投影成三维点;地面用 RANSAC 拟合,高度都是相对拟合出的地面算的。

深度来源尺度(相对 MoGe-2)相机离地机器人顶部门顶床头柜顶后墙距离
DA3 原始2.062.83 m3.81 / 3.90 m4.48 m1.58 m5.16 m
DA3 焦距修正(乘以真实焦距 / DA3 估计焦距)0.891.22 m1.64 / 1.68 m1.93 m0.68 m2.23 m
DA3 身高先验(之前建模用的)0.961.31 m1.76 / 1.81 m2.07 m0.73 m2.39 m
MoGe-2,给定 89.4°1.000.65 m1.57 / 1.69 m2.11 m0.74 m2.60 m
MoGe-2,自己估视场角(55°)1.682.23 m3.02 / 3.13 m3.65 m1.29 m4.25 m
深度图对比
同一色标(0–5 m)下的深度图:之前建模用的 DA3、MoGe-2(89.4°)、之前的 Blender 场景,以及之前场景比 MoGe-2 远(粉)或近(青)的位置。

二、视场角才是关键

证据 1:两个模型自己估的视场角

DA3 估 46.2°,MoGe-2 估 55.4°,都远小于名义上的 89.4°。

证据 2:房间几何在哪个视场角下最合理

把视场角从 45° 扫到 89.4°:MoGe-2 按给定的视场角重新出深度,DA3 的深度不变、按给定的视场角反投影。每档都按机器人身高 1.75 m 统一尺度,地面和后墙用 SAM 3 分割后拟合平面。真实房间里,地面和后墙应该垂直。

最合理 80 84 88 90 45 50 55 60 65 70 80 89.4 假定的水平视场角(°)
DA3MoGe-2

DA3 在 45–50° 时最接近 90°,MoGe-2 在 60° 时是 89.8°;到了 89.4°,两者都只剩 79–83°。在 MoGe-2 的结果里,相机离地高度在 55–60° 时是 1.1–1.24 m,到 89.4° 时只剩 0.67 m。

证据 3:用视频自己标定

纯旋转时,画面怎么变化只取决于焦距和转角,和深度无关。在 H3 视频里挑了 9 对相机真正在转动的帧,在静态区域做特征匹配,对每个候选焦距计算按指令转角重投影的误差。

帧对指令转角最优焦距对应视场角最优焦距下的误差名义焦距 679 px(89.4°)下的误差
20 → 28(左转)14.7°1210 px58.1°3.5 px115 px
24 → 32(左转)17.3°1170 px59.7°3.2 px138 px
28 → 36(左转)16.4°1100 px62.8°3.6 px119 px
68 → 76(右转回)14.7°1100 px62.8°3.1 px106 px
76 → 84(右转回)16.4°1140 px61.0°3.1 px134 px
156 → 164(左转)20.2°1230 px57.3°2.5 px182 px
180 → 188(下俯)11.5°930 px71.7°2.3 px52 px

左右转的帧对给出的焦距在 1100–1230 px 之间,对应 57–63°,我取 60°(焦距 1164 px)。如果转角也放开自由拟合,最优焦距约 1400 px(51°),拟合出的转角约为指令转角的 80%。两种拟合都远离 89.4°。结论是:H3 的相机条件用的是固定内参,但它生成的画面运动跟随的是输入图本身的透视。慢速环抬升、资产证据渲染和之前的 Blender 场景,用的都是 89.4°。

三、按标定后的相机重建

项目旧:89.4° + DA3 + 身高先验新:60° + MoGe-2 米制
相机离地 / 俯仰1.29 m / −9.5°1.06 m / −3.0°
测得的后墙距离2.53 m3.91 m
建出的床(长 × 宽)1.00 × 1.49 m1.51 × 1.32 m
建出的床头柜高0.75 m0.70 m
机器人身高1.75 m(先验)1.58 / 1.64 m(MoGe-2 测得)
物体 IoU(参考视角)0.7910.861
物理静置测试全部稳定全部稳定

新场景从旧场景的脚本出发,Astra 按新的测量表又改了 3 轮($3.80)。床仍比标准床(约 2.0 m 长)短一些,可能是视场角还偏宽(自由拟合给出的是 51°),也可能是生成图本身的透视并不完全符合物理。机器人身高 1.6 m 左右,在人形机器人常见的 1.5–1.8 m 范围内;绝对尺度还有约 10% 的不确定性,要靠已知尺寸的物体才能定死。

新场景参考视角对比
新场景在参考视角:左为参考帧,中为 Blender 渲染,右为轮廓叠加(绿 = SAM 3,红 = 搭出的物体)。
旧场景房间内视角
旧场景(89.4°):房间浅,床又宽又短。
新场景房间内视角
新场景(60°):房间更深,床是正常的长条形。
旧场景俯视
旧场景俯视。
新场景俯视
新场景俯视。两张各自按房间大小缩放,比较的是比例。

四、镜头转动后能不能对上 H3

把两个场景分别用各自的内参,渲染到 H3 视频中 17 帧的指令相机位姿上,和那一帧里 SAM 3 检测到的床、床头柜、窗、门、床头板比较重合度(机器人遮挡的像素不算)。

第一次访问 第二次访问 0.2 0.4 0.6 0.8 1 0 40 80 120 160 200 帧
旧场景:89.4° 相机新场景:标定后的 60° 相机

在参考视角(第 0 帧),两个场景都对得上(0.88 / 0.89)。镜头一转,旧场景就迅速错开,左转 40° 时只剩 0.06–0.08;新场景保持在 0.45–0.65。第二次访问时两者都偏低,因为 H3 在那里按提示词画了场景里没有的东西,镜头前还有机器人。

转动后的轮廓对比
转动后的轮廓:绿色是 H3 画面里 SAM 3 检测到的家具,红色是场景投影出来的家具。左栏是旧场景,右栏是新场景,分别为帧 28、36、76、164、172。点击看大图。
沿同一条相机轨迹:H3 原视频、旧场景(89.4°)、新场景(60°)。

五、建议

  1. 每段视频先标定视场角。拿一段相机在转动的帧做特征匹配,几秒就能算出来;不同的输入图,透视不同,有效视场角也会不同。
  2. 米制深度用 MoGe-2,并给它标定后的视场角;再用常见尺寸(机器人、门、床、床头柜)交叉检查尺度。DA3 在焦距给对之后逐帧尺度稳定(同一视角的两帧之间相差 0.3–1.3%,MoGe-2 是 0.4–2.8%),留给动态内容的逐帧抬升。
  3. 之前用 89.4° 的模块都要按新相机重跑:慢速环的抬升、资产证据的渲染、Blender 证据试点。主页上“换朝向回访”的结果,重跑后可能还会变好。
  4. 绝对尺度还剩约 10% 的不确定性。对纯旋转的轨迹,这不影响渲染出来的画面;对物理仿真和带平移的轨迹有影响,可以用门高、床宽这类常见尺寸再收紧。