HelloAI
L5 第 7 篇 🐥 难度 🕒 12 分钟

3D 生成:NeRF / Gaussian Splatting / 文本到 3D

2D 之后的下一波 AI 内容革命——从一组照片重建 3D,从文字生成 3D 资产。

阿莱
2026/9/22

2D 图像 → 视频,下一站就是 3D。

2020 年还需要专业建模师几天才能做完的 3D 资产, 2025-2026 已经能从几张照片自动重建,或从一句话生成

这一篇讲两条主线:NeRFGaussian Splatting + 文本到 3D 的最新进展。

为什么 3D 难

之前几代 AI 都在 2D 像素空间。3D 难在哪:

难点解释
表示方式不一mesh / voxel / point cloud / 隐式表示,没标准
数据稀缺真实世界 3D 数据集远小于图像
视角一致性同一物体从不同角度看必须一致
物理 + 光照透明 / 反射 / 阴影都要正确建模
渲染管线复杂训练 + 推理涉及 rasterization / ray tracing

一、NeRF(2020):神经场革命

NeRF(Neural Radiance Fields):用神经网络表示一个 3D 场景

核心思想

不是存几何(mesh),而是存”任意 3D 点 + 任意视角方向 → 颜色 + 透明度”的函数:

Fθ(x,y,z,θ,ϕ)(R,G,B,σ)F_\theta(x, y, z, \theta, \phi) \to (R, G, B, \sigma)
  • 输入:3D 位置 + 观察方向(5 维)
  • 输出:颜色 + 不透明度
  • FθF_\theta 是一个小 MLP(~10 层)

渲染

对每个像素发射一条射线,沿射线采样多个 3D 点,查询 MLP 得到颜色/透明度,按 volume rendering 公式合成:

def render_pixel(ray_origin, ray_direction, nerf):
    # 沿射线采样 64 个点
    points = sample_along_ray(ray_origin, ray_direction, n=64)
    colors, densities = nerf(points)
    # Volume rendering 公式(α 合成)
    return alpha_composite(colors, densities)

训练

给 NeRF 一组多视角的真实照片(带相机姿态),训练目标:让每个像素的预测颜色匹配真实照片。

for batch_pixels in random_pixels:
    pred = render_pixel(ray, nerf)
    loss = ((pred - true_color) ** 2).mean()
    loss.backward()
    optimizer.step()

效果

训练完后,可以从任意新视角渲染照片级真实图像。

NeRF 的问题

  • 训练慢:单场景几小时
  • 推理慢:每像素要 64+ 次神经网络查询
  • 动态场景难:原版只能静态

后续工作:Instant-NGP(5 分钟训练)、NeRF-W、NeRF++、PixelNeRF(少样本泛化)等。

二、Gaussian Splatting(2023):性能革命

NeRF 用神经网络隐式表示,Gaussian Splatting 用百万个高斯椭球显式表示:

场景 = { (位置 μ, 协方差 Σ, 颜色 c, 透明度 α) × N 个椭球 }

每个椭球是一个”3D 高斯小团”,有自己的位置、大小、颜色、透明度。

渲染方法:splatting

不像 NeRF 一个像素采样 64 次——直接把每个椭球投影到 2D 屏幕上做 α 混合:

For each gaussian:
  project to screen
  splat as 2D ellipse with opacity
Sort gaussians by depth
α-blend in depth order

完全可微 + GPU 友好——比 NeRF 快 100×。

训练

也是用多视角照片做监督,但优化的是每个椭球的参数(位置、形状、颜色等)。

通过梯度下降 + 自适应增/删椭球(高残差地方加,无用的删)来收敛。

效果

  • 实时渲染(>30 FPS)—— NeRF 做不到
  • 视觉质量近似 NeRF
  • 训练快(10-30 分钟)

工业采用

Gaussian Splatting 短短 1 年就全面取代 NeRF在工业界的位置:

  • Unity / Unreal 都加了原生支持
  • Polycam、Luma AI 等 3D 扫描 App 用它做实时重建
  • VR / AR 内容生成

三、文本到 3D

NeRF / GS 都需要真实照片。但用户想要”文字一句话 → 3D 模型”。

DreamFusion(2022)

第一个有意义的工作:

prompt = "a red apple"

Score Distillation Sampling(SDS)
   - 初始化随机 NeRF
   - 从 NeRF 渲染当前视角图像
   - 用 2D Diffusion 模型(Imagen / SD)评估"这像 red apple 吗"
   - 把梯度回传到 NeRF
   - 重复

效果:可以生成 3D 物体,但质量一般、训练慢(小时级)。

Magic3D / Fantasia3D / Latent-NeRF(2023)

各种改进:用更好的 base model、更聪明的 SDS loss、更高分辨率优化。

