This is an experiment in generating graphics that look like artificial written languages.
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.
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.
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.
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.
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.