• Projects
  • New Things
  • Drawings
  • Instagram
  • About
Menu

Adam Heisserer

  • Projects
  • New Things
  • Drawings
  • Instagram
  • About
al6.png

Constructed Language in Grasshopper

February 28, 2018

This is an experiment in generating graphics that look like artificial written languages.

giphy (2).gif

The typical way of constructing a written language is to start with a one-to-one transposition of existing letters into invented letters. This bottom-up approach may or may not produce cohesive looking text down the line when the characters are joined. Instead of starting with an alphabet, this alternate approach begins with a few rules for the composition of the characters, and then introduces random variations of those elements until the text as a whole looks convincing. From here, natural occurring and compelling fragments can be assigned to actual letters, and the alphabet can be post-rationalized.

al6 - Copy - Copy.png

The rules for this script:

1. I'm starting with an arbitrary foundation of writing along a horizontal line from left to right. This orientation can be flipped later.

2. Next, I'm establishing a meter, or a base point for each dominant character. For now, I'm starting with evenly spaced base points along the baseline and then offsetting them randomly. This generally works to give it a sense of clustering into words, though a more intentional clustering would make the final text appear more realistic.

3. From each of those base points, a bold line extends a random distance either straight up or down. This is based on a commonly occurring structure in western handwriting where bold, parallel lines from Ascenders and Descenders providing the main structure and grain of a text, with subordinate fillers lying along the baseline.

Transcription1.png

The slight curvature of these verticals is critical for making it look natural and elegant. For most of these lines, I'm rendering them with a uniform thickness (random, but uniform), but for the vertical members, I render them with a straight 45 degree extrusion to give it the look of a broad, italic nib.

4. Now, some ornamentation to emulate the horizontal subordinate characters between the dominant verticals. I draw a horizontal line of random distance that connects to the base of every vertical, and a few floating horizontals and circles above. Like everything else, the realism is improved by slight randomization of how each line is drawn.

5. Finally, some post-production in Photoshop can soften the hard lines of the generated text and make it appear more like hand-written text. I duplicate the original layer, slightly offset it from the original, reduce the opacity slightly, and turn on the Darken blending mode. This, along with some slight Gaussian blur, thins out the line weights and softens the edges.

Mechanical Plotter Drawings, inconvergent (Anders Hoff)

Mechanical Plotter Drawings, inconvergent (Anders Hoff)

Zipf's Law and Realism:

The randomization of line lengths, character occurrences, and rendering makes the text appear more natural, but the truly random and even distribution gives it away as being artificial. A natural text should follow Zipf's Law, a kind of power law distribution that predicts the frequency of words appearing in a natural text.

In terms of graphic realism, physically plotting pen on paper with a CNC router is impressive. Nothing looks like pen on paper as much as pen on paper. These mechanical plotter drawings by inconvergent are what inspired me to try this. If mechanical plotting is not an option, I'll at least try to digitally replicate the analog nuances of plotting. Paper texture, simulated lighting environment on the paper, and variable pen pressure and shape will go a long way.

v4 - Copy.jpg

Most of this code can be packed into modules with a few inputs. Each reoccurring stroke is basically the same package: a line with a frequency, an orientation, a thickness, a shape, a degree of curvature, each with a domain of random variation. Once these definitions are bundled into modules, they can by paired into small strings, and I can quickly generate a lot of diverse texts.

 

 

Tags constructed, written, languages, writing, generated
← Biometric Mapping IIIAudience View Tool - Pecha Kucha at Confluence Park →

Latest

New Things
A dimensional model of emotion based on Principal Component Analysis
about a month ago
Co-Authorship with AI
about a year ago
Graphing Multiple Moving Averages with Python
about 2 years ago
Image to Image Translation with Stable Diffusion
Image to Image Translation with Stable Diffusion
about 2 years ago
StyleGAN2 + CLIP Guided Diffusion
StyleGAN2 + CLIP Guided Diffusion
about 3 years ago
Music Blocks
Music Blocks
about 3 years ago
Analyzing Architectural Drawings with Hough Transform
Analyzing Architectural Drawings with Hough Transform
about 4 years ago
Using a Rhino Environment to Train a Surface-Normal Prediction Model in Pix2PixHD
Using a Rhino Environment to Train a Surface-Normal Prediction Model in Pix2PixHD
about 4 years ago
StyleGAN "Notebook"
StyleGAN "Notebook"
about 4 years ago
Play Pavilion at Margaret Hance Park
about 4 years ago
Moving Average - Grasshopper Component
Moving Average - Grasshopper Component
about 4 years ago
5 Years of Shirts
5 Years of Shirts
about 4 years ago
Pseudo Non-Linear Regression in Grasshopper
Pseudo Non-Linear Regression in Grasshopper
about 4 years ago
City Roses - Graphic Tool for Visualizing Emotions
City Roses - Graphic Tool for Visualizing Emotions
about 4 years ago
Data-Driven Classification of Feelings
Data-Driven Classification of Feelings
about 4 years ago
Automated Climate Graphics with Grasshopper
Automated Climate Graphics with Grasshopper
about 4 years ago
Optimization Algorithms (Opossum) for Daylight Modeling
Optimization Algorithms (Opossum) for Daylight Modeling
about 5 years ago
Mobile Meshes - Drawing with Photogrammetry
Mobile Meshes - Drawing with Photogrammetry
about 5 years ago
Biometric Mapping III
Biometric Mapping III
about 7 years ago
Constructed Language in Grasshopper
Constructed Language in Grasshopper
about 7 years ago


Powered by Squarespace