HelloAI
L5 Chapter 7 🐥 🕒 11 min

3D Generation: NeRF / Gaussian Splatting / Text-to-3D

The next wave of AI content after 2D — reconstruct 3D from a few photos, generate 3D assets from text.

A
Alai
9/22/2026

After 2D image → video, the next stop is 3D.

3D assets that took a professional modeler days to build in 2020, in 2025-2026 can be auto-reconstructed from a few photos or generated from a single sentence.

This piece covers the two main lines: NeRF and Gaussian Splatting, plus the latest in text-to-3D.

Why 3D is hard

Previous AI generations operated in 2D pixel space. 3D’s challenges:

ChallengeWhy
No standard representationMesh / voxel / point cloud / implicit — no single winner
Data scarcityReal-world 3D datasets are much smaller than image datasets
View consistencyThe same object must look consistent from any angle
Physics + lightingTransparency / reflections / shadows must be modeled
Complex rendering pipelinesTraining + inference involve rasterization / ray tracing

1. NeRF (2020): Neural Field Revolution

NeRF (Neural Radiance Fields): represent a 3D scene with a neural network.

Core idea

Don’t store geometry (a mesh) — store a function “any 3D point + any view direction → color + opacity”:

Fθ(x,y,z,θ,ϕ)(R,G,B,σ)F_\theta(x, y, z, \theta, \phi) \to (R, G, B, \sigma)
  • Input: 3D position + view direction (5D)
  • Output: color + opacity
  • FθF_\theta is a small MLP (~10 layers)

Rendering

For each pixel, cast a ray, sample multiple 3D points along it, query the MLP for colors/opacities, composite via volume rendering:

def render_pixel(ray_origin, ray_direction, nerf):
    # sample 64 points along the ray
    points = sample_along_ray(ray_origin, ray_direction, n=64)
    colors, densities = nerf(points)
    # Volume rendering (α-compositing)
    return alpha_composite(colors, densities)

Training

Given a set of multi-view real photos (with camera poses), the training target is to make each pixel’s predicted color match the photo.

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

Result

After training, you can render photorealistic images from any new viewpoint.

NeRF’s problems

  • Slow training: hours per scene
  • Slow inference: 64+ network queries per pixel
  • Hard with dynamic scenes: original NeRF is static-only

Follow-ups: Instant-NGP (5-minute training), NeRF-W, NeRF++, PixelNeRF (few-shot generalization), etc.

2. Gaussian Splatting (2023): Performance Revolution

Where NeRF uses an implicit neural representation, Gaussian Splatting uses millions of explicit 3D Gaussian ellipsoids:

Scene = { (position μ, covariance Σ, color c, opacity α) × N ellipsoids }

Each ellipsoid is a “3D Gaussian blob” with its own position, size, color, and opacity.

Rendering: splatting

Unlike NeRF’s 64 samples per pixel — directly project each ellipsoid onto the 2D screen and α-blend:

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

Fully differentiable + GPU-friendly — 100× faster than NeRF.

Training

Also supervised with multi-view photos, but optimizing the parameters of each ellipsoid (position, shape, color, etc.).

Gradient descent + adaptive ellipsoid insertion/deletion (add where residuals are high, prune useless ones) drives convergence.

Result

  • Real-time rendering (>30 FPS) — NeRF can’t do this
  • Visual quality comparable to NeRF
  • Fast training (10-30 minutes)

Industry adoption

Within a year, Gaussian Splatting has largely replaced NeRF in industry:

  • Unity / Unreal both added native support
  • Polycam, Luma AI and other 3D scanning apps use it for real-time reconstruction
  • VR / AR content generation

3. Text-to-3D

NeRF / GS both need real photos. But users want “one sentence → 3D model.”

DreamFusion (2022)

The first meaningful result:

prompt = "a red apple"

Score Distillation Sampling (SDS)
   - Initialize a random NeRF
   - Render the current viewpoint
   - Have a 2D Diffusion model (Imagen / SD) score "does this look like a red apple?"
   - Backprop gradients into the NeRF
   - Repeat

Result: generates 3D objects, but quality is mediocre and training is slow (hours).

Magic3D / Fantasia3D / Latent-NeRF (2023)

Various improvements: better base models, smarter SDS losses, higher-resolution optimization.

Trellis / Trellis-XL (2024)

New generation: directly train a text → 3D diffusion model, skip SDS iteration:

prompt

Text encoder

3D Diffusion (in some 3D representation space)

3D asset (exportable as mesh)

Result:

  • Usable 3D model in seconds
  • Quality far exceeds SDS-based work
  • Open-sourced by Microsoft, community building on it

Commercial products (2026)

ToolInputOutputQuality
MeshyText / imageMesh with texturesCommercially usable
Tripo AISingle imageHigh-quality meshNear game-grade
Luma AIText / video / photosNeRF / GS / meshStrong for real scenes
PolycamPhone scanGS / meshConsumer-grade
Adobe Substance 3D SamplerSingle image + AIPBR materialsProfessional

Applications

  • Games: auto-generate NPCs / scenes / props
  • Film/TV: previz / concept art → 3D assets
  • E-commerce: from one product photo to a 360° rotatable model
  • AR / VR: democratize 3D content
  • Robotics: rapid 3D environments for simulation training
  • Architecture / design: from sketch to 3D model

4D generation (dynamic 3D + time)

Next stop: not static objects but scenes that move:

  • 4D Gaussian Splatting: each Gaussian evolves over time
  • Make-A-Video3D: text → dynamic 3D
  • DreamGaussian4D

By 2027, expect “text → fully walkable 3D scene” products.

Relationship to multimodal LLMs

GPT-4V / Claude 3.5 can “see images” — but can’t “understand 3D geometry.”

Next-gen research:

  • Vision-Language Models for 3D (PointLLM, 3D-LLM)
  • Genie 2 / SIMA: understand + generate interactive 3D worlds

3D is the bridge from “describe an image” to “understand + manipulate the physical world” — crucial for connecting LLMs to embodied AI / robotics.

Code: train a tiny NeRF

import torch
import torch.nn as nn

class TinyNeRF(nn.Module):
    def __init__(self, hidden=128):
        super().__init__()
        # Positional encoding lets MLPs learn high-frequency detail
        self.L = 10  # number of frequencies
        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 lines + a few hours of GPU training = something that works on the MIT Lego dataset.

💡 An observation

2D → 3D is the next 100× growth direction for AIGC.

Analogy:

  • 2010: 2D image AI = academic problem
  • 2022: Stable Diffusion = everyone can use
  • 2023: 3D AI = academic problem
  • 2026-2028: 3D AI = everyone can use?

Once text → playable 3D world becomes cheap — games, film, architecture, retail, education all get rewritten.

This is a direction worth watching long-term.

Next: L5-06 Video Generation or L5-02 Diffusion Math.

🚧 3 Common Pitfalls

⚠️ Real-world traps

Pitfall 1: Confusing NeRF / Gaussian Splatting / Mesh They serve different goals: NeRF for rendering, 3DGS for real-time, Mesh for games / 3D printing — picking the wrong path costs rework.

Pitfall 2: Thinking a single image is enough for good 3D Single-image → 3D is inherently ambiguous (no back-side info) — needs multi-view / video / text guidance.

Pitfall 3: Ignoring watertight / topology AI-generated meshes often have holes / non-manifold geometry — for 3D printing or physics simulation, retopologize first.