Part III of III — Descent via Photogrammetry

Gaussian Descent

Distributional Objects, Pushforward Rendering, and Real-Time Sheaf Evaluation
The mesh is the fully descended object — combinatorial, rigid, geometric. The NeRF is the sheaf that refuses to descend — pure functor, never materialized. The 3D Gaussian sits exactly between them: it descends, but into distributions, not geometry. It lives on $X$ as a measure, not a manifold.

Parts I and II established the dictionary between Grothendieck’s descent theory and photogrammetry. We ended with NeRF — McLarty’s sheaf that refuses to descend, encoding the functor of views without ever constructing a base object. But 2023 introduced a representation that complicates the taxonomy in the most illuminating way: 3D Gaussian Splatting.

A 3D Gaussian splat is not a mesh. It is not a NeRF. It is a cloud of anisotropic Gaussians in 3D space — each one a little oriented ellipsoid with position $\boldsymbol{\mu}$, covariance $\boldsymbol{\Sigma}$, opacity $\alpha$, and view-dependent color encoded in spherical harmonics. It does live on the base space $X$. It has descended. But what has descended is not a geometric submanifold — it is a measure.

Section 01

The Spectrum of Descent

The representations used in 3D reconstruction form a spectrum, ordered by how much of the base object $X$ they actually materialize:

Mesh Combinatorial
Point Cloud Discrete
3D Gaussians Distributional
NeRF Functional
← fully descended never descends →
The Descent Spectrum
Mesh: the fully descended object. Vertices, edges, faces — a combinatorial structure on $X$.

The mesh is $X$ given a CW-complex structure — combinatorial, rigid, with explicit topology. The point cloud discards the combinatorics but keeps the discrete samples. The 3D Gaussian replaces discrete points with continuous distributions. And the NeRF abandons the base entirely, storing only the functor. Each step trades geometric commitment for representational flexibility.

Category-Theoretic Reading
The mesh lives in $\textbf{Top}$ (topological spaces). The point cloud lives in $\textbf{Set}$ (discrete). The 3D Gaussian representation lives in $\textbf{Meas}$ (measurable spaces / the category of measures on $X$). The NeRF lives in $\textbf{Fun}(\mathcal{C}^{\mathrm{op}}, \textbf{Set})$ — the presheaf category. Each is a different target category for the descended object.
Section 02

3D Gaussians as Measures on $X$

Each 3D Gaussian is defined by five attributes: a position $\boldsymbol{\mu} \in \mathbb{R}^3$, a covariance $\boldsymbol{\Sigma} \in \text{Sym}^+_3(\mathbb{R})$ (encoded as a rotation quaternion $\mathbf{q}$ and scale vector $\mathbf{s}$), an opacity $\alpha \in [0,1]$, and color coefficients in spherical harmonics $\{c_\ell^m\}$.

$$G(\mathbf{x}) = \alpha \cdot \exp\!\left(-\tfrac{1}{2}(\mathbf{x}-\boldsymbol{\mu})^\top \boldsymbol{\Sigma}^{-1} (\mathbf{x}-\boldsymbol{\mu})\right)$$

The full scene is a mixture of measures: $\mu_{\text{scene}} = \sum_{k=1}^{N} \alpha_k \, \mathcal{N}(\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)$. This object lives on $X$ — it has descended from the views into 3D space. But it is not a submanifold. It is a distribution in the measure-theoretic sense: a weighted sum of Gaussians that approximates the density of the scene.

Gaussian Primitives — $G_k(\mathbf{x}) = \alpha_k \cdot \mathcal{N}(\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)$
120
0.5
drag to orbit
Gaussian center $\boldsymbol{\mu}_k$
Covariance ellipsoid $\boldsymbol{\Sigma}_k$
Scene wireframe (reference)
Each ellipsoid is one 3D Gaussian — an oriented, anisotropic distribution in space. Together they form a measure on $X$.

Notice how the Gaussians cluster on surfaces, edges, and detail regions. They are not uniformly distributed — the optimization process (which we’ll see shortly) adaptively densifies them where the scene has high-frequency detail and prunes them where the scene is smooth. This is the measure adapting its support to the geometry of $X$.

Section 03

Splatting as Pushforward $\pi_{i*}$

To render a view from the Gaussians, you project each 3D Gaussian through the camera. A 3D Gaussian $\mathcal{N}(\boldsymbol{\mu}, \boldsymbol{\Sigma})$ under an affine projection $\pi_i$ becomes a 2D Gaussian $\mathcal{N}(\pi_i(\boldsymbol{\mu}), J \boldsymbol{\Sigma} J^\top)$ where $J$ is the Jacobian of the projection.

