INPUT
从真实房间中
指定一个目标家具
房间以灰色代理显示,沙发保留真实轮廓。后续所有计算都围绕同一个世界坐标目标进行。
GEOMETRY PROXY
先把场景分成
三类几何角色
目标家具使用旋转 OBB;放在目标上的台灯、电脑等归为附属物;墙壁和其它家具归为环境障碍 AABB。三类都保留包围盒,但后续遮挡评分采用不同语义。
CAPTURE REGION
两层采样,
分别约束两件事
青绿色点从目标家具表面采样,要求家具主体完整入画并保持可见;蓝色点来自外扩捕获盒,覆盖家具周围和上方,为未知人体姿态预留画面余量。中央黑点是捕获盒中心,用作统一瞄准点,不是额外的人体预测。
POSITION REJECTION
先删掉相机本身
放不下的位置
红色体积表示相机不能进入的家具与结构占据空间;细线边界外也不允许放置。附属物同样参与位置碰撞,但不会在后续被错误地当成“外部遮挡家具”。
ONE DIRECTION / RADIAL INTERVAL
一条方向上,
先解近、远边界
太近时家具超出画面,太远时家具在画面里过小;两条边界之间,才是这个方向允许放相机的距离区间。
3D FRAMING SHELL
把所有方向的区间
扫成三维壳层
半透明体积是方向—距离区间共同形成的候选活动域;它已经与房间边界、相机高度和构图约束取过交集,所以只剩局部扇形体。细线是程序真正查询的离散截面。
AZIMUTH → ELEVATION → RADIUS
这些试探机位
从哪里来
先均匀扫 24 个水平角;每个水平角内试 5 个初始仰角,并在可行边界附近细分。每个方向只测试近—远壳层的端点和中点;遇到可行性、可见率或画面大小明显变化才继续二分,最后先保留该方向构图最好和距离最近的合法点。后两页会把其中的遮挡判断单独拆开说明。
OCCLUSION / TWO-VIEW EXAMPLE
拿两台试探机位
举一个例子
这里不是先在两台之间做选择,而是用一台被挡、一台通畅的机位解释同一套判断:红框是射线首先撞到的前景家具,红线在抵达捕获区域前被截断;黑线则能直接到达目标。
VISIBILITY / ALL QUERIES
把同一套判断用于
所有试探机位
画面为避免糊成一团,只抽样展示 14 个机位、每台 12 条射线;程序实际会对每个试探位置检查 512 个家具表面点和 256 个捕获区点。目标家具仍要求高可见率;附属物只计入轻量遮挡惩罚,不能因为台灯或电脑挡住局部就否定整台相机。
CANDIDATE POOL
留下 104 个
合法候选机位
每个方向先保留构图得分最高点与距离最近的合法点;局部微调、位置去重后,再把可行水平角分桶轮流保留,每个桶最多 6 个。这样既保留质量,也不会让同一片候选区占满候选池。
FINAL SET + OPEN TOUR
选出 8 台互补机位,
再单独规划开放运镜
这是 test5 历史案例:5° 水平方位、6° 观察方向和 0.35 m 空间距离的旧规则。当前代码已采用“方位或俯仰”去重和质量边界内的连贯排序;下方 CURRENT TEST2 展示实际更新结果。
EXAMPLE TWO / INPUT
同一个房间,
换成中间的小桌
把目标从沙发切换为房间中央的小桌。程序同时检测桌面上的水杯,并将它保留为目标家具的附属上下文。
THREE ROLES / BOUNDING BOX
桌子也先分成
三类包围盒
黑色是小桌的目标 OBB;琥珀色是程序检测到的桌面水杯 AABB;灰色是房间里的其它障碍。三类都参与相机位置碰撞,但只有环境障碍会触发强外部遮挡惩罚。
SUPPORT-SURFACE SAMPLING
先找自由桌面,
再向上建立采样柱
程序先在桌面生成 70 个锚点;与水杯及其它几何发生碰撞的 9 个点标为琥珀色并剔除,保留 61 个青绿色自由锚点。随后在每个自由锚点上方 0.15、0.50、0.90、1.30 m 取样,共得到 244 个蓝色交互采样点。
POSITION REJECTION
先删掉相机本身
放不下的位置
其它家具和墙体对应的相机禁入区域标红;桌面水杯仍保持琥珀色附属物身份。它同样不能与相机碰撞,但不会与外部环境障碍混成同一种语义。
ONE DIRECTION / RADIAL INTERVAL
一条方向上,
先确定距离范围
沿一个查询方向求近边界和远边界:太近时小桌与上方交互空间无法完整入画,太远时目标过小,只有中间区间继续参与位置搜索。
3D FRAMING SHELL
各方向的距离区间
组成候选壳层
蓝色体积由各方向的近—远距离区间共同组成,并不是规则球面;它已经受到房间边界、相机高度、构图和碰撞约束,红色线段是壳层内被障碍占用的部分。
DIRECTION SEARCH
24 个初始水平角,
再做自适应细分
这一案例共执行 756 次方向查询与 3333 次位置查询。只有在合法性边界或质量变化明显的区域继续细分,避免穷举整个三维空间。
SUPPORT-AWARE VISIBILITY
三类几何,
三种判断方式
目标小桌必须保持高可见率;普通环境障碍截断观察射线时使用强惩罚;水杯属于目标附属物,只对局部遮挡做折扣计分,因此不会因为杯子挡住少量点就淘汰整台相机。
EXAMPLE TWO / CANDIDATE POOL
3333 次位置查询,
留下 128 个候选
所有候选均通过位置、构图和支持关系感知的可见性检查;候选池还会限制同一方向的占用,避免局部高分区域挤满全部名额。
ARCHIVE / TEST9
历史桌面案例,
保留方法脉络
这组 test9 结果解释附属物处理,并非本次新算法验证。历史路线图是示意插值;下方只播放 test2 的实际输出帧轨迹。
CURRENT / VERIFIED TEST2
回到当前代码,
从 128 个候选开始
复用同一房间与沙发,输入 8 个机位预算。先搜索位置和角度,再选关键机位,随后才处理连接和访问顺序。这次只规划与渲染,没有人体重建。
COMPLEMENTARY KEY VIEWS
水平拉开,
或者高低互补
两台机位满足 15° 方位差或 15° 俯仰差即可通过两轴角度去重;仍需满足独立的方向和距离约束。集合选择综合构图、覆盖与最弱相机对差异,并做有界局部替换。
ORDER AFTER SELECTION
先确定机位,
再减少来回绕路
最近未访问机位提供候选顺序,但不强制逐步取欧氏最近。比较安全连接形成的完整开放路线,在画面质量容差内减少长度、重复经过与方位折返。
SMOOTH → VALIDATE → CHOOSE
平滑以后,
再检查输出帧
过强平滑可能切进障碍。尝试多个强度后,仅从通过碰撞与视野检查的轨迹中选择。本次采用 0.25;播放的是生产导出的相机位置和朝向。
ONE OPEN SHOT
八个机位,
一段连续开放镜头
编号表示实际访问顺序。相机经过各机位,不在中间停顿;各帧朝向来自生产 R 矩阵,对应固定目标 look-at。首尾不强制闭环。
ACTUAL OUTPUT / NO RECONSTRUCTION
看真实视频,
再检查八张图
视频先渲染 336 张 PNG,再由 FFmpeg 合成 MP4。8 个机位到达帧的 K/R/T 已核对;可用比例和质量分数属于几何采样代理,请结合实际画面判断。