探索未来交互新维度——阿里云DataV团队近期取得了突破性成果。当大语言模型(LLM)与3D世界深度融合,将迸发出怎样的创新火花?本文将深入剖析这套基于LLM的实时可交互3D世界方案,从模型表示、场景理解到自然语言操控,逐步揭秘背后的核心技术细节。

背景介绍
大型语言模型(LLMs)的飞速发展,使机器对人类语言的理解能力跨越了多个台阶。然而,物理世界本质上是三维的。要让机器在真实环境中真正发挥作用——例如自动驾驶、机器人导航、增强现实等场景——大模型必须学会感知和理解3D空间。
将LLM与3D数据相结合,理论上前景广阔,但实践挑战重重。3D数据的表示形式多种多样,模型的扩展性与计算效率始终是技术瓶颈。更重要的是,要在真实、复杂的动态环境中落地应用,还需攻克数据多样性、环境复杂性等一系列关键难题。
阿里云DataV团队始终致力于三维交互的前沿探索。最近,他们基于虚幻引擎和通义千问大模型家族,打造了一套创新方案,成功实现了用自然语言直接与3D世界进行交互。具体而言,能够完成以下能力:
模型搜索与创建:通过自然语言描述,从模型库中精准匹配并生成对应模型到场景中。例如,用户说出“生成一张现代风格的双人床”,场景内便会立即出现一张符合描述的床。
3D对象操作:与场景中的物体进行物理级交互——如拿起、移动物体,甚至执行一系列复杂动作序列。例如,“把咖啡桌和杯子的相对位置调换一下”。
场景理解与编辑:实时修改场景内容,比如重新布置房间布局,或者将物体颜色改为对色盲更友好的配色方案。
【视频:LLM驱动的三维场景交互预览】
一、三维世界的元数据生成与表达
模型信息的收集
3D世界的最小单元是模型。如何让大模型“看懂”3D模型?我们先了解几种常见的3D表示方式:多边形网格紧凑但缺乏结构化;点云存储占用低但缺少表面拓扑信息;体素网格直观但高分辨率下内存消耗巨大;神经场(如NeRF)连续可微但渲染速度慢;混合表示(如Instant NGP)在质量与速度间取得平衡;3D高斯溅射则通过高效光栅化实现高质量实时渲染。
但传统LLM仅接受文本输入,无法直接处理这些3D表示。因此,团队的核心思路是:将3D物体或场景的信息“翻译”到语言空间,让LLM能够通过文字感知三维世界。
如何精准描述一个模型?他们设计了一套模型描述文件,涵盖资产信息、语义描述、几何信息、材质信息等内容:
{
//1. 资产信息
"ReferencePath":"/Game/ArchVizInteriorVol3/Meshes/SM_Bed.SM_Bed",//资产引用路径
"Name":"SM_Bed",//资产名字
//2. 语义描述
"Description":"这是一张床",// 语音描述
//3. 几何信息
"Pivot":"物体中心",//物体锚点
"GeometryInfo":{
"vertices":59997,//顶点数
"Triangles":"114502",//三角形数
"xxx":""
},
"BoundingBox":{
"center":[xx,xx],
"extend":[xx,xx]
},//包围盒信息
//4. 基本材质信息
"Materials":[
{"MI_Bed_Fabric_1":[
"BaseColor":xxx,
"BaseFallof":xxx
]}
]
}
大部分信息可直接从Unreal引擎的资产解析中获取:资产引用路径、材质参数、几何数据。但最核心的是语义描述字段(Description)——传统做法依赖人工打标签,耗时费力,且想要完整描述一个模型可能需要成千上万个标签。例如用户提出“我想要一张红色双人床上有个黑色小熊”,人工标签根本难以覆盖这种组合需求。
团队采用视觉-语言模型(VLM)来自动生成语义描述。以通义千问VL-Max为例,该模型不仅能识别出床的主体结构,甚至连光影效果、设计风格都能详细描述。具体流程:
- 对每个模型,从UE资产生成基本信息
- 生成一张640×640的缩略图(可多视角拍摄)
- 向大模型发起请求:“这是一个三维模型的截图,请帮我详细描述这个三维模型的信息”
- 将模型返回的描述填入Description字段
- 将所有信息整理到DataTable,导出.csv文件
通过这种方式,为每个模型建立了自然语言空间中的表示,并借助“ReferencePath”与实体模型建立关联。
模型搜索
信息库构建完成后,如何让大模型利用它进行高效搜索?团队采用知识检索增强(RAG)技术。以阿里云百炼平台+通义千问-max为例,操作步骤简洁明了:
- 在“数据管理”下导入三维模型库信息
- 在“知识索引”中创建知识库
- 在“我的应用”中创建RAG应用,并绑定知识库
- 在Unreal引擎中通过HTTP调用百炼的应用接口
测试效果验证:用户输入“我想要一张双人床”“我想要一张现代风格的双人床”“我想要一张红色双人床”,系统均能快速返回符合描述的模型ReferencePath。搜索效率获得显著提升。
【模型搜索和创建】
二、基于大模型的3D场景理解
单个模型的问题解决后,下一步是理解整个场景——即场景级标注:为整个3D场景生成描述,涵盖房间类型、风格、关键物体及其相互关系,同时建立描述与场景中实体的映射关系。
直接将不同视角的场景截图提供给VLM,模型能够准确给出物体信息、布局、空间关系等描述。但关键难题在于Mapping——VLM只提供了抽象文本描述,并未告知Unreal引擎哪个Actor对应哪个描述。例如场景中有两盏吊灯,VLM描述“有两个大型吊灯”,但引擎无法区分哪个是第一盏、哪个是第二盏。没有这种映射,后续交互便无从开展。
团队尝试了三种策略来解决这个“多对多”映射问题。
策略一:逐个暴露,逐个识别
- 隐藏所有模型,然后逐个显示,对每个模型拍摄独立照片,交由VLM识别。
- 优势:识别准确,无干扰。
- 劣势:场景中模型较多时循环次数巨大;且脱离场景上下文可能导致识别偏差(同一个杯子,在咖啡厅里是咖啡杯,在酒吧里则可能被识别为酒杯)。
策略二:保留场景,高亮目标
- 保留全部物体,但通过黄色框(outline)高亮当前需要识别的物体,然后拍照交给VLM。
- 优势:识别准确,且保留了场景辅助信息,使识别更符合逻辑。
- 劣势:同样需要逐个遍历,循环量较大。
策略三:批量框选,联合识别
- 针对某个关键视角,在屏幕空间内为每个Actor生成唯一标识符(例如在红色框内写入UUID),一张图中同时框选多个物体,让VLM一次性返回所有框内物体的描述。
- 优势:准确度高,保留场景信息,同时大幅减少模型调用次数。
- 劣势:遮挡可能导致误判。
综合运用上述三种策略,团队能够获取场景的全局信息(如房间类型、风格)、关键物体及其关系,同时建立文本描述与引擎内实体的精准映射。最终形成一份场景描述文件,包含每个物体的名称、UUID、描述、变换、包围盒等信息。这份文件配合当前场景截图,构成了大模型与3D场景之间“握手”的关键桥梁。
{
"name": "StaticMeshActor_1",
"uUId": "7D70F97241D37F14A1C649860C7FE24D",
"Description": "一张双人床",
"transform": { ... },
"boundingBoxCenter": { ... },
"boundingBoxExtent": { ... }
},
{
"name": "StaticMeshActor_2",
"uUId": "453F4F714546496132DA4EA97D22A636",
"Description": "一个书架",
"transform": { ... },
"boundingBoxCenter": { ... },
"boundingBoxExtent": { ... }
}
三、对话式的3D世界交互
当模型和场景都能被大模型“理解”之后,下一步就是让它“动手”——通过自然语言驱动Unreal引擎执行物理交互。核心思路是:将动作序列“标记化”,让LLM输出结构化的函数调用。
举例说明:用户提出“在场景中的桌子上放置一个杯子”。大模型需要:①收集场景信息,确定桌子的位置;②前往模型库查找杯子的ReferencePath;③生成杯子并放置到桌子上。这三个步骤对应三个函数调用,否则指令将仅停留在语言层面,无法产生实际动作。
团队通过Function Calling实现这一机制。以生成物体的函数`spawn_object`为例,函数描述如下:
{
"type": "function",
"function": {
"description": "在场景中生成或者放置一个物体",
"parameters": {
"type": "object",
"properties": {
"ReferencePath": {
"type": "string",
"description": "要生成物体的ReferencePath"
},
"description": {
"type": "string",
"description": "要生成物体的描述"
},
// 位置、旋转、缩放参数...
},
"required": ["ReferencePath", "description", "pos_x", "pos_y", ...]
},
"name": "spawn_object"
}
}
当用户输入“把杯子移动到咖啡桌的顶部中心位置”时,大模型会调用`GatherSceneInfo`获取场景信息,调用`GetObjectReferencePath`查找杯子,然后调用`MoveObject`并传入计算好的位置参数。Unreal引擎收到函数调用后,真正执行杯子的移动操作。
【输入:把杯子移动到咖啡桌的顶部中心位置】
总结
该方案围绕三个核心模块展开:
- 3D模型表示:让大模型“认识”3D模型——通过VLM自动生成语义描述,建立语言空间的模型知识库。
- 3D场景理解:让大模型“理解”3D场景——通过多策略映射,建立文本描述与引擎实体的精准关联。
- 3D世界交互:借助Function Calling,将LLM的推理结果转化为Unreal引擎的实际操作函数。
展望
LLM在上下文学习、逐步推理、开放词汇及世界知识方面具备独特优势,使其在空间理解与交互领域潜力巨大。将LLM与3D技术深度融合,有望在多个领域带来颠覆性变革:
- 自动驾驶:大模型在数据标注、仿真、感知环节发挥巨大作用。从人工标注向AI主导转变,视觉大模型的精度与泛化能力能大幅降低数据生产成本。
- 具身智能:LLM的规划、工具使用与决策能力,可用于创建能够在3D环境中自主导航、与物体交互、选择合适工具的智能体。
- 3D生成:结合LLM,可根据自然语言生成情景化的对象或场景,彻底改变传统建模复杂耗时的局面。
总的来说,LLM在处理、理解与生成3D数据方面展现出强大的变革潜力,为空间智能的进一步发展铺平了道路。
