Textforms
Description
This project is a text-based form generator. It takes a string of text and splays it out in a ring of text chains. I like the idea of using text as the building block for generating form and am interested in pushing textual legibility to its limit. You can type and press backspace to create new strings and forms. You can also press TAB to expose a GUI with lots of presets and parameters to play with in pursuit of exploring the space of form generation
Design Process
I am inspired by the shapes of starfish, flowers, and other lifeforms that exhibit radial symmetry, and am also interested in how font symbols can similtaneously look organic and synthetic, so decided to try these ideas out together. In the first iteration, I sketched out the classes using object oriented programming, creating a TextChainLoop class, a TextChain class, and a TextLink class. Here is the very first version of it, kind of starfish-like:
I enjoy the surprise of creative coding, so often I don't really sketch
before I start, and just let the process of coding inform the result.
This "mistake" occured when I forgot to draw a background before drawing
the text. It informed a parameter choice that I defined later on that
drives the alpha of the background when it is being drawn.
Those classes manage the transformation and drawing of the text. The
basis for this sketch relies heavily on push, pop, and p5's 3D rotation
capabilities. Each symbol is a link in a chain, and inherits the
rotation of its parent link recursively. The chains are arranged in a
circle, creating a (at least at first) symmetric pattern. After some
progress, it started looking like this:
One classmate had suggested adding colors, which I thought was a
wonderful idea. It would look better if the colors varied across the
links of the chain, so that's another thing I added. From there, I added
many more options, such as randomness, size variation, color animation,
and the ability to type the word (and backspace). The mouse also has the
ability to influence the rotation of the chain links to add some motion
interactivity. There were a lot of issues that had to be worked through.
In order to get the text to overlap, I had to mess with the builtin
p5.js 3D text shader. I found a link to the original vertex and fragment
shaders for 3D text but there was a bug in their vertex shader that
causes some flickering, so I fixed it, and allowed letters to overlap by
adding a "discard" to the fragment shader when the alpha of the glyph is
below a certain threshold. There are a lot of parameters that could be
played with to get different forms, so I used dat.gui to expose them so
I could play with them in real time. There are a few things missing, but
here is the full gui, all of these things seem to work mostly:
This quickly turned into a project to create a tool to create textual
visuals. In the GUI, I added a preset function that loads parameters
from a json file, and made some presets (in addition to the default mode
at the top of this page) to play around with that illustrate the variety
of textforms you can get.
"Classic":
A flower (showcasing the "jitter" parameters to get random variations in
the chain)
A preset that ends up looking like something in between a stellar entity
and a starfish
A chaotic preset where the background is never cleared and the textforms
are jittered to the point of being a blob
A trippy mode, inspired by Mati's LSD button in his guitar generator:
Reflection
In future versions, I think it may be fun for each text chain to optionally be a different string, perhaps to explore the radial form of an entire poem or something. I also like the idea of turning this into an audio sequencer and having each link of text play a frequency that depends on the character code. The sequencer would have the ability to be played at different rates and maybe have different instruments for different characters. I also want the ability to change fonts. There are always more features to add... But for now, I'm excited to work on something else.