Trellis / Trellis-XL(2024)

新一代:直接训一个 text → 3D 的扩散模型,跳过 SDS 迭代:

prompt

Text encoder

3D Diffusion (在某个 3D 表示空间)

3D 资产(可导出为 mesh)

效果:

  • 数秒钟生成可用的 3D 模型
  • 质量远超 SDS-based 工作
  • 微软开源,社区在跟进

商业产品现状(2026)

工具输入输出质量
Meshy文字 / 图像含贴图的 mesh商业可用
Tripo AI单张图高质量 mesh接近游戏级
Luma AI文字 / 视频 / 多照片NeRF / GS / mesh现实场景强
Polycam手机扫描GS / mesh消费级
Adobe Substance 3D Sampler单图 + AIPBR 材质专业级

应用场景

  • 游戏:自动生成 NPC / 场景 / 道具
  • 影视:previz / 概念图 → 3D 资产
  • 电商:从一张产品照片生成 360° 可旋转模型
  • AR / VR:3D 内容大众化
  • 机器人:仿真训练用的 3D 环境快速生成
  • 建筑 / 设计:从手稿到 3D 模型

4D 生成(动态 3D + 时间)

下一站:不是静态 3D 物体,而是会动的场景

  • 4D Gaussian Splatting:每个高斯椭球随时间变化
  • Make-A-Video3D:文字 → 动态 3D
  • DreamGaussian4D

预计 2027 起会有”文字 → 完整可漫游 3D 场景”的产品。

与多模态 LLM 的关系

GPT-4V / Claude 3.5 已经能”看图”——但不能”理解 3D 几何”。

下一代研究:

  • Vision Language Models for 3D(PointLLM、3D-LLM)
  • Genie 2 / SIMA:理解 + 生成可交互 3D 世界

3D 是从”看图说话”到”理解 + 操作物理世界”的桥梁—— 连接 LLM 和具身智能(embodied AI、robotics)的关键。

代码:训一个最小 NeRF

import torch
import torch.nn as nn

class TinyNeRF(nn.Module):
    def __init__(self, hidden=128):
        super().__init__()
        # 位置编码 (positional encoding) 让 MLP 学到高频细节
        self.L = 10  # 编码层数
        in_dim = 3 * (2 * self.L + 1)  # x, y, z + sin/cos
        self.mlp = nn.Sequential(
            nn.Linear(in_dim, hidden), nn.ReLU(),
            nn.Linear(hidden, hidden), nn.ReLU(),
            nn.Linear(hidden, hidden), nn.ReLU(),
            nn.Linear(hidden, 4)  # rgb + density
        )

    def positional_encoding(self, x):
        out = [x]
        for i in range(self.L):
            for fn in [torch.sin, torch.cos]:
                out.append(fn((2**i) * x))
        return torch.cat(out, dim=-1)

    def forward(self, points):
        # points: (N, 3)
        encoded = self.positional_encoding(points)
        out = self.mlp(encoded)
        rgb = torch.sigmoid(out[..., :3])
        density = torch.relu(out[..., 3])
        return rgb, density

50 行 + 几小时 GPU 训练 = MIT Lego 数据集上能跑出来。

💡 一个观察

2D → 3D 是 AIGC 的下一个 100× 增长方向

类比:

  • 2010 年 2D 图像 AI = 学术问题
  • 2022 年 Stable Diffusion = 每个人都能用
  • 2023 年 3D AI = 学术问题
  • 2026-2028 年 3D AI = 每个人都能用?

当文字 → 3D 可游玩世界变得便宜—— 游戏、影视、建筑、零售、教育全部被改写。

这是值得长期关注的方向。

下一篇推荐:L5-06 视频生成L5-02 Diffusion 数学

🚧 3 个常见坑

⚠️ 实战避坑

坑 1:混淆 NeRF / Gaussian Splatting / Mesh 三者用途不同:NeRF 用于渲染、3DGS 用于实时、Mesh 用于游戏/3D 打印——选错路线返工成本高。

坑 2:以为单图就能重建好 3D 单图 → 3D 必然有歧义(背面信息丢失)——需要多视角 / video / 文本辅助。

坑 3:忽略 watertight / topology AI 生成的 3D 网格常有破洞 / 非流形——下游用于 3D 打印 / 物理模拟前要 retopology。

🔗 被以下 1 篇文章引用
📬

读到这里说明你认真在学 🎯

订阅每周精选 —— 下一篇新文章 / 新可视化第一时间送到邮箱。

💬

讨论区

· 用 GitHub 账号登录评论
⚠️ Giscus 评论未配置 —— 在 src/components/Comments.astro 顶部填入 仓库 ID 和分类 ID(见组件注释里的配置步骤)。