point-e
基于扩散模型的 3D 点云生成模型
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于扩散模型的 3D 点云生成模型
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

图:Point·E 生成的 3D 点云效果,四个不同物体同步旋转展示
想象这样一个场景:你对着一款设计软件说"给我生成一个红色的塑料骰子",几秒钟后,屏幕上出现了一个完整的 3D 骰子点云模型,可以旋转、缩放、直接导出使用。这不是科幻——Point·E 让这件事变成了现实。
2022 年 12 月,OpenAI 发布了 Point·E,这是一个基于扩散模型(Diffusion Model)的 3D 点云生成系统。与同期的 DreamFusion(需要数小时生成一个 3D 模型)相比,Point·E 仅需约 1-2 分钟就能完成从文本或图像到 3D 点云的转换——快了将近 600 倍。
在 Point·E 出现之前,3D 内容生成领域主要有两条路线:
路线一:NeRF(神经辐射场)。NeRF 通过神经网络学习场景的体积密度和颜色,能生成极其逼真的新视角图像。但它的问题在于:计算量极大,生成一张新视角图像需要数分钟;且输出是图像而非可直接使用的 3D 几何。
路线二:3D GAN(生成对抗网络)。3D GAN 能生成可编辑的 3D 几何,但训练成本极高,且模型通常只擅长生成某一类物体(如人脸或汽车),泛化能力差。
Point·E 的核心创新在于:用点云(Point Cloud) 作为 3D 表征,而非 NeRF 的体积渲染或 3D GAN 的网格(Mesh)。点云本质上就是一个由 N 个三维坐标点(x, y, z)加上可选颜色信息组成的集合——简单、稀疏、但足够表达 3D 形状。这种表征让扩散模型可以在点上直接运行,大幅降低了计算复杂度。
Point·E 的技术栈由三大组件构成:
1. 条件扩散模型(Conditional Diffusion Model)
这是 Point·E 的核心。它基于 Transformer 架构,接收两个输入:一是随机噪声的初始点云,二是 CLIP 编码器提取的文本或图像特征向量。通过逐步去噪,最终输出符合文本/图像描述的 3D 点云。
项目包含多个预训练模型:
2. CLIP 视觉语言模型
Point·E 依赖 OpenAI CLIP(ViT-L/14)作为跨模态桥接。用户输入的文本或图像首先被 CLIP 编码为一个特征向量,该向量作为扩散模型的条件输入。这意味着 CLIP 的知识直接迁移到了 3D 生成任务中——CLIP 理解"红色塑料质感",Point·E 就能生成相应颜色的点云。
CLIP 依赖通过 git+https://github.com/openai/CLIP.git 从源码安装,是部署过程中最容易出问题的依赖之一。
3. SDF 回归模型(SDF Regression Model)
扩散模型输出的只是点云——大量离散的点。如何将点云转换为可直接 3D 打印或游戏引擎使用的三角网格(Mesh)?Point·E 训练了一个小型神经网络(SDF Model),将点云转换为有符号距离场(Signed Distance Function),再通过 Marching Cubes 算法提取等值面,生成 Mesh。
Point·E 不支持 Windows,推荐 Linux/macOS + NVIDIA GPU 环境。以下是完整安装步骤:
# 1. 克隆仓库
git clone https://github.com/openai/point-e
cd point-e
# 2. 创建 conda 环境(推荐)
conda create -n pointe python=3.9
conda activate pointe
# 3. 安装 PyTorch(CUDA 11.8 版本)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# 4. 安装 CLIP 源码依赖(关键步骤)
pip install git+https://github.com/openai/CLIP.git
# 5. 安装 Point·E
pip install -e .
这是最稳定、效果最好的使用方式:
from point_e.models import MODEL_CONFIGS, create_model
from point_e.util.pc_to_mesh import marching_cubes_mesh
from point_e.util.plotting import plot_point_cloud
import numpy as np
from PIL import Image
# 加载模型(以 base1B 为例,效果最好)
model = create_model('base1B')
model.eval()
# 加载示例图像
img = Image.open('point_e/examples/example_data/corgi.jpg')
# 生成点云
samples = None
for x in model.sample(image=img, batch_size=1):
samples = x
# 保存点云
pc = model.output_to_point_clouds(samples)[0]
pc.save('output.npz')
# (可选)转换为 Mesh
mesh = marching_cubes_mesh(pc, model)
model = create_model('base40M-textvec')
model.eval()
samples = model.sample(text='a red die', batch_size=1)
文本模型能力极为有限,作者在 README 中也明确说明"only works for simple prompts"(仅对简单提示词有效)。
Point·E 的显存需求随模型大小变化显著:
| 模型 | 显存需求 | 生成时间 | 质量 |
|---|---|---|---|
| base40M | ~6GB | ~30秒 | 中等 |
| base300M | ~10GB | ~1分钟 | 较好 |
| base1B | ~12GB | ~2分钟 | 最好 |
纯 CPU 推理极其缓慢,不建议使用。模型权重总大小约 5GB,首次运行需要联网下载。
Point·E 并非完美,它有以下几个公认的局限:
点云分辨率低:默认只生成 1024 个点(升采样后 4096),与 DreamFusion 等 NeRF 方法生成的高分辨率几何相比,细节明显不足。点云边缘往往有噪声和空洞。
文本生成能力弱:base40M-textvec 模型对复杂描述几乎无法理解。"a red plastic die with rounded corners" 这样的描述就会失败,只能识别"red"和简单物体类别。
无网格直接输出:必须通过 SDF 模型二次转换才能得到 Mesh,而 SDF 模型本身是小模型,转换质量不稳定。
被后来者超越:2023 年以来,Magic3D、丝鹭(Zero-1-to-3)、SCANT 等项目在生成速度和质量上均超越了 Point·E。它更像是一个"概念验证"而非生产级工具。
point_e/
├── models/ # 模型定义:Transformer、Perceiver、SDF
├── diffusion/ # 扩散模型:GaussianDiffusion、KarrasDenoiser
├── evals/ # 评估脚本:P-FID、P-IS、PointNet++
├── util/ # 工具:点云读写、PLY格式、Mesh转换
└── examples/ # Jupyter Notebook 示例
代码整体质量较高:
Point·E 的最大贡献不是生成质量本身,而是证明了扩散模型可以在离散点集上直接运行,且速度远超 NeRF 路线。它开创性地将"文本/图像 → CLIP → 扩散模型 → 点云 → Mesh"这条 pipeline 带入开源世界。
尽管很快被更新的模型超越,但 Point·E 的开源精神影响了后续大量 3D 生成研究。OpenAI 在发布 Point·E 后约半年,又推出了更新的 Shape-E,进一步探索 3D 生成的可能性。
Point·E 是一个具有里程碑意义的开源项目,它将扩散模型从图像/文本领域拓展到了 3D 点云生成,展示了 AI 在 3D 内容创作领域的巨大潜力。虽然在生成质量和功能完整性上已被更新的研究超越,但它为整个 3D 生成赛道提供了重要的技术参考和开源实现。对于想了解扩散模型在 3D 领域应用的研究者和开发者,Point·E 依然是极好的学习范本。

图:图像 → 点云生成示例,模型根据输入图像推断 3D 结构

图:文本 → 点云生成示例,模型根据文本描述生成简单物体