Brushes are templates used in some 3D video game engines, such as the Quake engine, its derivatives the GoldSrc and Source game engines, or the Unreal Engine, to construct levels.[1] Brushes can be primitive shapes (such as cubes, spheres and cones), pre-defined shapes (such as staircases), or custom shapes (such as prisms and other polyhedra).[2][3] In order to describe these shapes mathematically, each brush is made up of planes that define its boundaries. A plane can be represented by an equation in 3D space, which looks like this:
This equation describes a single flat surface (or plane) in 3D space, where a, b, and c are coefficients that determine the orientation of the plane, and d is a constant that shifts the plane along its axis.
To construct a brush, the game engine uses multiple planes working together. For example, a cube can be defined by six planes, each restricting space within a certain region. Here’s how a set of three planes would be represented mathematically:
Each of these equations corresponds to a different plane that helps define the shape of the brush.
In some engines such as Unreal, brushes are categorized as either additive or subtractive. Additive brushes add volume to the level, forming walls, platforms, or other structures, while subtractive brushes carve out spaces within these volumes, like windows or doorways.[4]
During the map compilation process, brushes are turned into meshes that can be rendered by the game engine. Often brushes are restricted to convex shapes only, as this reduces the complexity of the binary space partitioning process. However, using CSG operations, complex rooms and objects can be created by adding, subtracting and intersecting brushes to and from one another.[5] Additionally, brushes can be used as liquids[6] or as an area trigger.[7]
Brush-based techniques originated during the period of three-dimensional game development, being developed around the same time period as Quake. These games required 3D geometry for constructing more advanced true 3D environments different from previous raycasting approaches. During this time brushes became used with and closely associated with Binary Space Partitioning as this allowed for sustaining real-time performance on constrained computational hardware. Brushes offered a viable solution, enabling level designers to utilize elementary geometric primitives for the creation of intricate spatial structures.[8][9]
Brush-based modeling is extensively used in constructive solid geometry, a technique that builds complex surfaces by combining simpler ones using Boolean operations such as union, intersection, and difference.[10] In modern game engines, brushes are usually limited to only being used during the initial prototyping or "Block out" phase. This is due to the fact that they are less efficient when overused, slowing down performance due to their simple, non-optimized geometry.[11]