This is the pushforward of measures: $\pi_{i*}\mu = \mu \circ \pi_i^{-1}$. In Part I we saw the pullback $\pi_i^*$ — the camera lifting structure from the base to a flat image. Now we go the other direction. The pushforward takes the 3D measure and splats it onto the image plane.

$$\boldsymbol{\Sigma}_{2D} = J \, W \, \boldsymbol{\Sigma} \, W^\top J^\top$$

where $W$ is the world-to-camera transform and $J$ is the projection Jacobian. The 3D ellipsoid becomes a 2D ellipse on screen — the "splat."

Splatting — Pushforward $\pi_{i*}: \textbf{Meas}(X) \to \textbf{Meas}(\mathbb{P}^2)$
30°
3D Gaussian ellipsoids
2D splats (pushforward)
Camera + projection rays
Each 3D Gaussian is pushed forward through the camera map to become a 2D elliptical splat. The covariance transforms via the Jacobian.
Pullback vs Pushforward
In Part I: the camera computes the pullback $\pi_i^*$ — it lifts geometry from $X$ to the image plane, destroying the fiber. Here: the renderer computes the pushforward $\pi_{i*}$ — it projects the 3D measure down to a 2D measure on the image. The pullback is informational (what does the camera see?). The pushforward is computational (how do we render the view?). They are adjoint operations: $\langle \pi_{i*} \mu, f \rangle = \langle \mu, \pi_i^* f \rangle$.
Section 04

The Differentiable Loop: Gradient Flow on the Descended Object

Here is where 3D Gaussian Splatting diverges from classical photogrammetry. In the traditional pipeline, you reconstruct once: establish correspondences, triangulate, adjust, done. In 3DGS, reconstruction is a continuous optimization — a gradient flow on the space of measures.

The loss function is the photometric error between the rendered image and the ground-truth photograph:

$$\mathcal{L} = (1-\lambda)\,\mathcal{L}_1(\hat{I}, I_{\text{gt}}) + \lambda\,\mathcal{L}_{\text{D-SSIM}}(\hat{I}, I_{\text{gt}})$$

Because the entire rendering pipeline — projection, splatting, alpha compositing — is differentiable, gradients flow back through the image into every Gaussian parameter: $\nabla_{\boldsymbol{\mu}} \mathcal{L}$, $\nabla_{\boldsymbol{\Sigma}} \mathcal{L}$, $\nabla_\alpha \mathcal{L}$, $\nabla_{\text{SH}} \mathcal{L}$.

Differentiable Optimization Loop
Iteration
0
Loss (L1)
Active Gaussians
Densified
0
Pruned
0
Click Step or Run. Watch Gaussians migrate toward the target, split in high-gradient regions, and get pruned when transparent.

The adaptive density control is the crucial mechanism. Gaussians in regions of high positional gradient — where the current rendering poorly matches the ground truth — get split (large Gaussians) or cloned (small ones) to increase detail. Gaussians with near-zero opacity get pruned. The measure adapts its own support during optimization.

Descent-Theoretic Reading
The optimization is a gradient flow on the moduli space of measures on $X$. The loss function measures the discrepancy between the pushforward $\pi_{i*}\mu$ and the observed image $I_i$. At convergence, $\pi_{i*}\mu \approx I_i$ for all training views $i$ — meaning the measure $\mu$ is a valid descended object whose pullbacks (projections) match the cover data. Densification and pruning are the measure refining its topology to better satisfy the descent condition.
Section 05

Alpha Compositing: The Volume Rendering Integral, Discretized

Once the 2D splats are computed, they must be composited into a final pixel color. This is done by sorting the Gaussians by depth and blending front-to-back:

$$C(\mathbf{p}) = \sum_{k=1}^{N} c_k \, \alpha_k \, G_k^{2D}(\mathbf{p}) \prod_{j=1}^{k-1} \left(1 - \alpha_j \, G_j^{2D}(\mathbf{p})\right)$$

This is the discrete analogue of the volume rendering integral from NeRF:

$$\hat{C}(\mathbf{r}) = \int_0^\infty T(t)\,\sigma(\mathbf{r}(t))\,\mathbf{c}(\mathbf{r}(t), \mathbf{d})\,dt \quad\text{where}\quad T(t) = \exp\!\left(-\int_0^t \sigma(\mathbf{r}(s))\,ds\right)$$

The NeRF evaluates this integral by marching along each ray and sampling the density field at discrete points. The Gaussian splatter achieves the same result by projecting each primitive to 2D and blending analytically. Same integral, different computational strategy — and the Gaussian version is orders of magnitude faster.

