跳到正文
DOTAFS

Personal learning notes

PAPER NOTE · WAN ET AL. · ECCV 2026

NaLA

A 3D Native LLM Layout Agent for High-quality 3D Scene Generation

让 LLM 不再只阅读“圆桌、柜子、房间”这些文字,而是直接读取它们的三维表面,再为每件已有资产预测位置、缩放与水平朝向。

任务 室内已有资产布局 输入 文字 + 房间/资产点云 输出 position + scale + yaw 骨干 Qwen-2.5-7B-Instruct
LIVE CONCEPT TOP VIEW / BEDROOM
输入:房间 + 资产点云
BED
DESK
CHAIR
输出 / Transform position [ 1.8, 0, -2.1 ] scale     [ 1.0, 1.0, 1.0 ] rotation  [ 0, 1.57, 0 ]

任务范围:从已有资产库中选择摆放参数,不负责生成新的 3D 模型。

01 / RESEARCH QUESTION

他们想解决什么问题?

已有 Layout Agent 会说“椅子放在桌子旁边”,但未必知道圆桌中心、柜子层板或异形房间边界到底在哪里。

3D 布局不是把物体名字填进坐标表。一个可用的房间至少要同时满足三类约束:物体不能互相穿透或越界;功能关系要合理,例如椅子朝向桌面、盒子落在层板上;整体构图还要自然。文本描述和 axis-aligned bounding box 会把曲面、凹槽、非对称朝向和支撑面压缩掉。

NaLA 的核心问题是:能否让 LLM 直接读取房间和资产的 3D 几何,同时避免把连续 Pose 拆成容易失真的数字 Token?它的答案分别对应输入端的 point-cloud tokens,以及输出端的 anchor + residual。

输入

用户需求、空房间边界点云,以及资产库中每件模型的点云。

编码

SPFormer 编码场景,PointBERT 编码资产,两个 Q-Former 压成 LLM prefix tokens。

输出

先自回归预测离散位置/朝向锚点,再回归连续位置残差、缩放与角度残差。

训练

先在 3D-FRONT 学宏观布局,再在 Imaginarium 学细节和高质量关系。

它与已有 Layout Agent 的关系

路线几何输入Pose 输出主要问题
LayoutGPT 一类文本、尺寸或包围盒文字坐标连续数值被拆成 Token;细粒度几何缺失
Holodeck / LayoutVLM文本或二维视觉关系成对约束 + 外部优化需要多轮求解;依赖预设物理约束
NaLA房间与资产点云4 个 anchoring tokens + 1 个 residual token仍受训练数据、骨干模型与 yaw-only 设定限制
01 / 输入数据房间与资产几何房间边界点云 + 每个 3D 资产的点云
02 / 模型处理编码并逐件规划先摆大件,再摆依赖它的小件
03 / 输出结果每件资产的 Poseposition + scale + yaw rotation

02 / INPUT REPRESENTATION

比较文本描述与点云输入

下面使用 Three.js 演示三类空间关系:朝向、包含与房间边界。它用于解释方法差异,不是作者实验的逐帧复现;作者原图列在演示之后。

INTERACTIVE THREE.JS EXAMPLE 例子 1 · 圆桌与椅子朝向
NaLA / POINT-CLOUD INPUT
拖动旋转 · 滚轮缩放 · 点击物体看 Transform
6 / 6 朝向圆桌每把椅子的朝向都参考了桌面几何

ORIGINAL PAPER RESULTS

论文原图:对照上面的三类空间关系

图片来自论文原页,仅裁边;点击可放大
FIG. 3 / FINE-GRAINED GEOMETRY

左看“放进柜子”,右看“椅子朝向圆桌”

NaLA 能利用层板与圆桌的实际形状:盒子落在柜内层板上,椅子围绕圆桌朝向中心。基线只知道粗略语义关系,容易把盒子放到柜顶或把椅子朝向统一成错误方向。

  • 柜子示例体现 containment / supporting surface
  • 圆桌示例体现几何中心与 orientation
  • 这正是点云输入相对文字描述的价值
在原论文中打开这一页 ↗
放大的论文原图

03 / METHOD OVERVIEW

输入端保留几何,输出端保留连续数值

