微信扫一扫,关注公众号

  • 科技行者

  • 算力行者

见证连接与计算的「力量」

首页 SceneMosaic:给3D场景装上"进化"能力,8个多小时的活12分钟干完

SceneMosaic:给3D场景装上"进化"能力,8个多小时的活12分钟干完

2026-10-13 08:12
分享至:
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-
2026-10-13 08:12 • 科技行者

你有没有想过,游戏公司或者机器人研究团队想要一个逼真的房间场景时,他们是怎么做出来的?

答案可能会让你意外:有的团队让AI模型像个耐心的室内设计师一样,一件一件家具摆过去,摆完检查一遍,不满意再挪一挪,这一套流程走下来,可能要花上8个多小时。而另一批人走了条捷径,扔给AI一张房间照片,让它照猫画虎地把家具都摆出来,几分钟就搞定,结果却经常闹笑话,椅子悬在半空中,书架和沙发穿插在一起,跟闹鬼片场似的。

这两条路子听起来都不太让人满意。而这篇来自香港大学团队的论文,讲的就是怎么把这两条路的优点捏到一起,还顺带解决了一个大家一直没太重视的问题:同一个场景,能不能生成好几种不一样但都说得通的摆法?

这事儿的难处在哪儿

先说说这个领域此前卡在哪儿。

做3D室内场景生成,业内主要分成两派。第一派叫智能体式文本到3D生成,说白了就是让视觉语言模型当室内设计师,一步步推理、放置、调整物体。

VLM(视觉语言模型):一种既能"看图"又能"说话"的AI模型,能理解图像内容并用自然语言进行推理和交流。

这一派的代表作里,SceneSmith要花2小时33分钟生成一个场景,SAGE更夸张,要8小时35分钟,还得动用5块H200显卡才跑得动。这速度,别说批量生产虚拟世界了,一个团队一天做不了几个场景。

第二派叫参数化图像到3D场景模型,靠的是从海量2D图片里学来的视觉先验知识,直接把图片里的物体识别出来,生成3D模型再摆好位置。这条路快是真快,像SAM-3D这样的方法7分钟就能出个场景,但代价是经常摆错位置,家具悬空、互相穿模的情况屡见不鲜,你没法直接把这种场景丢进物理仿真环境里用,因为它压根不符合物理规律。

这就好比你找了两个装修队。一个是经验丰富的老师傅,量了尺寸、反复核对每一件家具的摆放角度,做出来的效果无可挑剔,但工期长达数月;另一个是效率至上的快装队,两天就能把家具全部搬进去摆好,可惜他们只是照着效果图的样子"大概"摆放,根本没考虑承重和实际空间,结果书架靠墙没靠稳,衣柜门打开会撞到床。如果你只能选一个,要么等得起但慢,要么快但住进去天天出问题。

除了效率和精度的矛盾,还有一个问题此前很少被人提起:不管是哪种方法,同一个输入永远只能生成一种布局。可现实里的房间是活的,你今天把沙发挪到窗边,明天又把书桌搬到另一个角落,这些结构性的重新排列都是合理的,但现有方法就是给不出这种"变体"。这对训练机器人这类需要接触各种真实环境的AI系统来说是个短板,因为它们见到的永远是同一个模子刻出来的房间,泛化能力自然打折扣。

混血方案:先抄近道,再精心打磨

SceneMosaic的思路说白了很直接:用图像先验来抄近道搞定初始布局,再用智能体来精修,把物理错误和逻辑错误都改掉。

具体是怎么做的?先看第一步,场景重建和结构化。系统先用一个感知智能体从输入图片里识别出所有物体,给它们打上标签、画出2D边界框,然后调用SAM3这个分割模型,把每个物体的轮廓精准抠出来。

SAM3:Meta推出的一种"概念分割"模型,能根据文字描述和框选位置,把图片里对应的物体区域精确地抠出来。