Alpha Compositing — Front-to-Back Blending
8
Individual splat $c_k \alpha_k$
Accumulated color $C$
Transmittance $T_k$
Click "Step Through" to composite one splat at a time. Watch transmittance decrease and color accumulate front-to-back.
Section 06

Real-Time Rendering: The Functor Evaluated at 60fps

The practical miracle of 3D Gaussian Splatting is that the entire pipeline — sort by depth, project to 2D ellipses, alpha-composite front-to-back — runs in real time. Not "research demo" real time. Not "if you have an A100" real time. Consumer GPU, 60+ frames per second, 1080p, real time.

What this means, in the descent vocabulary: you can evaluate the functor of views at interactive rates. Pick any probe $T$ — any camera position and orientation — and the pushforward $\pi_{T*}\mu$ is computed and displayed before the next frame. The sheaf answers queries in real time.

Real-Time Gaussian Splatting — $\pi_{T*}\mu$ at Interactive Rates
drag to orbit • scroll to zoom
Gaussians Rendered
Frame Time
Camera Pose
Orbit the camera freely. Every frame is a fresh evaluation of the pushforward π_{T*}μ — the functor of views computed in real time.

Each frame you see is a new element of $h_X(T) = \text{Hom}(T, X)$. The 3D Gaussians are the descended object $\mu$ on $X$; the rendering pipeline computes $\pi_{T*}\mu$ for your current camera $T$; and the pixels on screen are the answer. You are querying the Yoneda functor at 60fps.

The Speed Hierarchy
NeRF renders a single frame in seconds to minutes (ray-marching MLP, hundreds of samples per ray). 3DGS renders the same frame in milliseconds (project, sort, blend — all parallelizable on GPU). The mathematical content is identical: both evaluate $T \mapsto \pi_{T*}\mu$. The difference is computational architecture. The Gaussian representation trades the NeRF’s compact implicit encoding for an explicit but larger set of primitives — and gains five orders of magnitude in rendering speed.
Section 07

The Complete Hierarchy

We can now place every representation in the taxonomy of descent. The question is always the same: how much of $X$ do you materialize?

RepresentationDescended?Category of ObjectRendering Cost
Triangle MeshFully$\textbf{Top}$ — combinatorial manifoldRasterization — ms
Point CloudDiscrete samples$\textbf{Set}$ — discrete subset of $X$Point splatting — ms
3D GaussiansAs a measure$\textbf{Meas}$ — mixture of Gaussians on $X$Sort + blend — ms
NeRF (MLP)Never$\textbf{Fun}(\mathcal{C}^{\text{op}}, \textbf{Set})$ — sheaf / functorRay march MLP — seconds
3D Gaussian + SHAs a decorated measure$\textbf{Meas} \times \textbf{Fun}(S^2, \textbf{Vect})$Sort + blend + SH eval — ms

The spherical harmonics deserve a footnote. The color of each Gaussian is not a fixed RGB value — it is a function on the sphere $S^2$ of viewing directions, encoded as spherical harmonic coefficients up to degree $\ell$. This means the color is itself a small sheaf: $\mathbf{d} \mapsto c(\mathbf{d})$. The descended object carries, at each point, a local version of the NeRF functor. The measure descends. The color stays a sheaf.

The Final Dictionary Entry
Descent Theory3D Gaussian SplattingWhy It's Not Metaphor
Descended object in $\textbf{Meas}(X)$Cloud of 3D GaussiansThe measure $\mu = \sum \alpha_k \mathcal{N}(\mu_k, \Sigma_k)$ on the base
Pushforward $\pi_{T*}$Splatting (projection)$J \Sigma J^\top$ transforms 3D Gaussians to 2D ellipses
Sheaf evaluation at $T$Real-time renderingCompute $\pi_{T*}\mu$ at 60fps for any camera $T$
Gradient flow on $\textbf{Meas}(X)$Differentiable optimization$\nabla \mathcal{L}$ flows back through rendering to update $\mu$
Refinement of supportAdaptive density controlDensification and pruning adapt the measure's topology
Section of view-dependent bundleSpherical harmonics$c(\mathbf{d})$ encodes a local sheaf on $S^2$ at each Gaussian
The engineers arrived at the same structure by different roads. Grothendieck descended from fibered categories through faithfully flat morphisms. Kerbl, Kopanas, Leimkühler and Drettakis descended from photographs through differentiable Gaussian splatting. The theorem is the same: coherent local data, if they satisfy the cocycle condition, determine a global object. The only question is what category you descend into. A mesh descends into topology. A NeRF refuses to descend at all. And the 3D Gaussian — the surprise of 2023 — descends into measures. The functor of views is primary. The representation is a choice.