Generative Sketches
Experiments in Computational Drawing
CONCEPT
This project was for a directed study in computational drawing. Over the course of the semester, I created five series of algorithmically-driven sketches using Processing. Each series was based on a theme: Line, Randomness, Growth Structures, and Animated Grids.
DELIVERABLE
Computational design experiments
Line
The Line sketches had to adhere to certain restrictions: straight black lines drawn on a white background. The goal was to create complexity that retained a sense of order without feeling too cyclical, always aiming for an unexpected result.
From simple loops that created rows and columns of thin lines, I iterated by interjecting rhythm (varying position, angle, and stroke width according to sine waves) and randomness (making using of different randomness functions within Processing) at different points within the program.
Rows of angled lines lay on top of a "base" of vertical lines that are gently randomized using Perlin noise. The horizontal position of the row lines follows a wine wave. The right end "pushed" up or down according to Perlin noise.
Rows of 10-pixel lines with increasingly varying angles form a "base grid" onto which stripes fall. Each stripe is comprised of differently angled lines - the more severe the angle, the darker the stripe appears.
A row of thin vertical lines that increase in stroke width from left to right. The length of each line follows a sine wave. Each line fails a number of times, with the space between each attempt increasing as the y-position increases.
Randomness
I created 2 sets of sketches adhering to the theme of Randomness. For the first series, a line grew by a fixed step, only rotating by 90-degree angles. I experimented with different outcomes triggered by the line colliding with itself.
The second series was an exploration of Brownian Motion, in which an ArrayList of points grew from an origin, expanding by a range of steps in any direction. I tested the algorithm with both lines and points, and found the sketches made from points to feel more organic.
Crossing lines created panes filled with HSB colors generated sequentially as the algorithm ran.
Layered ArrayLists of points drawn according to Brownian motion created a stippled effect.
Growth Structures
To simulate Growth Structures, I created a set of lines using the curveVertex() function that rotated as they updated. I mapped the angle of their rotation according to Perlin Noise, so that as the lines grew, their angles of rotation iterated over the range of Perlin Noise values.
Initializing the iterator at different points along the Perlin Noise range created looser or tighter loops. Lines with starting positions near each other had similar results.
Adding a fill to the set of lines creates new shapes that layer over each other as the lines grow.
Animated Lines
I created a set of horizontal lines, each containing hundreds of individual curveVertices. The x and y positions of each curveVertex moved according to their gravitational pull toward an attractor in the center of the canvas. Below are frames that capture the motion of the curveVertices in gravitational rotation.