Font Paths
Last updated: Apr 2, 2021
I started out trying to use cuneiform .ttfs based on an inscription I found on Wikipedia–there’s very limited cuneiform text on the internet, or at least, I don’t know where to find it. For Akkadian and Babylonian, mostly annotated roman text is used to transliterate. The second challenge to using a cuneiform font is that the charmap appears to be organized completely differently from a roman font. It’s possible there’s a secondary charmap or that the context-based building of characters makes the one-to-one charmap (that maps A to a value, B to another value…) irrelevant.
Regardless, I could only work on one character at a time, and found it pretty limiting, partly because I think I would need to break up the font a little more to see how it works and partly because I can’t read Akkadian–it doesn’t have an immediate meaning to me.
So I pivoted. I added random placement and coloration to the circles sketch to try to bring it to the verge of asemia. Here’s what I came up with:
And here’s the python that led to these:
from math import sqrt
from random import random
import opensimplex
noisy = opensimplex.OpenSimplex()
d = document(1050, 110, 'pt')
page0 = d.addpage()
page1 = d.addpage()
page2 = d.addpage()
page3 = d.addpage()
page4 = d.addpage()
page5 = d.addpage()
# pen = shape().nostroke().fill(rgba(0, 0, 0, 64))
def pen(r,g,b,a):
return shape().nostroke().fill(rgba(r, g, b, a))
factor = 90 / f.density
cx = 0
cy = 0
glyph_path0 = combine_path(f, "wildflower").scale(factor).translate(30, 80)
glyph_path1 = combine_path(f, "superbloom").scale(factor).translate(30, 80)
for cmd in glyph_path0:
if type(cmd) in (lineto, curveto, quadto):
radius = sqrt(pow(cx - cmd.x, 2) + pow(cy - cmd.y, 2))
page0.place(pen(155 + random() * 100,random() *100 ,random() *255, 100 + random() *55).circle((cx+ (random() * 15)-8 + cmd.x) / 2, (cy + (random() * 22)-9 +cmd.y) / 2, radius* (0.2 + random() * 0.5)))
page2.place(pen(155 + random() * 100,random() *100 ,random() *255, 100 + random() *55).circle((cx+ (random() * 11)-6 + cmd.x) / 2, (cy + (random() * 12)-6 +cmd.y) / 2, radius* (0.2 + random() * 0.5)))
page4.place(pen(155 + random() * 100,random() *100 ,random() *255, 100 + random() *55).circle((cx+ (random() * 20)-9 + cmd.x) / 2, (cy + (random() * 18)-8 +cmd.y) / 2, radius* (0.2 + random() * 0.5)))
ny = noisy.noise3d(cmd.x*0.02, cmd.y*0.02, 100*i*0.02) * 8
nx = noisy.noise3d(cmd.x*0.02, cmd.y*0.02, 100+(100*i*0.02)) * 8
cmd.x += nx + 4
cmd.y += ny * 1.2
if type(cmd) != type(closepath):
cx = cmd.x
cy = cmd.y
for cmd in glyph_path1:
if type(cmd) in (lineto, curveto, quadto):
radius = sqrt(pow(cx - cmd.x, 2) + pow(cy - cmd.y, 2))
page1.place(pen(155 + random() * 100,random() *100 ,random() *255, 100 + random() *55).circle((cx+ (random() * 12)-6 + cmd.x) / 2, (cy + (random() * 22)-16 + cmd.y) / 2, radius* (0.2 + random() * 0.5)))
page3.place(pen(155 + random() * 100,random() *100 ,random() *255, 100 + random() *55).circle((cx+ (random() * 16)-8 + cmd.x) / 2, (cy + (random() * 12)-6 +cmd.y) / 2, radius* (0.2 + random() * 0.5)))
page5.place(pen(155 + random() * 100,random() *100 ,random() *255, 100 + random() *55).circle((cx+ (random() * 20)-9 + cmd.x) / 2, (cy + (random() * 18)-8 +cmd.y) / 2, radius* (0.2 + random() * 0.5)))
ny = noisy.noise3d(cmd.x*0.02, cmd.y*0.02, 100*i*0.02) * 8
nx = noisy.noise3d(cmd.x*0.02, cmd.y*0.02, 100+(100*i*0.02)) * 8
cmd.x += nx + 4
cmd.y += ny * 1.2
if type(cmd) != type(closepath):
cx = cmd.x
cy = cmd.y
show(page0)
show(page1)
show(page2)
show(page3)
show(page4)
show(page5)