stable-dreamfusion
用文字描述直接生成 3D 模型的开源实现,融合 Stable Diffusion + NeRF 技术
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用文字描述直接生成 3D 模型的开源实现,融合 Stable Diffusion + NeRF 技术
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
图1:Stable-Dreamfusion 项目封面图
想象这样一个场景:你在咖啡馆里,随口对手机说「给我生成一只穿着宇航服的柴犬」,几分钟后,一个可以 360 度旋转查看的 3D 模型就出现在屏幕上——这不是科幻,而是 Stable-Dreamfusion 正在探索的方向。
Stable-Dreamfusion 是由华人开发者 Jiaxiang Tang(aka ashawkey)开源的 PyTorch 实现项目,将 Google 在 2022 年提出的 DreamFusion 算法落地,并通过 Stable Diffusion 替代了原本闭源的 Imagen 模型,让普通研究者和开发者也能体验"用文字创造 3D 内容"的能力。该项目在 GitHub 上获得了超过 8800 颗星,成为 Text-to-3D 领域最具影响力的开源项目之一。
传统的 3D 内容创作依赖专业建模软件(如 Blender、Maya)和资深设计师,门槛极高。AI 领域一直在探索如何让机器理解"文字描述"并生成对应的 3D 几何形状,这比生成 2D 图片要困难得多——3D 模型不仅需要正确的几何结构,还要有合理的纹理、光照和拓扑关系。
Google 在 2022 年 9 月发布的 DreamFusion 论文开创性地提出了 SDS(Score Distillation Sampling)损失函数,利用预训练的 2D 扩散模型(Imagen)监督 3D 神经辐射场(NeRF)的训练。但 Imagen 并未开源,限制了这一技术的普及。Jiaxiang Tang 团队利用开源的 Stable Diffusion + diffusers 库完整复现了 DreamFusion 的核心思想,使得 Text-to-3D 真正走向开源社区。
Stable-Dreamfusion 的技术架构融合了多个前沿方向:
神经辐射场(NeRF)引擎:项目默认采用 NVIDIA 开源的 Instant-NGP(基于 Multi-resolution Hash Encoding)作为 NeRF 骨干,相比传统 NeRF 提速数十倍,支持约 10 FPS 的实时渲染。代码仓库 torch-ngp 同样来自 ashawkey 的独立维护项目。对于没有 CUDA 环境的用户,项目还支持纯 PyTorch 的 Vanilla NeRF 骨干(速度较慢但零编译依赖)和 Taichi 后端(无需 CUDA 编译)。
扩散模型指导(SDS Loss):核心创新在于将 NeRF 渲染的 2D 视图通过 VAE 编码为 64x64 的潜空间表示,再注入 Stable Diffusion 的 UNet 预测噪声方向,通过反向传播将梯度直接传到 NeRF 网络参数。这一过程在 ./guidance/sd_utils.py 中有清晰的 4 种实现方式(autograd hook、SpecifyGradient 自定义函数、重参数化等),体现了作者的工程深度。
三维网格导出(DMTet):训练完成后,通过可微分的四面体网格(DMTet)将 NeRF 隐式表示转换为显式 3D 网格(OBJ + MTL + 纹理贴图),支持任意 3D 编辑软件导入。这解决了 NeRF "只能看不能导出"的痛点。
多模态条件支持:不仅支持纯文本生成(--text),还支持图生 3D(--image),结合 Zero-1-to-3 实现视角预测,结合 Omnidata 实现深度/法线监督,显著提升生成质量。项目还引入了 DeepFloyd-IF 作为替代扩散后端(实验性),以及 Perp-Neg 算法缓解"Janus 问题"(AI 生成角色出现多头/多脸的典型缺陷)。
作为学术研究项目,Stable-Dreamfusion 没有 Web 界面,完全通过命令行参数驱动。核心入口是 main.py,支持数十种参数组合,主要使用模式包括:
即时体验(Colab):作者在 README 中提供了预配置好的 Google Colab 笔记本,点击即可在云端 GPU 上运行,绕过本地部署的繁琐步骤。这是目前最友好的入门方式。
本地部署:需要手动安装 requirements.txt 中的依赖(含 CUDA 扩展 ninja 编译)、下载预训练权重(Zero-123、DMTet 四面体网格等,存储在 Google Drive/HuggingFace),CUDA 扩展需手动 build(约 10-30 分钟,取决于 GPU 型号)。
推理结果查看:训练结束后可通过 --test 导出 360 度旋转视频,通过 --gui 启动 DearPyGui 可视化界面自由查看模型,通过 --save_mesh 导出可编辑的 OBJ 文件。
注意:作者在 README 中明确标注"当前生成质量无法达到论文展示水平",大量提示词仍会失败,特别是涉及多对象、复杂结构或精确材质的需求。这反映了 SDS 损失固有的过饱和、Janus 问题等技术局限。
尽管 Stable-Dreamfusion 极大地降低了 Text-to-3D 的研究门槛,但它并非完美解决方案:
生成质量受限:受限于 Stable Diffusion 潜空间而非像素空间的监督,生成结果在细节精度上与论文有差距。几何结构经常出现缺损、扭曲或过平滑的问题。
多面问题(Janus Problem):同一个 3D 角色从不同角度看可能呈现不一致的面部特征,这是 SDS 监督的根本性局限。项目引入了 Perp-Neg 算法缓解但无法彻底解决。
硬件需求极高:纯 PyTorch 模式约需 12GB VRAM,开启 Instant-NGP + fp16 模式约 16GB VRAM,使用 DeepFloyd-IF 需 24GB+,普通消费级显卡难以运行。
依赖外部权重:Zero-1-to-3、Omnidata 等预训练模型需从 Google Drive 下载,速度不稳定且链接可能失效。
Stable-Dreamfusion 的真正价值在于它开启了 Text-to-3D 的开源时代。在它之后,大量衍生项目涌现,包括 threestudio(整合了更多 3D 生成方法)、Zero-1-to-3++、TripoSG 等,共同推动了这一领域的发展。项目作者 Jiaxiang Tang 同时维护了 torch-ngp、diff-nerf 等多个相关开源库,形成了完整的 NeRF + AI 生成工具链。
从技术演进角度看,Stable-Dreamfusion 代表了 2022-2023 年 Text-to-3D 的主流范式——以 2D 扩散模型为监督信号训练 3D 隐式表示。虽然后续出现了更多端到端的 3D 原生生成方案(如 tripo3d、LRM),但 DreamFusion 范式在工业界和研究中仍有广泛应用,其开源实现始终是重要的参考基准。
图2:Stable-Dreamfusion 生成的 3D 效果演示(来源:项目 GitHub)