In Pursuit of Imperfection

In Pursuit of Imperfection

Code doesn’t make mistakes. That’s the problem.

In generative art, perfection is built in. Circles render with infinite smoothness. Lines are clinically straight. Shapes fall into place with mechanical obedience. But precision alone is sterile. It lacks tension. It lacks touch.

So we reach for the glitch. The wobble. The smear.
Not to mimic error—but to invent soul.

The goal isn’t a perfect square. It’s one that looks torn from charcoal and dragged across rough paper. We’re coding what should feel drawn, smudged, pressed. Breathing life into vectors. Faking friction. Hinting at a human hand.

We don’t want clarity.
We want character.

The Geometry of the Hand

Look closely at a real sketch, and you’ll see the truth: lines aren’t straight. They tremble. They curve slightly at the end. They carry pressure, pause, doubt. Generative artists have begun to mimic this, not by abandoning math, but by reshaping it.

Noise functions, especially Perlin noise, are often used to add a kind of natural jitter to paths and curves. Instead of a clean Bézier curve, you get something that looks like it was drawn by a thoughtful hand—not a perfect one. Artists like Anders Hoff (a.k.a. Inconvergent) use recursive geometry and noise to produce elegant, flowing forms that feel almost biological.

Others use randomness with intention. Not pure chaos, but guided chance. For example, by perturbing a grid with gentle variations, a regular structure can suddenly look hand-tiled or weathered by time.

Imperfect Shapes and the Techniques Behind Them

To create shapes that feel handmade, artists turn to a variety of generative strategies:

  • Noisy outlines: Adding Perlin or simplex noise to the path of a shape to make it wobble and breathe.
  • Randomized vertices: Defining a polygon with slightly offset points, creating irregular polygons that resemble sketches or paper cuts.
  • Hand-drawn simulation: Redrawing the same shape multiple times with slight differences, mimicking the layering of pencil lines.
  • Grid distortion: Using sine waves or noise to warp a regular grid into a warped, uneven pattern.

These imperfections introduce life and movement, creating a kind of visual rhythm that a perfect shape simply can’t match.

Types of Texture in Code-Based Art

Texture isn’t just something you touch. It’s something you feel with your eyes. In generative art, textures are coded illusions, built from layers of logic and randomness. Here are a few types:

  • Grain: Simulated by adding tiny noise to every pixel or element, creating a filmic or paper-like quality.
  • Brushstroke: Achieved by layering multiple strokes with slight opacity differences, angle jitter, or curve variation.
  • Smudge: Built by blending colors along curves or flows, using vectors or fluid dynamics to mimic dragging.
  • Splatter: Created by plotting clusters of points with varying sizes and randomness, mimicking ink flicks or spray paint.
  • Decay: Patterns that erode or fade over time, coded through recursive rules or slowly decreasing opacity and structure.

Libraries like p5.js, Processing, and GLSL shaders give artists a wide playground for building these kinds of digital surfaces.

The Machine as Medium

The search for imperfection is really a search for humanity within the machine.

We’re not coding to escape the real world. We’re coding to reflect it—with all its mess, texture, randomness, and warmth.

Modus

Leave a comment