The Beauty of Fractals – L-system in Houdini

The Beauty of Fractals - L-system in Houdini

This article demonstrates the use of L-system to create fractals from simple rewriting rules. I will describe fractals and Houdini L-systems in general as well as the implementation of a specific kind of fractal pattern in Houdini L-systems. Furthermore I will demonstrate what to take into consideration if you want to successfully create specific kinds of “closed” fractals, like the Koch-Snowflake, and how even simple rules can create complex outputs.
Fractals

What are fractals?

The term fractal is derived from the Latin words fractus, frangere and means broken/break up/shatter/crush. Fractals are described as a mathematical set which holds the following characteristics, defined originally by Benoît Mandelbrot in 1975:
self-similarity
“When each piece of a shape is geometrically similar to the whole, both the shape and the cascade that generate it are called self-similar.” (Mandelbrot, in Prusinkiewicz and Lindenmayer 2004, p. v)
underivabiliy at any point; no gradient allocatable
and/or
fractal dimension; an object possesses fractal dimension if its Hausdorff-Besicovitch dimension is greater than its topological dimension. Fractals do therefore usually neither belong to 0 (points), 1 (lines), 2 (surfaces) nor 3 (volumes) dimensional objects. The dimension of a point set in finite space, defined by a simplified explanation of the Hausdorff-Besicovitch Dimension, can be described with the help of the amount of N boxes with linear size p (for lim p → 0) necessary to cover the point set. D (for dimension) holds the following relation:

Fractal01

and for R tending to 0:

Fractal02

Therefore the Koch snowflake would have a dimension of 1.261859…

Fractal03

while “space-filling” fractal curves such as the Hilbert (Fig. 01c) curve possess a dimension of 2 but still meet the characteristic of self-similarity and underivability.

fractaltypes

Since fractals are underivable at any point and/or feature fractal dimension they can be infinitely magnified and would never consist of straight lines (like e.g. a circle) but due to recursion of always a self-similar pattern.

Types

Different kinds of fractals (generated or represented by different means) such as

fractional Brownian motion (random movement of particles in liquid or gas, due as interaction to fast-moving atoms/molecules); can be used to create fractal surfaces (such as mountains), Fig. 02a)

recursive mathematical families of equations (Mandelbrot set, Julia set; Mandelbrot: sampling complex numbers), Fig. 02b).

recursive transformations (generator) applied to an initial shape (initiator) e.g. Koch snowflake, Sierpinski carpet, Sierpinski triangle, dragon curve, etc. (Fig. 01)

L-Systems (in Houdini)

What are L-Systems?

Aristid Lindenmayer introduced the so called Lindenmayer-systems (or L-systems) in 1968, conceptualised as a mathematical algorithm to simulate plant development/biological growth. The central concept of L-system is rewriting which means to “recursively replacing an initial state (the initiator/premise) with rewritten geometry (the generator/rule)” (Side Effects Documentation 2012). The rules are applied simultaneously (parallel-derivation grammar) in contrast to the well known Chomsky grammar, which applies sequential, one rule per step.

Fractal_lsys

Left: initiator/premise (0), generator/rule (1), generations 2-4 of the Koch curve (angle 60°)

Types

Fractal_d0l

• context-free L-systems: 

    • • d0L systems (deterministic context-free (0-context) L-system; simplest form of L-system; appropriate to describe fractals) (see right)
    • • bracketed systems (extension of d0l-system for creating branches)
    • • stochastic systems (to add divergence using probabilities; for modeling more realistic and randomised and less uniform structures)
    • • parametric systems (using conditions which determines whether or not a rule will be applied to the consisting string/premise)

 

• context sensitive systems (the context affects the applicability and outcome of a the application of a rule; useful to simulate interactions between different parts of a plant).

Basic Formalism

Basic commands of the turtle graphics routine which is used to interpret the strings created with Houdini’s l-system.

Turtle: moving and drawing:

F(l) Move forward a step of length l, draw a line between the original and new position H(l) Move forward half a step of length l, draw a line between the original and new position f(l) Move forward a step of length l withouth drawing a line h(l) Move forward half a step of length l without drawing a line

Orientation of the turtle in space:

+(α) Turn right by angle α

– (α) Turn left by angle α

& (α) Pitch up by angle α

^(α) Pitch down by angle α

\ (α) Roll clockwise by angle α

/ (α) Roll counter-clockwise by angle α