接着,另一个叫SAM3D的模型登场,它负责把每个抠出来的2D物体转换成3D网格模型,同时给出初始的位置、旋转角度和尺寸信息。这一步完成后,系统手里已经有了一堆散落的3D物体,但它们之间的关系还没理清楚,比如哪个物体是挂在墙上的,哪个是放在架子里面的。

这时候需要第二步:关系推理与场景结构化。系统会派出一个管理者智能体,统筹调度多个专门的任务智能体,分别负责推断支撑关系(什么东西放在什么东西上面)、包含关系(什么东西装在什么容器里)、墙体识别等等。这些子任务被组织成一个有向无环图。

有向无环图(DAG):一种任务调度结构,节点之间有明确的先后依赖关系,且不会形成循环,保证信息按正确顺序流动。

这一整套关系被梳理清楚后,场景会被组织成一棵层次化的场景树。这里有个关键概念叫局部单元,指的是一个锚点物体(比如一张书桌)加上它所有的直接子物体(比如桌上的显示器、台灯)组成的一个小组合。

之所以要这样切分,是因为室内场景天然具有局部独立性。你调整客厅角落的书架摆设,通常不会影响到卧室床头柜上的台灯位置,这两者之间没有强关联。如果把整个场景当成一个整体来推理和调整,计算复杂度会呈指数级爆炸,智能体也很容易在庞杂的上下文里迷失方向,顾此失彼。

这就好比装修一整栋房子,你不会让一个工人同时管卧室的衣柜安装和厨房的橱柜安装,你会分成几个小组,各管一块,互不干扰地施工。如果强行让一个人从头管到尾,眼前信息量太大,他很可能刚调整完卧室的柜子高度,转头去看厨房的时候,又忘了刚才卧室那边其实还没完全对齐,最后返工的次数反而更多。局部单元分解的意义就在这里:把一个大问题拆解成许多小问题,每个小问题独立求解,既减轻了单次推理的负担,也让并行处理成为可能。

当然,现实中总有一些关系是跨越局部单元边界的,比如地面上的椅子得面朝书桌,书桌上的显示器方向也得跟着书桌走。系统会专门提取这些跨单元约束,把它们作为额外指导信息注入到对应局部单元的上下文里,确保局部独立评估不会破坏全局的语义一致性。

物理先稳住,智能体再精修

光把场景结构理清楚还不够,接下来要解决的是物理合理性这个硬骨头。

系统采用的策略是先做物理稳定化处理,再进行智能体式的迭代评估修正。具体来说,对每个局部单元,系统首先检查目标物体是否真的被其锚点物体包住了(比如书本是不是真的在书架格子里,而不是穿模穿出去了),然后把这个局部单元丢进一个物理仿真环境里,施加合适方向的重力,让物体自然地"落地",消除悬浮和穿模的状态。

这一步做完之后,场景至少在物理上是站得住脚的了。但站得住脚不等于摆得合理,接下来才是真正的智能体登场环节,用的是一种叫Critic-Actor的循环机制。

Critic-Actor循环:一种由"评论者"和"执行者"两个角色组成的迭代优化机制,评论者负责发现问题并给出改进建议,执行者负责根据建议实际修改布局。

在这个循环里,Critic会结合视觉证据和仿真工具检查当前布局是否有问题,发现问题就给出定性的修改建议,比如"把椅子稍微往桌子靠近一点",而不是直接给出精确坐标。这个设计挺有意思,它刻意不让Critic报出具体数字,因为语言模型在估算精确坐标这件事上经常不靠谱,与其让它硬猜一个可能错得离谱的数字,不如让它专注于判断方向性的对错,把精确计算的活儿交给下一环节。

Actor则负责把这些定性建议转换成具体的姿态更新。它输出的不是原始坐标,而是一种符号化的位姿表达式,这些表达式会被一个沙盒化的算术求值器解析,参照当前布局状态精确计算出结果。这样一来,"让椅子和桌子对齐"这种关系型调整就能被精确执行,而不是靠语言模型自己估摸一个大概位置。