常见方法先把 3D 模型转换成文字描述、包围盒或二维图片。这个过程会丢失层板、凹槽、支撑面和异形房间边界等细节。

常见基线TEXT-FIRST
“一张圆桌,大约 1 米宽” x: “1.23”
  • 不能直接表示桌面的曲率与可支撑区域
  • 连续坐标被拆成文字 token,不利于保持数值结构
  • 可能出现:碰撞、悬空或越过房间边界
NaLAPOINT-CLOUD INPUT
<ASSET_FEATURE> Pose = 粗格子 + 微调
  • 直接编码房间和资产点云,保留几何细节
  • 先选大概格子,再回归连续的精确偏移
  • 一次生成完整布局,不依赖后置优化器反复修

04 / COARSE-TO-FINE POSE

先预测粗位置,再回归连续偏移

离散锚点用于确定大致网格和主朝向,连续残差用于补充精确位置、缩放与朝向偏移。

COARSE-TO-FINE LAB 拖动滑块,看看两步如何合成最终位置
演示网格为 10 × 8
论文标准设置 B = 20 / 轴
粗定位
最终位置
X → Z →
点云输入

PointBERT 编码资产,SPFormer 编码房间,再由 Q-Former 压成 LLM 能读的 3D token。

大件先摆

训练答案按体积从大到小排序:先有桌子,再决定花瓶放哪里,因果更自然。

两阶段学习

先在 3D-FRONT 学大布局,再在 Imaginarium 学小物件和细节,比混在一起学更好。

为什么一定要“粗 + 细”两步

只输出离散格子,物体无法精确贴地或靠墙;只用一个连续回归 Token,多件资产会反复复用同一种占位符,LLM 难以区分当前要摆的是哪一件。NaLA 用三个位置 bin 和一个主朝向 bin 建立稳定锚点,再让 <POS_TOKEN> 从 LLM 最后若干层的 hidden states 回归细小残差。

每个资产还带独立 <ID_i>,输出前先生成对应 ID,使 Pose 和输入资产配对。训练答案按体积从大到小排序,因此模型倾向于先摆床、桌、柜,再摆椅子和小物件。

05 / FULL PIPELINE

一把椅子的布局生成流程

五个步骤依次展示:读取几何、编码 Token、确定摆放顺序、预测粗细 Pose,以及写入 Three.js 场景。

现在:读取房间和椅子的真实形状 TOP VIEW / 同一把黄色椅子
空房间
床 / 大件 ①
桌 / 中件 ②
先选这个格子
粗位置
再微调 0.23 m
椅子 / ③
✓ 布局完成
待摆资产库
CHAIR_03
不是“椅子”两个字
而是椅子表面的 3D 点
POINTBERT 把很多几何点
压成少量 Token
<ID_03><ASSET_FEATURE><POS_TOKEN>
先放床再放桌最后放椅子
写入你的 Three.js 场景 chair.position.set(2.2, 0, -1.4) chair.rotation.y = 1.57
本步骤的作用 把房间、床、桌、椅子的真实表面采样成点云。 输入 = 房间边界点 + 每件资产的表面点
STEP 01 / GEOMETRY

先把房间和模型采样成点云

输入不是一段“这是一张床”的描述,而是物体表面真实的 3D 点,以及地面、墙、天花板的边界。

06 / EXPERIMENTS

实验真正证明了什么

论文测试 20 类场景,每类 3 个案例,平均每个场景约 20 件资产;还用了 20 名研究生和 AI 评分。

越低越好 · 越界率 OOB 1.16%

LayoutGPT 为 18.19%。点云输入保留了房间边界的几何信息。

NaLA 1.16LayoutGPT 18.19
越高越好 · 人类总体评分 / 5 3.69

该组四种方法中数值最高;LayoutVLM 为 3.47。

越高越好 · 人类语义合理性 / 5 3.48

椅子朝桌子、盒子进柜子——不是只做到“不穿模”。

越高越好 · 人类美学评分 / 5 3.42

该组对比中数值最高,反映语义与视觉评价较好。

指标说明

物理合理性需要分别比较

碰撞率上 Holodeck 更低(0.10% vs 0.86%),悬空率上 Holodeck 也是 0%。Holodeck / LayoutVLM 使用约束进行多轮后处理,NaLA 则采用单次端到端生成。论文主要比较的是:速度、边界理解、语义和视觉评价之间的综合表现