| Turn by 180 degrees * Roll by 180 degrees

Fractals in L-Systems

Implementation

L-systems are highly appropriate to create fractals, as they are recursively replacing the existing ge-ometry with the production rules from generation to generation. However with respect to Mandel-brot’s definition of fractals (including fractal dimension), L-systems can not implement fractals, since the output of L-systems always consist of a finite number of primitives (lines or polygons), Fig. 06. If the term fractal is used in a broader sense it could be said that an advanced Koch snowflake “as being closer to a curve of dimension log 4/log 3 than to a curve of dimension 1. Thus, a finite curve can be considered an approximate rendering of an infinite fractal as long as the interesting properties of both are closely related” (Lindenmayer 2004, p.176).

Fractal_imp

Finiteness of Houdini l-system, Koch-snowflakes (zoom from left to right), 7 generations;

Scaling

L-systems do not adjust their step size as the production rules are applied. Each single part of the geometry possesses therefore scale 1 what let the whole object grow with each generation. Without limiting, the scaling in Houdini fractals would grow exponentially; e.g. the Koch snowflake would grow 3 each generation (n):

Generation n = 0: Scale s = 1 | n = 1: s = 3 | n = 2: s = 9 | n = 3: s = 27 | n = 4: s = 81

In order to preserve the scale of a fractal, no matter which generation it is in, the following command is to add:

premise: F(1)

rule: F(i)=F(i • scaling factor)

Application

• using d0L-systems (deterministic context-free L-systems) to create fractals

• simple, symmetric fractals; starting with a closed form (axiom), e.g. triangle, quad, pentagon and rewrite the segments with a single rule, two rules, and/or different angles in axiom and rules

• in order to keep the closed form of the fractal it is important that the rule is angle-invariant: that the direction of the “turtle” at the beginning and the end of a production rule has to be the same.

AID0L (angle-invariant deterministic context-free L-system)

Conclusion

The main achievement of this research is the successful implementation of closed fractals, using different rules and angles, into Houdini L-systems. Fractals are by definition infinitely self-similar what makes them differ from the fractals implemented in L-systems. However, they are classified as being closer to a fractal as to a straight line or plane.
The most important aspect to successfully create closed fractals is a closed form as premise and an angle-invariant rule.

Examples

Zoom into curve detail | Finiteness of Houdini L-System


03vergroesserungvon_2s

Initiator/premise (F-F-F-F-F-F-F-F), generator/rule (F=F- – -F+F+F+F+F+F+F- – -F), generation 2; Angle:45


Zoom into curve detail | Finiteness of Houdini L-System


Fractal01c

Initiator/premise (F++F++F), generator/rule (F=F+F- -F+F), generation 2; Angle: 60

1)

Generation: 7
Angle: 60
Premise: F++F++F
Rule 1: F=F+F- -F+F

2)

Generation: 5
Angle: 40
Premise: F+F+F+F+F+F+F+F+F
Rule 1: F=F- – -F+F+F+F+F+F+F- – -F

3)

Generation: 5
Angle: 45
Premise: F+F+F+F+F+F+F+F
Rule 1: F=F- – -F+F+F+F+F+F+F- – -F

4)

Generation: 6
Angle: 60
Premise: F+F+F+F+F+F
Rule 1: F=F++F-F-F-F-F++F

5)

Generation: 6
Angle: 60
Premise: F+F+F+F+F+F
Rule 1: F=F-F+F+F+F-F

6)

Generation: 6
Angle: 72
Premise: F+F+F+F+F
Rule 1: F=F-F+F+F+F- -F

7)

Generation: 6
Angle: 60
Premise: F++F++F
Rule 1: F=F-(90)F+(90)F+(90)F-(90)F

8)

Generation: 6
Angle: 90
Premise: F+F+F+F
Rule 1: F=A-(60)A+(120)A-(60)A
Rule 2: A=F-F+F+F-F

9)

Generation: 6
Angle: 60
Premise: F- -F- -F
Rule 1: F=A+(-80)A+(45)A+A-(68)A+(45)A+(50)A+(45)A-(97)A
Rule 2: A=F-F++F-F



Anni











Hi, I'm Anni. I'm a VFX Artist. 3D lover. Multimedia Producer. Travel enthusiast. Nature lover. DIY fan. Music devotee. And much more.

   Find out more









Recent Posts


Leave a Comment