系统还额外做了两件事来防止智能体陷入死循环。一是严格限制每个智能体的上下文只包含它负责的局部单元的信息,不让无关信息干扰判断。二是抛弃了带透视效果的3D视角渲染,改用正交投影的2D视图。

正交投影:一种没有近大远小透视效果的渲染方式,物体的实际尺寸和空间关系不会因为距离产生视觉畸变,更方便进行精确的空间计算。

这个选择背后的道理很实在。透视视角看起来更"真实",但对于需要精确判断位置关系的AI来说反而是负担,因为同样大小的物体在画面里因为远近不同会显得大小不一,容易造成误判。改用正交投影后,3D姿态调整被简化成了2D平面上的平移和旋转,大幅降低了空间推理的难度。这就好比你要在纸上规划一个停车场的车位布局,用俯视图直接画格子,比用一张带着近大远小效果的街景照片来估算容易得多,前者每一格的实际尺寸是一目了然的,后者你得先在脑子里做一遍透视校正才能判断真实距离,多绕一步就多一分出错的可能。

如果直接用带透视的3D视角来做迭代,会发生什么?论文的消融实验给出了答案:语义位置得分从84.3掉到78.1,旋转得分从78.4掉到71.8,生成时间反而从0.14小时涨到0.31小时。既慢又不准,两头不讨好。

除此之外,系统还维护了一份显式的历史记忆,记录过去每一轮的建议和修改结果,这样智能体能识别出"来回震荡"这种死循环模式(比如这一轮往左挪了,下一轮又往右挪回去),一旦发现就主动切换到不同的修正策略,而不是在原地打转。

一个场景,五种活法:多样性是怎么造出来的

前面说的这些都是为了把一个场景做对做稳,但SceneMosaic真正让人眼前一亮的地方,是它能从一个输入生成多种合理的布局变体,而且这个"多"不是瞎生成的乱七八糟,而是结构化的、有章法的重新排列。

秘诀就藏在前面提到的局部单元分解里。既然场景已经被切成了一个个相对独立的局部单元,那么系统完全可以针对每个局部单元单独生成好几种不同的排列方式,比如书桌区域可能有"靠墙集中式"和"居中对称式"两种合理布局,客厅区域可能有"围炉聚谈式"和"开放通透式"两种合理布局。这些局部变体各自经过前面说的物理稳定化和Critic-Actor精修流程,确保每一种都是站得住脚且合理的。

接下来就是这套方案最巧妙的地方:笛卡尔组合。假设卧室区域有3种局部变体,客厅区域有2种局部变体,书桌区域有4种局部变体,那么把它们自由组合起来,理论上就能拼出3×2×4=24种完整的场景方案,而这些方案背后的实际计算成本,只是分别生成了3+2+4=9个局部变体而已。

这就好比你去一家可以自由搭配的快餐店,主食有3种选择,配菜有2种选择,饮料有4种选择,你实际只需要准备9份食材,但顾客能拼出24种不同的套餐组合。如果换成传统做法,你得为每一种套餐单独准备一整套食材,那成本就是24份,直接翻了近3倍。局部单元分解加笛卡尔组合的精妙之处正在这里:把生成一次完整场景的成本,转化成了组合出一大批场景的成本,而这批场景之间又各不相同。

不过组合出来的候选场景池可能有几十甚至上百个,直接全部展示给用户显然是信息过载,而且很多组合之间可能长得差不多,缺乏真正的多样性。这就需要一套挑选机制。

系统设计了一个新颖度感知的场景距离,从三个维度衡量两个场景到底有多不一样:相对位置差异(物体之间的相对空间关系是否变了)、绝对距离差异(物体之间的实际远近关系是否变了)、旋转差异(物体的朝向是否变了)。这三者按权重加权求和,就得到了一个量化的"新颖度"分数。

