text2room
一句话生成带纹理可编辑的 3D 室内房间网格(ICCV 2023)
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
一句话生成带纹理可编辑的 3D 室内房间网格(ICCV 2023)
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下,你对AI说一句「一个温馨的客厅,有落地窗和米色沙发」,几分钟后,AI就为你生成了一整间真实可感的3D房间——地板、墙壁、天花板纹理清晰,空间结构合理,甚至可以直接导进游戏引擎或VR场景中使用。这不是科幻,而是2023年ICCV会议上真实发表的科研成果——Text2Room。
Text2Room由慕尼黑工业大学的Lukas Hoellin等研究者提出,并在ICCV 2023(计算机视觉顶会)发表。该项目将预训练的2D文本到图像模型(Stable Diffusion Inpainting)与3D重建技术结合,实现从纯文本描述生成完整纹理3D网格(textured 3D mesh)的突破。
项目作者阵容包括:Lukas Hoellin(第一作者)、Ang Cao、Andrew Owens(密歇根大学)、Justin Johnson(斯坦福大学)以及Matthias Niesner(慕尼黑工业大学/谷歌研究院)。Andrew Owens和Matthias Niesner均是计算机视觉领域的知名学者,后者同时在谷歌研究院工作,这保证了技术方案的前沿性和工程实现的可靠性。开源代码在GitHub上获得1086 Star,说明其不仅有学术影响力,也受到开发者社区的关注。
Text2Room的核心思路是「逐帧递增式3D融合」,分为两个关键阶段:
第一阶段:迭代式视角图像生成与深度估计
给定一个文本提示和一个相机轨迹,模型首先从起始视角用文本生成第一张图像。随后,沿着预定轨迹移动相机,对每个新视角执行以下操作:先用PyTorch3D将已有3D网格投影到新视角得到深度图,再识别图像中被新视角「看到」但尚未被网格覆盖的空洞区域(mask),最后用Stable Diffusion Inpainting模型根据文本提示填充这些空洞,同时预测该视角的深度信息(通过IronDepth模型)。这样,每一帧都在不断「生长」出新的3D内容,同时累积修正之前的深度误差。
第二阶段:网格补全与表面重建
第一阶段产生的3D点云和纹理颜色经过体素融合(TSDF/mesh fusion)生成初始网格。但这个网格表面往往粗糙、有漏洞。第二阶段用Poisson Surface Reconstruction(泊松表面重建)在Open3D中生成更平滑的网格,再通过meshlab的二次采样减少面数,使最终网格在保持视觉质量的同时更轻量,可直接用于下游渲染引擎。
整个pipeline涉及多个复杂子模块的协同:text2room_pipeline.py(主流程调度)、mesh_fusion/(网格融合与渲染)、iron_depth/(单目深度预测与对齐)、depth_alignment/(深度对齐)、trajectories/(相机轨迹与位姿管理)。
项目采用模块化设计:
| 模块 | 职责 | 关键技术 |
|---|---|---|
| text2room_pipeline.py | 主pipeline,管理流程状态 | PyTorch nn.Module |
| mesh_fusion/ | 体素融合、网格渲染、TSDF | PyTorch3D、Open3D |
| iron_depth/ | 单目深度预测 | PyTorch |
| depth_alignment/ | 深度图对齐与融合 | NumPy |
| trajectories/ | 相机轨迹、位姿噪声、NeRF格式转换 | JSON |
| utils/ | 图像工具、SD加载、Poisson网格 | PIL、trimesh |
主要依赖包括:PyTorch 1.13.1、PyTorch3D(Facebook Research,编译安装)、Stable Diffusion 2 Inpainting(HuggingFace diffusers 0.14.0)、Open3D 0.17.0、trimesh 3.20.2、py_meshlab,以及数据科学工具链(NumPy、OpenCV-Python、scikit-learn等)。总共超过60个pip依赖项,完整的requirements.txt已包含所有版本锁定。
项目提供两种核心使用模式:
生成完整场景(默认):
运行 python generate_scene.py,默认生成一个客厅场景,输出包含:fused_final.ply(最终融合网格)、poisson重建网格(多种面数规格)、从各个相机位姿渲染的图像和深度图、NeRF格式的transforms.json(可直接用于Instant-NGP或NeRFStudio优化)。所有输出保存在output/目录下。
自定义场景:
用户可通过 --trajectory_file 参数指定自定义相机轨迹JSON文件,在 model/trajectories/examples/ 下提供了卧室、厨房、书房等多种预置轨迹。也可以通过 --input_image_path 从一张真实照片开始生成,而非从纯文本启动,显著提升生成效果的真实感。
主脚本 generate_scene.py 仅约60行,逻辑清晰:加载轨迹 -> 生成首帧图像 -> 循环执行pipeline.generate_images() -> 完成网格补全 -> Poisson重建 -> 保存NeRF格式输出。这种设计让高级用户可以通过修改model/trajectories/trajectory_util.py中的轨迹函数来完全自定义相机运动和生成策略。
上手门槛:Text2Room定位为研究级工具而非终端用户产品。使用前需满足:NVIDIA GPU(>=8GB VRAM)、CUDA 11.7环境、conda Python 3.9。最复杂的环节是PyTorch3D的编译安装(需要fvcore、iopath等依赖),以及从IronDepth和HuggingFace手动下载预训练权重文件。对于没有深度学习环境配置经验的用户,完整部署可能需要2-4小时。
当前局限性:(1)仅支持室内场景,室外场景的纹理和几何复杂度超出模型能力范围;(2)生成质量高度依赖文本提示的描述质量,模糊或矛盾的需求会产生结构混乱的房间;(3)单次生成需要数十次Stable Diffusion推理(约5-10分钟GPU时间),硬件成本较高;(4)不支持多楼层或开放空间的生成。
Text2Room代表了AIGC(AI生成内容)从2D图像/视频向3D空间的重要延伸。在游戏开发、室内设计、虚拟看房、AR/VR内容创作等领域,3D资产的高成本一直是痛点——传统需要专业建模师耗费数小时乃至数天。使用Text2Room,一个不具备3D建模经验的普通用户,只需几分钟就能从一段文字生成可用的3D房间资产。
更值得注意的是,Text2Room的输出与NeRF(神经辐射场)生态打通——生成的transforms.json可以直接导入Instant-NGP或NeRFStudio进行进一步优化和编辑,实现从「文本 -> 3D网格 -> 神经渲染」的完整管线。这为AI + 3D内容创作开辟了一条从研究到落地的新路径。