Interactive Diffusion-Based 3D Generation Studio

CS 549 · Assignment 3 MVP · Minh Quan Dao (qd66) · Pillars: Procedural Generation + Rendering

connecting… GPU: –

1 Generate (text → 3D)

Gallery – click any model to render it

no runs yet

2 Real-time novel-view renderer

no model loaded
drag: orbit · wheel: zoom
CUDA rasterizer snapshots during SDS optimisation (front · side · back · side)
training snapshot strip

3 Optimisation monitor

SDS loss ½‖w(t)(ε̂−ε)‖² per step
Gradient norm reaching each Gaussian parameter (log)
Number of Gaussians (densify / prune)

4 Stress test

CUDA Gaussian rasterizer (DreamGaussian renderer, A100)

Forward render along a fixed 360° orbit, 10 warm-up frames excluded, synced timing; peak VRAM via torch.cuda.max_memory_allocated. Gaussian axis = k jittered clones per Gaussian at 512².

FPS vs output resolution
FPS vs Gaussian count (512²)
axisresGaussiansFPSVRAM MBnotes

Browser WebGL2 viewer (this page)

Same model replicated k× with jitter; FPS is requestAnimationFrame rate (display-capped), GPU ms from EXT_disjoint_timer_query when available, sort ms = worker depth sort.

kGaussianscanvasFPSGPU mssort ms

5 Improving DreamGaussian: guidance comparison (measured)

Same 5 prompts, seed 0, 500 steps, one free A100 per run. CLIP = ViT-L/14 similarity between prompt and 8 views (×100). CSD / NFSD / ISM are added on the same frozen SD 2.1 (scripts/guidance_plus.py); MVDream is upstream's multi-view guidance.

guidanceCLIPSDS timetotalVRAMverdict

MVDream step count

stepsCLIPtotalverdict
MVDream at 300, 500, 800 and 1200 steps
MVDream at 300 / 500 / 800 / 1200 steps: 500 is sharpest, more steps over-saturate.
front and back views for each guidance method
Front | back view per method. SDS gives the corgi a second face (Janus); MVDream is coherent and sharp.

6 What is running

  1. Text prompt yencoded once by the frozen SD-2.1-base text encoder
  2. 3D Gaussians θ5k random blob → positions, scales, rotations, opacity, colour
  3. Random camera celevation ±30°, full azimuth, radius 2.5
  4. Differentiable rasterizerCUDA tile splatting, x = g(θ, c), 128→512 px
  5. SDSadd noise at annealed t, UNet predicts ε̂ (CFG 100), ∇θ = w(t)(ε̂ − ε)·∂x/∂θ
  6. Adam + densify/prune500 steps; then save PLY, extract textured mesh

Plan vs. reality: Assignment 2 planned an SDS-guided NeRF (volume rendering). This MVP keeps the same diffusion-guided loop but optimises explicit 3D Gaussians with the official DreamGaussian code (Tang et al., ICLR 2024) for speed and feasibility. VSD and TRELLIS are not implemented.