Surfaces

A 3D model is a hollow shell — the camera only ever meets the skin. Graphics has three languages for that skin: an implicit equation, a parametric sweep of curves in two directions, and the triangle mesh everything becomes before the GPU. The craft is authoring in a smooth language and rendering in the mosaic one.

Core Idea

The sheet above is nothing but curves. Hold v still and walk u — that’s the gold sweep — and you trace a single cubic Bézier curve; the terracotta twin does the same in the other direction. Weave the two families together and you have a surface. That’s the first thing to know about 3D models; the second is stranger: every model is exactly this — a surface, a hollow shell with nothing inside. The camera only ever meets the skin, so graphics never bothers to fill the object. The whole discipline of geometry in CG is really the question: in what language do we describe a skin?

Three Languages for a Skin

Implicit — f(x) = 0. The surface is every point where a function returns zero: a sphere is x² + y² + z² − r² = 0, a plane is n·x − d = 0. Nothing is listed or stored — the surface is a condition, and membership is a function call. That makes implicit surfaces ideal for intersection math: substitute a ray into the equation and solve for t, which is the core move of ray tracing. Keep the value instead of just the zero-test and you get a signed distance field — the same idea promoted from verdict to measurement. The catch: complex implicit shapes are hard to author by hand, so in practice the family stays small — spheres, planes, and the SDF compositions built from them.

Parametric — P(u, v). Take the parametric curve P(t) and add a second dial. Two numbers in, a 3D point out; sweep both across [0, 1] and the outputs carpet a surface. This is the language of authoring, because the controls are geometric and draggable — the hero’s sixteen points are its entire definition.

Mesh — just triangles. List vertices, connect them into flat faces. No formula, no smoothness — and total dominance: every vertex is directly editable, decades of tools are built around polygon flow, and rasterization hardware eats exactly one primitive. The structure of meshes has its own article; what matters here is their role as the destination: whatever language a surface is authored in, it is tessellated — sampled into triangles — before the GPU sees it. The smooth languages are for people; the mosaic is for hardware.

Curves Woven in Two Directions

The hero’s construction is worth spelling out, because it’s the curves article’s math promoted one dimension with no new ideas:

P(u, v) = Σᵢ Σⱼ Bᵢ(u) · Bⱼ(v) · Pᵢⱼ        (i, j = 0…3)

A bicubic Bézier patch: a 4×4 grid of control points, weighted by the same Bernstein polynomials in u and again in v — a tensor product of two curve bases. Fix v and the formula collapses to an ordinary cubic Bézier whose four “control points” are themselves Bézier blends of the grid’s columns. Curves of curves. The Utah teapot — the most rendered object in graphics history — is 32 of these patches, and one patch is light enough that the hero evaluates its weave live every frame.

NURBS surfaces are the same tensor-product idea over B-spline bases, with one upgrade: each control point carries a weight, and rational weights can represent quadrics — spheres, cylinders, cones — exactly, which no plain polynomial can (the same limitation met in polynomials). That exactness is why NURBS still rule CAD/CAM, where “approximately a cylinder” is not a phrase engineers accept. Film and game pipelines, which only need looks right at this resolution, converted to polygons and subdivision long ago.

Subdivision: Author Low, Render High

The third way to get a smooth skin is to grow one out of a chunky mesh. Catmull-Clark subdivision takes any polygon cage and refines it: a new point at each face’s centroid, a new point on each edge (averaging its endpoints and the neighboring face points), originals repositioned by a weighted neighbor average, everything rewired into quads. Run it again and again and the mesh converges to a limit surface that is C2-smooth everywhere except at extraordinary vertices (valence ≠ 4), where it degrades to C1 — which is why modelers keep their cages quad-dominant and their pole vertices few and hidden.

The stepper shows the scheme’s one-dimensional shadow — edge midpoints inserted, originals repositioned, the true curve analog of the Catmull-Clark rules — and it also shows the point of the whole enterprise: after four rounds the curve has 128 vertices, and you are still only editing eight. Authoring resolution and rendering resolution are different numbers. The artist sculpts a cage of hundreds of faces; the renderer receives a limit-surface approximation of millions; the two never constrain each other. That separation, not the smoothing itself, is the insight — it’s the same division of labor as the patch (16 points, infinite surface) wearing mesh clothing.

Where the Skin Gets Its Facts

A parametric surface hands over more than positions. Its partial derivatives ∂P/∂u and ∂P/∂v are two tangent directions lying in the surface, and their cross product is the exact normal — no averaging, no approximation, straight from the formula. Tessellators bake those normals into the mesh’s vertices, which is why a coarsely triangulated patch can still light like the smooth thing it came from.

Connections

This article is the hinge of the geometry tier: curves supplies the one-parameter math that tensor products promote to patches, and meshes receives everything on the way to the GPU — tessellation is the bridge, and the mesh article’s “smoothness is a budget” is what these smooth languages spend their budget on. The implicit language runs through signed distance into ray marching, and classic ray tracing lives on solving implicit forms against rays. The exact-normals trick is the cross product doing its day job.

Open Questions