Skip to content

Glossary

The words, without the hand-waving.

55 terms this site actually uses, defined in plain language. 43 of them link to a lab that demonstrates the idea, because the fastest definition of “perspective divide” is a slider that performs one.

A
AliasingSee it · Textures & Sampling
What happens when a signal is sampled too sparsely to represent it — jagged edges, and the crawling shimmer on a detailed texture seen at a distance. Mipmaps and anti-aliasing are two different answers to it.
See alsoMipmapFilteringRasterisation
Attribute
Per-vertex input to a vertex shader — position, normal, colour, texture coordinate. Each vertex gets its own value, read from a buffer you describe the layout of.
See alsoUniformVaryingVertex
B
Backface culling
Discarding triangles that face away from the camera before they are rasterised, decided by winding order. Roughly halves the work on a closed shape, and makes a model with inconsistent winding look full of holes.
See alsoWinding orderRasterisation
Basis vectorsSee it · The Model Matrix
The three vectors a transform sends the x, y and z axes to. They are literally the first three columns of the matrix, which is why colouring those columns and colouring the axes on screen shows the same thing twice.
See alsoModel matrixHomogeneous coordinatesVertex
BatchingSee it · Draw Calls & Instancing
Merging things that would have been separate draw calls into one — same material, same buffer, submitted together. Instancing is the case where the merged objects are identical; batching more generally is why engines fight so hard to keep materials uniform.
See alsoDraw callInstancing
C
Clip spaceSee it · Coordinate Spaces
Where vertices land after the projection matrix and before the perspective divide. Coordinates are homogeneous — a point survives clipping when each of x, y and z lies within ±w. Still a pyramid at this point, not a cube.
See alsoNDCPerspective divideHomogeneous coordinates
Composition orderSee it · The Model Matrix
The order matrices are multiplied in, which is not commutative and reads right to left: in T · R · S the scale reaches the vertex first. Swap two and the object goes somewhere else entirely.
See alsoModel matrixBasis vectors
Compute shaderSee it · Compute & Particles
A shader that is not part of the drawing pipeline. It has no vertices and no fragments — just a grid of invocations reading and writing buffers. WebGL has no such stage at all.
See alsoWorkgroupStorage bufferShader
CPU-boundSee it · Draw Calls & Instancing
When the frame time is set by how fast the CPU can prepare and submit work rather than by how fast the GPU can execute it. The tell is that reducing triangles changes nothing while reducing draw calls changes everything.
See alsoDraw callInstancing
D
Depth buffer
A per-pixel record of how far away the nearest thing drawn so far is, so a fragment behind it can be discarded. Also called the z-buffer. It is why you can draw geometry in any order and still get correct occlusion.
See alsoFragmentNDC
Draw callSee it · Draw Calls & Instancing
One instruction from the CPU telling the GPU to render something. Each one costs CPU time to validate and submit whether it draws two triangles or two million, which is why a scene can be limited by how many times you asked rather than by how much you asked for.
See alsoInstancingCPU-boundBatching
F
FilteringSee it · Textures & Sampling
How the sampler combines texels. Nearest takes one; bilinear blends four; trilinear blends bilinear results from two mip levels. Minification and magnification are set separately because they are different problems.
See alsoMipmapTexelAliasing
Flat shadingSee it · Light & Normals
One normal per triangle, so each face is a single constant colour. You are seeing the mesh rather than the surface it approximates, which is sometimes exactly what you want.
See alsoNormalGouraud shading
Fragment
A candidate pixel produced by rasterising a triangle — it has a position, interpolated attributes and a depth, but has not yet won its place in the framebuffer. A fragment shader runs once per fragment.
See alsoRasterisationShaderDepth buffer
FrustumSee it · Projection & the Frustum
The truncated pyramid of space a perspective camera can see, bounded by the near and far planes. Not a thing you build: it is the canonical clip cube pulled back through the inverse of the projection matrix.
See alsoNear and far planesProjection matrixClip space
G
GammaSee it · Colour & Gamma
The exponent relating an encoded colour value to the light it stands for — about 2.2 for sRGB. Raising a value to that power decodes it to light; the reciprocal encodes it back.
See alsosRGBLinear colour
Gamma correctionSee it · Colour & Gamma
Decoding colours to linear before lighting them and encoding the result back for display. Skipping it does not throw an error or look obviously broken — it darkens midtones and hardens the terminator, which reads as a lighting choice, which is why it ships.
See alsoGammaLinear coloursRGB
GLSL
The OpenGL Shading Language, used by WebGL. C-like, with first-class vector and matrix types. Its WebGPU counterpart is WGSL.
See alsoWGSLShader
Gouraud shadingSee it · Light & Normals
Lighting computed once per vertex, with the resulting colour interpolated across the triangle. Cheap, and it loses any highlight smaller than a triangle — which is most of them.
See alsoPhong shadingFlat shadingVarying
H
Homogeneous coordinatesSee it · The Model Matrix
Adding a fourth component, w, to a 3D point so that translation becomes a matrix multiply like everything else. Points carry w = 1; directions carry w = 0, which is why translating a direction correctly does nothing.
See alsoPerspective divideClip space
I
Instance indexSee it · Draw Calls & Instancing
The counter a vertex shader reads to know which copy it is drawing — `gl_InstanceID` in GLSL, `@builtin(instance_index)` in WGSL. It is what turns one set of vertices into a field of objects, by indexing per-instance data with it.
See alsoInstancingStorage bufferVertex
InstancingSee it · Draw Calls & Instancing
Drawing the same geometry many times in one call, with per-instance data supplying what differs. The saving is not in triangles but in draw calls, which is usually where the CPU time actually goes.
See alsoDraw callInstance indexBatching
L
LambertSee it · Light & Normals
The diffuse term: brightness proportional to how squarely a surface faces the light, and nothing else. It is the cosine of the angle between the normal and the light direction, clamped at zero so surfaces turned away are unlit rather than negatively lit.
See alsoNormalSpecular highlightLinear colour
Linear colourSee it · Colour & Gamma
Colour whose numbers are proportional to actual light, so doubling the number doubles the brightness. The only space in which adding two lights together, or multiplying by a Lambert term, means what the arithmetic says it means.
See alsosRGBGamma correctionLambert
M
MipmapSee it · Textures & Sampling
The same texture pre-shrunk by half repeatedly, so there is always a level where one texel is about one pixel. Costs a third more memory and removes an entire class of artefact.
See alsoAliasingFilteringTexel
Model matrixSee it · The Model Matrix
Places an object in the world: its translation, rotation and scale combined. The only matrix in the chain you usually author by hand.
See alsoView matrixProjection matrixModel space
Model spaceSee it · Coordinate Spaces
The coordinate system a mesh was authored in, centred on its own origin. Nothing has happened to it yet.
See alsoWorld spaceModel matrix
N
NDCSee it · Coordinate Spaces
Normalised device coordinates: what you get after dividing clip space by w. A cube from −1 to 1 on every axis. Everything outside it is discarded, and everything inside it is about to become pixels.
See alsoClip spacePerspective divideViewport
Near and far planesSee it · Projection & the Frustum
The front and back of the frustum. They are a hard clip, not a fade — geometry crossing them is cut. Putting near too close crushes depth precision, which is where z-fighting comes from.
See alsoFrustumDepth buffer
NormalSee it · Light & Normals
A unit vector perpendicular to a surface at a point, describing which way it faces. Lighting is almost entirely a question of the angle between the normal and the light.
See alsoNormal matrixFlat shading
Normal matrixSee it · Light & Normals
The inverse-transpose of the model matrix, used to transform normals. A normal describes an orientation, not a position, so scaling one axis must tilt it rather than squash it. Under uniform scale it reduces to the model matrix, which is why getting this wrong stays invisible for so long.
See alsoNormalModel matrix
O
Orthographic projectionSee it · Projection & the Frustum
A projection whose view volume is a box rather than a pyramid. w stays 1, so no perspective divide happens and distance never changes size. Right for CAD and isometric games, wrong for anything meant to look photographed.
See alsoPerspective projectionProjection matrix
P
Perspective divideSee it · Coordinate Spaces
Dividing x, y and z by w, performed by the GPU between the vertex shader and rasterisation. This single division is what makes distant things small — the projection matrix only arranges for w to carry the depth.
See alsoClip spaceNDCHomogeneous coordinates
Perspective projectionSee it · Projection & the Frustum
A projection whose view volume is a frustum. Its defining feature is a −1 in the bottom row, which copies −z into w so the divide can shrink things with distance.
See alsoOrthographic projectionFrustumPerspective divide
Phong shadingSee it · Light & Normals
Interpolating the normal across a triangle and computing lighting per fragment. More expensive than Gouraud and it puts highlights where they belong. Not to be confused with the Phong reflection model, which is the equation rather than where you evaluate it.
See alsoGouraud shadingSpecular highlightFragment
Projection matrixSee it · Projection & the Frustum
Turns view space into clip space, deciding the shape of the visible volume — field of view, aspect ratio, near and far. It does not itself divide anything.
See alsoPerspective projectionClip spaceView matrix
R
Rasterisation
Working out which pixels a triangle covers, and interpolating the vertex outputs across them. The step between geometry and fragments, and the reason GPUs are shaped the way they are.
See alsoFragmentVarying
S
Shader
A small program that runs on the GPU, once per vertex or once per fragment, in parallel across thousands of them. Vertex shaders decide where things are; fragment shaders decide what colour they are.
See alsoGLSLWGSLFragment
Specular highlightSee it · Light & Normals
The bright spot where a surface reflects the light source towards the eye. Its tightness is controlled by a shininess exponent; its presence is most of what makes a material look wet, polished or metallic.
See alsoPhong shadingNormal
sRGBSee it · Colour & Gamma
The colour space almost every image, screen and colour picker uses. It is deliberately non-linear — more of its range is spent on dark tones, because eyes are more sensitive there — which means the numbers in it are not proportional to light.
See alsoLinear colourGammaGamma correction
Storage bufferSee it · Compute & Particles
GPU memory a shader can write to as well as read, unlike a uniform. It is what lets simulation state live on the GPU across frames instead of being shipped back and forth.
See alsoCompute shaderUniformWorkgroup
T
TexelSee it · Textures & Sampling
One pixel of a texture, as opposed to one pixel of the screen. The whole business of texture filtering is deciding what to do when those two do not line up.
See alsoTextureMipmapFiltering
TextureSee it · Textures & Sampling
An image sampled by a shader. Usually colour, but just as often a normal map, a height field, a mask, or an arbitrary lookup table — to the GPU it is only structured memory you can interpolate.
See alsoTexelUV coordinatesFiltering
U
Uniform
A value that is the same for every vertex and fragment in a draw call — a matrix, a light direction, the current time. Set from JavaScript, read-only inside the shader.
See alsoAttributeShader
UV coordinatesSee it · Textures & Sampling
The 2D coordinates that say where on a texture a vertex samples from, conventionally 0 to 1 across the image. Called u and v so as not to collide with x, y and z.
See alsoTextureWrap modeAttribute
V
Varying
A value passed from the vertex shader to the fragment shader, interpolated across the triangle on the way. The mechanism behind Gouraud shading, texture coordinates and smooth colour.
See alsoAttributeRasterisationGouraud shading
Vertex
A point of geometry with attributes attached. Not quite the same as a corner: two faces meeting at one corner need two vertices if their normals differ.
See alsoAttributeFlat shading
View matrixSee it · Coordinate Spaces
Moves the world so the camera sits at the origin looking down −Z. There is no camera object on a GPU; there is only this inverse.
See alsoView spaceModel matrixProjection matrix
View spaceSee it · Coordinate Spaces
Coordinates relative to the camera, after the view matrix. The camera is at the origin here, by construction.
See alsoView matrixWorld space
ViewportSee it · Coordinate Spaces
The rectangle of pixels being drawn into, and the final transform from NDC to pixel coordinates. Note that y flips: NDC counts up, pixel rows count down.
See alsoNDCRasterisation
W
WGSL
The WebGPU Shading Language. Rust-flavoured rather than C-flavoured, strongly typed, with explicit binding annotations. Same job as GLSL, different spelling.
See alsoGLSLShader
Winding order
Whether a triangle’s vertices are listed clockwise or counter-clockwise on screen, which is how the GPU decides which side is the front. Get it inconsistent and backface culling eats half your model.
See alsoBackface cullingVertex
WorkgroupSee it · Compute & Particles
The unit a compute dispatch is divided into — a small block of invocations that run together and can share memory. You choose the size; 64 is a common default because it maps well to the hardware.
See alsoCompute shaderStorage buffer
World spaceSee it · Coordinate Spaces
The shared coordinate system the scene lives in, after each object’s model matrix has placed it. The only space where "next to" means what you think it means.
See alsoModel spaceView spaceModel matrix
Wrap modeSee it · Textures & Sampling
What the sampler does with a UV outside 0…1. Repeat tiles it, clamp smears the edge texel outward, mirror flips alternate tiles so the seams line up.
See alsoUV coordinatesTexture