Meander

Meander is an interative WebGL experiment. It started out as an attempt to create meandering river structures that would move across the screen. Somehow it ended up being a series of particles randomly moving around on the canvas. The experiment is also listed on Chrome Experiments!

—001.meander

Waves

Waves is an interative (desktop only) WebGL wave simulation built using Three.js. You can interact with the surface using the mouse. This experiment was mostly an excercise for me in doing some physics calculations on the GPU.

—000.waves
—001.waves

Landscape

The problem with the method used for generating landscapes on Isopleth is that it is done in a regular grid. Because of this it has a tendency to give some undesired effects that make it look unnatural. Landscape attempts to alleviate this problem by using an unstructured grid instead.

When I was working on the algorithm I was randomly trying different methods of giving the surface a texture. Since I was working on a landscape I figured I'd try to add contour lines. The results have more Moiré than contour lines, but I like the absurdity of it. The effect is a little hard to capture on pictures, so you should definitely have a look for yourself.

—000.landscape
—001.landscape

City

City is a generative WebGL experiment based on the Delaunay triangulation and some shader trickery.

—000.city
—001.city

Isopleth

Isopleth is a WebGL experiment that generates random landscapes using the "midpoint rule". The application should work on most newer devices.

—000.isopleth
—001.isopleth
—002.isopleth

Leaf3

Leaf3 [github] is a three dimensional implementation of the algorithm that was the inspiration behind the various network algorithms I've been working with.

—000.leaf3
—001.leaf3
—002.leaf3

Differential Surface

Differential Surface [github] is a three dimensional implementation of the same ideas (more or less) that inspired the Differential algorithm, which I wrote a while back.

The faces of the mesh are affected by their neighboring faces over time—rejecting non-neighboring faces that are too close, and keeping a comfortale distance to their actual neighbors. The surface is gradually remeshed to account for it's growing surface area.

—000.differential.surface
—001.differential.surface
—002.differential.surface
—003.differential.surface
—004.differential.surface

Orbitals

Orbitals [github] is inspired by the naive optimization process that Jared Tarbell has implemented in his "Happy Place" algorithm. Nodes are created in some, more or less structured arangement, before they start to make friends with their neighbors. Gradually the nodes make an effort to get closer to their friends, whilst at the same time keeping a comfortable distance from the nodes they have not befriended. The visualization is made by drawing lines betweeen pairs of friends as they walk around the canvas. Thus the final image is a history of all the friendships.

000.orbitals
—000.orbitals
001.orbitals
—001.orbitals
002.orbitals
—002.orbitals
003.orbitals
—003.orbitals
004.orbitals, box
—004.orbitals, box
005.orbitals
—005.orbitals
006.orbitals
—006.orbitals
007.orbitals, lines
—007.orbitals, lines
008.orbitals, lines
—008.orbitals, lines
009.orbitals
—009.orbitals

Meshx

Meshx [github] is my first attempt at a three dimensional generative algorithm. The algorithm can grow from any number of seeds; either along another surface geometry, or freely in any direction. The algorithm grows by choosing random triangles on the surface of the structure and appending a triangular pyramid to that face. This gives the resulting geometry a ragged-looking appearance. I had no particular biological process in mind when I wrote this algorithm, but it turns out that it creates structures that look a lot like corals.

—000.meshx
—001.meshx
—002.meshx

Differential

The Differential [github] algorithm is inspired by the way a number of biological things in nature grows. Among other things it is made to mimic the way the human brain grows, as well as a great number of plants. In brief; we start of with a number of connected nodes in a circle. Gradually we introduce new nodes on the line—prioritizing segments where the curve bends more sharply. Over time the curve grows increasingly intricate, but it never self-intersects.

000.differential
—000.differential
001.differential
—001.differential
002.differential
—002.differential

Tree

One of the first attempts I made at generative algorithms was a copy of this great little application. Recently I decided it was about time that I revisited this project, and below are a few of the results. As opposed to the algorithm in the link, my trees are generated pixel by pixel. That is, there are no pre-drawn parts. [github]

As you can see, if you examine the images a little, the trees take shapes that er neither realistic nor possible. Yet they look very much like trees at first glance.

The background is another algorithm of mine called Linetrace.

000.tree.linetrace
—000.tree.linetrace
001.tree
—001.tree
002.tree
—002.tree

Lichen

Lichen [github] is an extension of the Hyphae algorithm. I started working on it with the intention of mimicking the growth of (certain types of) lichen. The results, to me, are equal parts crystal-like and biological.

000.lichen, sand clutter
—000.lichen, sand clutter
lichen, varying color
—001.lichen, varying color

Hyphae

Hyphae [github] is an algorithm I wrote in an attempt to mimick the growth of roots. You can see a video of how the algorithm grows here. The algorithm centers around letting circles grow "next to each other" in such a way that no two circles overlap. The results are incredibly intricate and fractal-like, and they can be tweaked in a great number of ways.

000.hyphae
—000.hyphae
001.hyphae
—001.hyphae
002.hyphae
—002.hyphae
003.hyphae
—003.hyphae
004.hyphae
—004.hyphae

Linetrace

After watching John Franzen drawing his incredibly fascinating "Each Line One Breath" drawings, I wanted to try doing somthing similar using code. After many failed results, I also ended up with a few versions I rather liked. They can hardly be said to behave in the same way as Franzen's drawings, as was the initial goal, however I find them equally interesting.

000.linetrace
—000.linetrace
001.linetrace
—001.linetrace
002.linetrace
—002.linetrace
003.linetrace, sandstroke
—003.linetrace, sandstroke
004.linetrace, sandstroke
—004.linetrace, sandstroke

Network

At some point I stumbled upon this great algorithm by Adam Runions et al. I have since spent some time replicating the algorithm itself, as well as trying to recreate the behaviour in other ways. As usual some of the results are similar, whereas others ... not so much.

000.network, leaf
—000.network, leaf
001.network
—001.network
002.network
—002.network

About

My name is Anders Hoff. I write algorithms that generate images. To me it is fascinating how complex and intricate results you can get from a set of simple rules. My works are often a result of me trying to recreate some behaviour I have seen elsewhere. Either in nature, in previous works by others or in mathematical concepts. On my facebook page I keep a worklog, of sorts, where I post ideas and strange results I stumble across.

I make a great deal of my code available at github, but most of my repositories are prone to rapid change and broken code. Feel free to contact me if you are interested in a particular algorithm, or piece of code, and I will make a clean tag for you.

I am best contacted by e-mail, or on on twitter: @inconvergent.

Commissions

I sell prints of many of my algorithms. All the prints are signed and one-of-a-kind. Feel free to contact me if you have any questions, or if you can not find the image you want; I can probably make it available for you!

In addition, many of my algoritms are incredibly flexible, and I would love to hear from you if you have a project in mind.

Exhibitions

  • 25th of April - 6th of June 2014 — «Orbitals» at -kunstplass5: Dual exhibition with Alexander Grüner. More information.
  • 31st of October 2014 — «BYOB» at MESH: Bring your own Beamer.

Talks

  • 30th of October 2014 — «Generative Algorithms and Design» at NerdNite, MESH Cafe, Oslo.
  • 15th of November 2014 — An exploration of generative design through self-repeating algorithms» at Piksel14, Bergen.