有了这个距离度量,系统接着用动态最大最小贪心搜索来挑选最终展示的几个场景。这个算法的逻辑是:先把原始场景作为种子保留下来,保证参考布局肯定在列表里;然后每一轮都挑选那个与已选场景集合的最小距离最大的候选场景加入,也就是尽量选"最不像现有选项"的那个;每选完一轮,还会把和已选场景太相似的候选者提前剔除掉,既防止扎堆聚集,也加快了后续搜索的收敛速度。

论文里做了个很扎实的对比实验来验证这套挑选机制的价值。如果去掉这个新颖度选择,换成随机抽取,IoU多样性指标会从0.42恶化到0.58(数值越低说明布局差异越大,这里恶化意味着候选场景之间开始变得雷同)。而如果换成最笨的办法,也就是让智能体独立运行五次分别生成五个场景(不做局部分解,也没有组合复用),多样性指标进一步恶化到0.71,耗时还从0.03小时暴涨到0.14小时。这组数据说明,真正撑起多样性的不是简单地多跑几次生成,而是这套结构化的分解-组合-筛选机制。

论文还做了另一个挺有意思的对照实验,用来证明这种多样性不是靠牺牲质量换来的。研究者尝试了一种简单粗暴的做法:直接给物体位置和角度加高斯噪声,制造随机扰动。结果发现,当扰动强度调到和SceneMosaic差不多的多样性水平时(IoU约0.43),语义位置得分只有71.6,而SceneMosaic能做到84.5;更关键的是,关系保持率(也就是原本该有的支撑、包含关系还剩多少)只有71.5%,而SceneMosaic高达99.1%。这说明单纯加噪声制造出来的多样性是廉价且破坏性的,书架里的书可能因为噪声抖到了架子外面,而SceneMosaic生成的每一个变体依然严格遵守着物理约束和物体间的功能关系。

实测数据说话

理论讲了这么多,实际效果到底怎么样?研究团队在SceneEval-100这个包含100个手工设计的室内场景提示的基准上做了系统对比,横向比较了HoloDeck、SceneWeaver、SAGE、SceneSmith这类文本到3D方法,也比较了MIDI、SceneGen、SAM3D这类图像到3D方法。

SceneEval-100:一个用于评测文本条件下3D室内场景生成语义连贯性的标准评测集,包含100个人工设计的场景描述。

评测指标覆盖了语义质量(物体位置是否合理POS、朝向是否合理ROT)和物理有效性(可通行性NAV、碰撞率COL、越界率OOB)两大类。

结果摆在这里就很直观了:

方法 位置得分↑ 旋转得分↑ 碰撞率↓ 越界率↓ 生成时间↓

SAGE 59.8 53.3 1.8 0.8 7.56小时

SceneSmith 83.5 80.9 0.7 0.3 3.43小时

SAM3D 80.1 75.4 20.2 8.9 0.05小时

SceneMosaic基础场景 84.3 78.4 0.0 0.0 0.14小时

SceneMosaic变体场景 84.5 79.9 0.0 0.0 0.03小时

这组数字挺能说明问题的。SceneMosaic在语义质量上和最强的智能体基线SceneSmith打了个平手,甚至位置得分还略微领先,但生成时间只要0.14小时,相当于SceneSmith的1/24左右,这就是论文标题里说的24倍加速的由来。而碰撞率和越界率直接做到了0.0,这意味着彻底告别了图像到3D方法那种家具穿模、悬空的老毛病,SAM3D的碰撞率高达20.2%,越界率8.9%,对比之下差距一目了然。

更有意思的是变体场景这一栏,生成一个变体只需要0.03小时,比生成基础场景还快,这正是笛卡尔组合复用带来的效率红利。

研究团队还做了一场48人参与的用户调研,让参与者对5种方法生成的场景在语义合理性和物理合理性上打分(5分制)。SceneMosaic在两项上都拿到了最高分:语义合理性4.33分,物理合理性4.47分,且标准差最小,说明大家的评价意见相当一致。排第二的SceneSmith语义合理性4.01分,物理合理性4.16分,但代价是那3个多小时的生成时间。而SceneGen和SAM3D这类直接预测布局的方法,物理合理性得分只有2.08和2.43,印证了穿模问题确实是实打实影响用户体感的硬伤。