数据来自论文 Table 1;标准误和完整评测设置请以原文为准。查看表格 ↗

主结果:NaLA 的优势集中在边界、语义和总体质量

指标NaLALayoutGPTHolodeck†LayoutVLM†
Collision ↓0.86%2.29%0.10%1.18%
OOB ↓1.16%18.19%10.14%5.19%
Floating ↓3.36%15.12%0.00%1.43%
Human semantic ↑3.482.173.033.37
Human aesthetic ↑3.422.492.943.10
Human overall ↑3.692.363.303.47

† Holodeck 与 LayoutVLM 会针对预定义物理约束做迭代优化;NaLA 是单次端到端生成,所以不能只看 Collision 或 Floating 一项。

消融:点云和 anchor 都不是装饰

输入消融3.53 → 2.82

标准输入下,完整模型的平均 AI 分数为 3.53;训练成 text-only 后降到 2.82。

去掉 anchor0.86% → 19.19%

只用 residual token 时,Collision 从 0.86% 激增到 19.19%。

只用文字坐标1.16% → 9.25%

OOB 明显上升,说明连续 Pose 直接写成文字并不稳定。

07 / IMPLEMENTATION NOTE

NaLA 输出与 Three.js Transform 的对应关系

在 Vite + 原生 JavaScript + Three.js 项目中,模型输出可以映射到 Object3D 的 position、scale 和 rotation.y。

nala-layout-adapter.js
const roomPoints = sampleSceneBounds(scene);
const assetPoints = sampleGeometry(mesh.geometry);

const input = {
  roomPoints,
  assets: [{ id: mesh.uuid, points: assetPoints }]
};

论文使用专门的点云编码器。对你的场景,数据源可以从 BufferGeometry 和房间碰撞边界离线采样。

在当前项目中的建议落地顺序
  1. 01 / 离线编辑器原型让 Agent 生成 JSON transform,先验证输入与输出格式。
  2. 02 / 几何校验使用 Three.js Box3 或物理引擎检查碰撞和越界。
  3. 03 / 模型训练评估论文依赖点云编码器、7B LLM、布局数据集与训练流程,需要单独评估复现成本。

08 / ADVANTAGES & LIMITS

它比其他 Layout Agent 好在哪里,又缺了什么

01 / 任务边界布局已有资产

资产库需要预先存在;材质、建模、灯光和玩法逻辑不属于该方法的核心任务。

02 / 数据范围稀有场景数据较少

论文中的电脑房和诊所案例显示:稀有物件关系学习不足时,可能出现悬空或比例异常。

03 / 姿态自由度仅预测绕 y 轴旋转

设定为 y-up,暂不覆盖贴墙画框、倾斜道具等完整 6DoF 姿态。

04 / 评测范围实验集中于室内布局

卧室、客厅和会议室等结果,不能直接推断到复杂地形、动态机关或战斗关卡。

NaLA 论文中的电脑房与诊所失败案例
论文 Fig. 9。电脑、鼠标、键盘和诊所设备等稀有资产关系在训练集中不足,模型会出现拥挤、比例或悬空问题。来源:NaLA 论文,仅用于论文解读。
01

几何直接进入模型

圆桌、层板和异形边界不必先压缩成一句文本。

02

Pose 只需 5 个 Token

四个锚点 Token 确定粗位置和朝向,一个 residual Token 输出连续修正。

03

一次生成完整布局

相比迭代约束求解,推理速度随资产数量增长更平缓。

04

仍不是物理求解器

它学习布局统计,不保证所有接触、稳定性和 6DoF 约束都成立。

参考资料

  1. NaLA: A 3D Native LLM Layout Agent for High-quality 3D Scene GenerationECCV 2026 / arXiv:2606.29395
  2. NaLA Project Page原始视频、图表与项目说明
  3. NaLA Code作者公开代码仓库

论文图用于研究解读;交互式 3D 场景与教学图为本站概念演示,不是作者模型的在线推理结果。

课程小结

NaLA 直接编码房间与资产点云,并通过“离散锚点 + 连续残差”预测每件资产的 Pose。
打开原论文 ↗ 返回我的学习笔记