论文还专门做了消融实验,逐一拆解每个组件的贡献。比如去掉图像初始化,改成纯文本驱动初始化,生成时间会从0.14小时暴涨到1.25小时,因为失去了图像先验之后,智能体不得不进行大量的迭代搜索来重新确立空间布局;去掉物理处理和仿真工具,碰撞率会从0飙升到18.9%,越界率飙升到8.5%,说明物理稳定化这一步是刚需,不是锦上添花;把正交2D投影换回透视3D操作,同时保留局部分解,位置得分从84.3掉到78.1;如果进一步取消局部分解,改成对整个场景进行全局式演化,位置得分会跌到72.3,碰撞率飙到12.1%,而且论文特别指出,全局演化模式下根本没法加速变体场景的生成,因为它压根不具备可复用的局部组件。这几组对照清楚地说明,SceneMosaic里每一个设计决策都不是可有可无的装饰,拿掉任何一块,整个系统的某个维度都会明显退步。

当然,这套方法也不是万能的。它天生依赖图像输入,而一张图片通常只能拍到一个房间,所以目前SceneMosaic生成的还是房间级别的场景,没法直接搞定多房间的整栋房子或者建筑群。论文里也坦诚地把这一点列为未来值得拓展的方向,把房间级别的生成组合成连贯的整栋建筑,会是个自然而然的下一步。

写在后面

读完这篇论文,最让我意外的其实不是那个24倍加速的数字,而是局部单元分解加笛卡尔组合这个思路本身。这个想法的巧妙之处在于,它没有去正面硬刚"如何让智能体跑得更快"这个问题,而是绕了个弯,问了另一个问题:"如果场景本来就是可以拆分的,那多样性能不能靠组合而不是靠重复生成来获得?"这种从生成问题转化成组合问题的思维转向,在很多别的领域其实也适用,比如你要设计100套不同风格的T恤图案,与其一张张单独画,不如先设计好几种领型、几种袖型、几种图案元素,再靠排列组合批量产出。

论文里还有个细节我觉得值得单独说一说,就是Critic-Actor循环里那个"不让Critic报具体坐标"的设计。这其实是在正面承认语言模型的一个软肋:它擅长判断"对不对",但不擅长算"多少"。承认这个局限,然后把职责拆分给两个角色去做,这种设计哲学挺朴素,但很多系统反而容易忽略这一点,总想让一个模型包打天下。

还有个问题这篇论文并没有完全展开讨论:当局部单元之间的跨单元约束越来越复杂,比如一个开放式厨房客厅需要处理十几组物体的相互朝向关系时,这套局部独立演化加事后约束修补的机制还能撑住吗?论文里举的例子基本都是两三个物体之间的简单约束,真到了复杂空间关系密集交织的大场景里,这套方法的边界在哪里,是个值得继续追问的问题。

Q&A

Q1:SceneMosaic是什么?

A:SceneMosaic是香港大学团队提出的一个3D室内场景生成框架,它先用图像先验快速生成初始布局,再通过智能体循环修正物理和语义问题,同时能从一个输入场景生成多个合理的布局变体。

Q2:SceneMosaic相比传统方法快多少?

A:在SceneEval-100基准测试中,SceneMosaic生成基础场景只需0.14小时,而语义质量相当的SceneSmith需要3.43小时,SAGE需要7.56小时,速度提升约24倍,且碰撞率和越界率均降为0。

Q3:SceneMosaic怎么做到一个场景生成多种变体的?

A:它把场景拆分成多个独立的局部单元,每个单元单独生成几种合理布局,再通过笛卡尔组合拼出大量候选完整场景,最后用新颖度感知的距离度量挑选出差异最大又保持物理合理的几种作为最终变体。

分享至
0赞

好文章,需要你的鼓励

推荐文章
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-