# GUM v.1.0.0

# 35

# Render filters

Would you like to create wonderful lifelike trees, or perhaps make an interesting texture? This is a real texture factory. You can create the most sophisticated images and textures here. There is even a drawing plug-in.

## CML explorer

Well, I suppose you might call this the Swiss army texture maker. You can compose an abstract pattern based on 12 different mathematical functions, 14 different ways of composing those functions and 10 arrangement variations. As if that wasn't enough, you can set also set 10 control parameters.

Now, if you think this is a lot - that's just the choice of settings for the Hue values of this plug-in. You also have those options for Saturation and Value, as well as a variety of additional options... Writing full documentation for this plug-in would be too extensive for this manual, but we'll give you a few guidelines.

### General Settings

#### Functions

- The first function type is called Keep Image's Value. This means that the Hue, Saturation or Value of the image you opened this plug-in from will stay unchanged, so if you have chosen this function, there is no point of changing any of the other settings in that tab folder.
- Keep first Value doesn't have anything to do with your image - it just sets the initial colors to standard cyan "shower curtain" with a little spilloff from the surrounding colors in the HSV color circle (Sat. and Value also get a standard curtain).
- Fill with parameter K, sets a quite smooth surface, which is controlled by the K slide bar. The other functions which contain K, are variations of that function, but they create very interesting brocade like patterns when you raise the K-value, though high values always end up with colored noise.
- Delta creates similar patterns. The Sinus function creates wavelike shapes (with the right setting), like northern light or curtain folds.

#### Composition and Arrangement

You can experiment with Composition/Misc. Arrangement as you like, but the effect varies so much with the other parameters that you can compare it to Forrest Gump's chocolates: you never know what you're gonna get...

Still, it is often the case that Composition functions starting with Max, produce denser, darker patterns than Min functions.

Random Arrangement usually result in striped patterns, and gradient Arrangement causes shifts or blends from one side of the pattern to the other, so you can't use a gradient arrangement for tileable patterns.

#### The Slide Bars

The slide bar settings are equally hard to predict, but this is generally true:

- Moderation Rate goes from vertical stripes to rounder shapes.
- Environment Sensitivity has a similar effect, but breaks up the pattern more.
- Diffusion distance changes the sense of size and direction.
- Number of Subranges increases complexity in the pattern.
- Parameter K and P affect functions containing those values.
- Low/High Range control the Value ranges of each HSV tab.

### Advanced settings

The Advanced settings tab allows you to experiment with Channel sensitivity and Mutations for random seed. Use it with care, or you'll just end up with colored noise.

#### Other options

This tabfolder lets you set a channel independent initial value for the pattern you want to create. Note that this option often locks the pattern in a horizontal direction. You can also Zoom or Offset your pattern in this folder.

#### Misc. options

These options include the possibility to copy and change the settings from one channel to another. You have probably seen that you can save and load patterns you have created in CML explorer. Here's an option to just load the settings of a certain channel instead of the whole pattern.

Tip: You'll often get a better looking pattern by changing it to grayscale, and then back to RGB. After that, you can set any color you like with the Image/Color controls.

## Checkerboard

This plug-in creates Checkerboards - what else?

The Size slide controls the size of the checkers in pixels (X*Y pixels). If you check Psychobilly, you'll get tiled 3D "pouting" checkerboards... (see Pic 2). Size now represents the biggest check in a tile.

Say that you set Size to 4 pixels, then the middle check (which is always the biggest one) will be 4x4, the next check will be one pixel thinner, until you get to the outer check which is always one pixel wide. The check size follows the following algoritm: 1,2,3,..."check size" ..,3,2,1. From this follows that each Psychobilly tile will be 16x16 (because 4x4=16).

### Example

If you for example choose 12 as check size, for an image that is 288x288, you will end up with four Psychobilly tiles, because 12x12 gives you tiles which are 144x144 pixels big, and there can only be four such tiles in a 288x288 image.

## Diffraction patterns

Lets you make diffraction or wave interference textures. You can change the Frequency, Contours and Sharp Edges for each of the RGB channels.

## You can also set Brightness, Scattering and Polarization of the texture. There is no automatic preview, so you must press the preview button to update. This is a very useful filter if you want to create intricate patterns, e.g it's perfect for making psychedelic, batik-like textures, or for imitating patterns in stained glass (as in a church window).

## Figures

This plug-in adds a random number of rectangles of different size and color to your image. You can constrain the average rectangle size to Min/Max Width and Height.

Density controls the number of rectangles. A low density value results in a low amount of rectangles, and a high value produces a whole lot of them. This plug-in can with success be used as a texture maker.

## Flame

With this filter, you can create stunning, randomly generated fractal patterns. You can't control the fractals as in the Ifs Compose filter, but you can steer the random generator in a certain direction, and choose from variations of a theme you like.

### Main interface

In the Main window dialog, you can set Render and Camera parameters. The three first parameters in the Render display are Brightness, Contrast and Gamma. The result of these options are visible in the Preview window, but it's generally better to stick to the default values, and correct the rendered image later with Image/Colors.

#### Render and Camera parameters

The other three parameters affect the rendering process and don't show in the preview window. Sample Density which controls the resolution of the rendered pattern, is the most important of these. A high sample density results in soft and smooth rendering (as a spider's web), while low density rendering resembles spray or particle clouds. The Camera parameters allows you to zoom and offset the flame pattern, until you're happy with what you see in the preview window. Flame also offers the possibility to store and load your favorite patterns.

#### Colormap controls

The Colormap controls the color blend in the flame pattern. You can set Colormap to:

- The current gradient from the Gradient Editor
- A number of preset colormaps
- The colors from images which are presently open in Gimp. You can use the Smooth Palette filter in the Filters/Colors menu to create suitable colormaps from your images.

### The Edit dialog

Pressing the Shape Edit button switches to the Edit Dialog
:

The Edit dialog shows nine different windows. The pattern displayed in the centre is the current pattern, and the eight windows surrounding it are random variations of that pattern.

Clicking on the central image creates eight new variations, which can be adjusted with the Speed control. You select a variation by clicking on it, and it instantly replaces the image in the middle.

To pick a certain character or theme for the variations, you can choose from nine different themes in the Variations menu. You can also use Randomize which replaces the current pattern with a new random pattern.

## Gfig

This is a wonderful plug-in, which adds basic drawing capabilities to Gimp. You can draw circles, lines, curves, ellipses, X- sided polygons (X >=3), stars, spirals and bezier curves. The drawing can then be rendered into your image. The drawing objects have control points which can be moved/edited to adjust the shape of the object. There is now also a Selection option in this plug-in, which transforms a Gfig drawing to a selection in your Gimp image, and a Select+Fill option which enables you to fill a selection directly from Gfig.

### User interface

The user interface is divided into a Preview area with a drawing area and user tools, a Settings area with object manipulation options, Grid settings to control grids and a few tabbed folders to control paint options.

### Preview area

In Ops you'll find the all the drawing tools. You can draw, delete, move, edit, and copy objects.

#### Lines

To draw a straight line, simply click on the spot where you want your line to begin, drag and release the mouse button where you want it to end.

If you want a crooked line (built of several control points): hold `Shift`, this will make the control points attach to each other. E.g. hold `Shift`, click first point, move, click second point, move, click third point, release `Shift`, move, and click to get the final point.

#### Circle

Draws a circle. The start click becomes the centre of the new circle.

#### Ellipse

Draws an ellipse. The start click becomes the centre of the new ellipse.

#### Curve

Draws an arch or a semi-circle. The object has three points (two end points and a middle point).

To clear things up, follow this example: Start by drawing a curve where the curve points are in placed in a horizontal row. This will result in a straight line (1), you can compare this to a tiny segment of a huge circle. Now, if you raise the middle point a bit, the curve will become a low arch. It now represents a larger part of the imaginary circle (2). Finally, reduce the distance between the two end points and you will find that the curve gets even more circular (3).

#### Poly(gon)

The default polygon is a triangle, but you can change this by double-clicking on the icon. This brings up a dialog where you can choose how many sides you want for your polygon.

#### Star

The default star has three spikes, but as with Poly, you can double-click to adjust the number of spikes. There are three controls points for further modification with MvPnt.

The central control point allows you to change the relative position of the star by rotating it around the outer control point. The outer control point controls the external radius of the star, and the middle control point controls the size of the core radius, which determine the relative length & sharpness of the spikes.

#### Spiral

Draws a spiral. You can set the number of twists by double-clicking on the spiral icon. This brings up a dialog where you can also set the direction to clockwise or counter clockwise.

#### Bezier

Lets you draw bezier curves. They're not as easy to modify as the bezier curves in the Toolbox since there are no handles to pull, but it works quite nice for simple drawings. You'll have practise a bit to learn how to control them. As usual, you end the curve with a `Shift-click`.

#### Move

Moves a single object or all objects in a drawing. To move a single object, just click at a control point and drag. To move all objects hold `Shift`, click somewhere in the drawing area and drag, this will cause all objects in the drawing area to move.

#### MvPNT

Lets you move a single control point. This function lets you alter the shape of a object by stretching and moving the lines that it's made of. As you may have noticed, you can't change the shape of a circle - you can only make it smaller or move it. A way around this problem is to use polygons. If you use a polygon with a lot of sides, you will get something very close to a circle. If you simply choose the MvPNT tool, you'll only change it the usual way, but if you hold `Shift` and then click at a control point with the MvPNT tool active, you'll break up the polygon into a lot of lines. Now you can drag at the "circle" control points any way you like.

#### Copy

Will copy an object. To use it, click and hold an object's control point, then drag the copy to where you want it.

#### Delete

Deletes an object (the entire object, not just a control point)

#### Misc.

< > and ==: These little signs let you browse your drawing as if every line of your drawing was a frame in a movie < = backwards > = forward and == show all lines in the drawing.

### Settings

#### Objects

One of the nicest things with gfig is that you can save a whole bunch of drawings on disk. This makes it possible to create standard figures for your special needs.

To create a new drawing, just click New and name it in the naming dialog and an empty drawing area will appear. As you see, the new drawing name is highlighted in blue, and there is a little floppy symbol at the left side of the name, indicating that the drawing hasn't been saved yet.

If you want to rename your drawing, just `double-click` its name. If you `right-click` at a name, you'll get a menu where you can Save, Save as, Copy and Edit the drawing.

To Edit a drawing, choose the name and either `right-click` and select edit or press the Edit button. If you got some Gfig drawings from the Internet or from a friend, you can copy them to the gfig directory (`~/.gimp/gfig`), press Rescan and they will appear in the name list. If you want to load a drawing outside of your Gfig directory, press Load. This brings up an ordinary open file dialog where you can choose a Gfig drawing. You can browse your drawings by highlighting them, and look at them in the Prev window. Delete pops up a dialog asking if you want to delete the drawing (both the file and the name in the browser).

The possibility to merge Gfig drawings is a very nice option. To do so, select a drawing and press Edit, then highlight the drawing that you want it to be merged with, and press Merge. The selected drawing will now merge with the highlighted drawing. Only the Edit drawing will be altered - the highlighted drawing will not be changed.

#### Command bar

There's also a command bar at the bottom of Gfig. Done is for when you want to exit Gfig after you're done with it. Paint executes your command, i.e. paints your Gfig drawing into a Gimp image according to your settings. Save saves a gfig drawing. Clear will erase everything in the drawing area. Undo will undo your last operation. Cancel lets you exit Gfig, and drop all that you have done.

#### Grid

Controls the support grids in the Gfig drawing. If you have selected Grid Type: Rectangle in the Option tabfolder, you can set the grid size in X*X pixels with the Grid spacing slide. You can also choose to Display the grid, and to make your objects Snap to the grid. Snap to grid is an excellent tool if you work with precision drawings. If you move objects with Snap, the anchor point you drag at will snap to the grid. If you move all your objects with Snap enabled, an invisible middle point will be calculated and that point will snap to the grid system.

### The Tab folders

#### Paint

The
Using menu controls where paint is, or can be applied. Use Brush to paint the outline of the drawing, Selection if you want to transform the drawing to a selection, or Selection + Fill if you want to make a selection and then fill it with a color or pattern (see Select tab).

Draw on determines where the drawing is placed. Original puts the drawing on the original image. New creates a new layer for the drawing, and Multiple creates a new layer for each object in your drawing. If you select New or Multiple, you can also set what type of Background you want for the new layer. There are four options: Transparent, Background (fills with the current background color in the toolbox), White and Copy (copies the original image to the new layer), if you choose Multiple, the previous layer will be copied to the new layer.

Example:

- Input image`julius.tif` and a Gfig drawing with 3 objects. Draw on Multiple with Bg Transparent: This setting results in: Background Julius, layer 0 the first draw object, layer 1 the second draw object, layer 2 the third draw object.
- Input image `julius.tif` and a Gfig drawing with 3 objects. Draw on Multiple with Bg Copy: This setting results in: Background Julius, Layer 0 Julius plus object 1, Layer 1 Julius plus object 1 and 2, Layer 2 Julius plus object 1,2 and 3.

This obviously fits like a glove when you want to make GIF animations! (see chapter 20)

Reverse line: With this option you can control the direction of brush strokes. Normally, the rendering of your stroke goes from the first control point to the last one. If you set brush fade out to 20 in the brush tab folder, the stroke will fade out after 20 pixels (counted from the first control point). If you check Reverse line it will fade out from the last control point instead of the first. This option works with lines, curves and polygons. When it come to polygons, fading goes clockwise from the first control point if Reverse line is unchecked.

Approx. Circles/Ellipse: If you check this button, fading also applies to circles and ellipses. The fading goes clockwise from the first control point.

Scale to image: The drawings can be set to fit the image, or just get bigger or smaller. Just uncheck and drag the slider to scale up/down. This is nice option that makes it easy to magnify your drawings and work with small details. When you're done, check Scale to image to zoom out.

#### Brush

In this tab folder you choose a suitable paint brush. A tip is to bring up the Select brush dialog so you can set the spacing and opacity of the brush, otherwise Gfig will use the default values of the brush you select. To select a brush, highlight it, and it will be displayed in the preview.

You can choose from four different types of brushes. Brush is an ordinary brush, with a fade out control which controls where the stroke will start to fade out (if fade out is set to 0.0, there will be no fading). Airbrush is like a spray can with pressure control, Pencil is like a brush with hard edges, and Pattern allows you to paint with a pattern (much like the Clone Tool does).

#### Select

This folder is only enabled when painting with Select or Select + Fill. In order to understand the different Selection types, you have to have a fairly good grasp of basic selection (see chapter 6).

An example: Suppose that you have made two (overlapping) star objects, and you have selected Paint with Select in the Paint folder. If you now choose Add as Selection type, you'll get a selection that is a combination of the two objects (a merged double star).

If you choose Sub, you'll get nothing, (because there is no selection to subtract from) but if there had been a previous selection, the shape of the twin stars would be cut from this selection. If you choose Replace, the previous selection will be replaced with the star that you painted last in the drawing area. Intersect means that the intersection of the two star objects will become a selection.

You can fill the selection with a pattern, foreground or background color (Fill Opacity controls the transparency of the fill). You must bring up the Pattern dialog to set a pattern, otherwise the last or default pattern will be used. The Fill after button controls the fill order; e.g. if you choose All selections and Replace as selection type, only the last drawing object will be filled. If you had chosen Each selection then all objects would get filled.

Feather controls the gradual transparency or edge softness of the selection. Arc as determine how curved objects will be treated. If you set this parameter to Sector, curves will be treated as circle sectors (pie slices), and if you set it to Segment they are filled as a circle segments (half-moons). The last option is antialiasing, which is generally good to enable.

#### Options

This folder contains various options, like the possibility to make an image appear in the preview drawing area, or to reload it after applying a drawing. You can also hide the centre points in drawing objects, you can get tool tips, set a different level of undo, or change the color and shape of the grid system. You can also choose to show the X/Y position of the mouse in the Obj Details window. If you want to achieve a high level of precision, this option is very useful.

.

### Example

In order to understand this nice plug-in, we will give you an example:

How to make a star with sparkles around it and a gradient fill:

- 1: Bring up a new image, invoke Gfig and choose New Object.
- 2: Choose the star object, set it to seven spikes and draw it.
- 3: Choose Paint with Brush and a Pattern/Small Galaxy brush. Bring up the Pattern dialog and choose Ice as pattern (you may have to refresh the pattern in the brush tab folder, to do so choose Pencil and then Pattern again).
- 4: Press Paint to paint the sparkling outline of your star.
- 5: Now switch to Paint with Selection:
- 6: Press Paint, which will produce a star shaped selection
- 7: Now, bring up the Gradient editor and choose Cold_Steel as gradient
- 8: `Double-click` on the Blend tool (in the Toolbox) and set Blend to Custom and Gradient to Conical (asymmetric) in the dialog
- 9: Set the Blend tool in the centre of the star and blend.
- 10: You will now have a frosty star.

The same as above but with a pattern fill:

- 1: Repeat step 1 to 4
- 2: Now switch to Paint with Selection+Fill and press paint
- 3: You will now have a frosty star.

## Grid

With this filter you can easily create a grid system. Size obviously controls the size of the grids in pixels. Offset controls where (in pixels) the first unbroken square will be drawn.

## Ifs Compose

This Fractal based plug-in is truly wonderful! With this versatile instrument, you can create amazingly naturalistic organic shapes, like leaves, flowers, branches, or even whole trees.

#### Usage

The key to using this plug-in lies in making very small and precise movements in fractal space. The outcome is always hard to predict, and you have to be extremely gentle when you change the pattern. If you make a fractal triangle too big, or if you move it too far (even ever so slightly) the preview screen will black out, or more commonly, you'll get stuck with a big shapeless particle cloud. A word of advice: When you have found a pattern you want to work with, make only small changes, and stick to variations of that pattern. It's all too easy to lose a good thing

The plug-in interface consists of the compose area to the left, a preview screen to the right, and some tab folders and option buttons at the bottom of the dialog.

#### Settings

The Default setting (to the right) are three equilateral triangles. To create a new pattern, you Move, Rotate, Scale and Stretch these triangles. You either use the three buttons under the compose area, or press the right mouse button to access a popup menu.

Contrary to what you might believe, it's really much easier to create a leaf or a tree with Ifs Compose, than to make a defined geometrical pattern (where you actually know what you're doing, and end up with the pattern you had in mind).

### How to use Ifs Compose

This is a rather complex plug-in, so to help you understand it, you'll be guided through an example:

#### Making a leaf or a branch:

Many forms of life, and especially plants, are built like mathematical fractals, i.e a shape that reproduces or repeats itself indefinitely into the smallest detail. You can easily reproduce the shape of a leaf or a branch, by using four (or more) fractals. Three fractals make up the tip and sides of the leaf, and the fourth represents the stem.

Before opening Ifs Compose: Make a New image, and create a transparent layer. Set the FG color in the toolbox to a nice green, and set BG to white.

Sta
rt by rotating the right and bottom triangles, so that they point upwards. You'll now be able to see the outline of what's going to be tip and sides of the leaf.

To make the leaf symmetrical, adjust the bottom triangle to point slightly to the left, and the right triangle to point slightly to the right.

Press New to add a fractal to the composition. This is going to be the stem of the leaf, so we need to make it long and thin. Press Stretch, and drag to stretch the new triangle. Don't be alarmed if this messes up the image, just use Scale to adjust the size of the overlong triangle. You'll probably also have to move and rotate the new fractal to make it look convincing.

You still have to make it look more leaf-like. Increase the size of the top triangle, until you think it's thick and leafy enough. Adjust all fractals until you're happy with the shape. `Right-click` to get the popup menu, and choose Select all. Now all fractals are selected, and you can scale and rotate the entire leaf.

The final step is to adjust color. Press the Color Transformation tabfolder, and choose a different color for each fractal. To do this, check Simple and press the right color square. A color circle appears, where you can click or select to choose a color.

Press OK to apply the image, and voila, you've just made a perfect fractal leaf! Now when you've got the hang of it, you'll just have to experiment and make your own designs. All plant imitating fractals (be it oak trees, ferns or straws) are more or less made in this fashion, which is leaves around a stem (or several stems). You just have to twist another way, stretch and turn a little or add a few more fractals, to get a totally different plant.

### Main options

- Relative Probability: Determines influence or total impact of a certain fractal.
- Spatial Transformation gives you information on the active fractal, and allows you to type a value instead of changing it manually. Changing parameters with the mouse isn't very accurate, so this is a useful option when you need to be exact.
- Simple color transformation changes the current fractal color (which is the FG color in the toolbox) to a color of your choice.
- Scale Hue/Value When you have many fractals with different colors, the colors bleed into each other. So even if you set "pure red" for a fractal, it might actually be quite blue in some places, while another "red" fractal might have a lot of yellow in it. Scale Hue/Valuechanges the color strength of the active fractal, or how influential that fractal's color should be.
- Full color transformation is used to change color influence from the other (inactive) fractals. You can for example in the red fractal set Full transformation to red in all of the swatches, and you won't get any influence at all in that part of the fractal composition.

### Render Options:

- Spot Radius determines the density of the "brushstrokes" in rendered image. A low spot radius is good for thin particle clouds or spray, while a high spot radius produces thick, solid color strokes much like watercolor painting (see pic. bottom/right). Be careful with using too much spot radius - it takes a lot of time to render.
- Subdivide controls the level of detail, and Iterations determine how many times the fractal will repeat itself (a high value for subdivide and iterations is for obvious reasons a waste of process time unless your image is very large).
- Max. Memory enables you to speed up rendering time. This is especially useful when working with a large spot radius, just remember to use even multiples of the default value: 4 096, 8192, 16 384...

.

## Fractal explorer

We will try to explain this fractal generator in a non-mathematical way, so that people who are unfamiliar with advanced mathematics will understand what it does. These fractal images can be used as patterns, textures etc. or simply as interesting images.

The interface is divided into several tab folders.

- Parameters is where you select the fractal type and its parameters. In this description we will focus on the Mandelbrot fractal.
- Color is where you set color functions and parameters.
- Fractal, here you can select a custom fractal with predefined settings.
- Gradient is an option for mapping a gradient over your fractal. Options allows you to specify the interface language: English, German or French.

The preview window allows you to zoom an interesting part of the fractal. To zoom in, simply choose an area with the hair cross mouse cursor (as with the toolbox Zoom tool) or use the button Step in. To zoom out, press Step out. You can also undo and redo zooms.

### Parameters

##### Min and Xmax

Xmin controls how much the fractal will stretch to the left, and Xmax controls the stretch to the right.

##### Ymin and Ymax:

Ymin controls how much the fractal will stretch upwards (positive Y values in a coordinate system) and Ymax controls how much it will stretch downwards (negative Y values).

##### ITER

stands for iterations, and controls the level of detail in the fractal. It's not always best to have a high level of detail. Often a fractal will get more interesting when created with lower values. We have found that in the range between 16 and 70 you will find some very nice fractal patterns.

##### CX and CY

CX and CY have no impact on Mandelbrot and Sierpinski fractals. CX values between -5 and 0 control the horizontal distance of the two fractal parts. Low values (-5) takes them apart totally, and high values (0) merges them totally. Values between 0 and +5 will do the same, but in a vertical direction. CY has a similar control mechanism, but not in a horizontal/vertical direction. CY works in a 45 /225 and135/315 deg direction.

##### Load, Reset and Save

These buttons lets you load a specific setting from your personal fractal directory, or save a nice setting that you have done. Reset will naturally reset the values to the default values.

##### Fractal type;

Here can you choose between well known fractal types like Mandelbrot, Julia or Sierpinsky but you'll also find more exotic fractal types like Man´o war or Spider.

### Colors

A fractal consists of three parts. An outer part, an inner part and the "fractal" border between them.

#### Color Function

The Sine function controls the color of the inner and outer parts, while the Cosine function controls the fractal part. None means that you'll use linear instead of trigonometrical mapping for a certain color channel.

You can by checking and unchecking the three color functions choose suitable colors for the different parts of your fractal.

The Inversion button will invert low color values to high color values and vice versa. E.g checking Inversion in the green channel will make areas previously low on green, blaze with strong green color. To fully understand it, take a quick look at the Channels tab in the Layers & Channels dialog. Deselect all channels but the green channel, apply the `Image/Colors/Invert` command, and see what happens in the image and in the thumbnail channel representation.

##### Color Density

You can also set the intensity of the color channels with the slides in Color density. This makes it possible to set any color you want to your fractal.

##### Color mode

Either you use the color mode you have specified in Color options, which is what you see in the preview window, or you use a gradient from the gradient folder. This option will map the gradient over your fractal. You can achieve quite fantastic looking fractals this way.

### Gradients

Here you specify the gradient to use in the colors tab folder, a tip is to bring up the gradient editor so you can take a look at the gradients.

### Fractals

Here you'll find some nice predefined fractals that you can use straight off, or use as a backbone or point of departure for your own experiments.

## L-system

documentation by Michal Gomulinski

Lindenmayer Systems, called L-Systems, is a mathematical formalism designed primarily for concise description of natural shapes of plants. You can find out more about history and roots of L-Systems in the publications mentioned at the end of this description.

The whole concept of L-Systems consists of two main parts:

- Preparing the L-Systems description
- Applying this formula to render a graphic representation.

During the preparation stage, the program iteratively applies a set of rewriting rules onto a string. The process starts with an initial string (called axiom) and for every iteration this string grows longer. The preparation is finished when the given number of iterations have been completed.

### A Simple Example

To clarify this description, let's take a look at a simple example:

    Axiom = A
    Rules = A -> BA and
            B -> A

What does it mean?

It means that we start with a string of length 1 which contains the letter A. For each iteration, we replace every A with a string BA and every B with string A. This is how it goes:

    Iteration 0   A
    Iteration 1   BA
    Iteration 2   ABA
    Iteration 3   BAABA
    Iteration 4   ABABAABA
    ...

Note that we can use many different letters in both the axiom and the rules. If a string should contain a letter for which no rule has been defined, it will be ignored and passed to the resulting string. An example here below:

    Axiom = A
    Rules = A -> BA
            B -> AC

    Iteration 0  A
    Iteration 1  BA
    Iteration 2  ACBA
    Iteration 3  BACACBA

As you can see, by using a small and concise description we can obtain quite complex and long character strings. This is the first important lesson about L-Systems. You need only define the seed and rules which govern growth to generate large and complicated, yet interesting data.

### Graphic Representation

- To convert the string generated during the first phase of the process into its graphical representation, we must come to an agreement on some assumptions. You can compare the rendering process to an imaginary turtle that draws a line while wandering over our image. What the turtle does is to "eat" consecutive characters, and then it decides what to do next based on that information. Any character that has no meaning for the turtle is simply ignored. The following three characters have fixed meanings.
- The F character means go forward one step, drawing a line.
- The f character means jump forward one step.
- The (and) characters will cause our turtle to save its state (position, heading, parameters of its drawing tool), decrease the step length by a given factor and to draw a sub-system until it encounters a matching closing brace.
- Traditionally, the characters + and - mean turn left and turn right, but in my plug-in they are defined as so called special rules. Users are encouraged to keep the original meaning of these two signs for the sake of readability.

As an illustration for the render process, walk through the following example:

String to be rendered: F+fFf+AFAF. Let's assume that the initial position of the turtle is (0,0), initial heading is 0 degrees (the turtle is "looking" to the right), step length is 1 and the turn angle associated with the + and - characters is equal to 90 degrees.

    Interpreted         Position      Heading      Result
    character               (x, y)
                             0, 0            0

    F                1, 0          0   a line from (0,0) to (1,1)
    +         1, 0       90
    f         1, 1        90
    F         1, 2      90   a line from (1,1) to (1,2)
    f         1, 3       90
    +         1, 3       180
    A         1, 3       180   (character ignored)
    F         0, 3      180   a line from (1,3) to (0,3)
    A         0, 3      180   (character ignored)
    F         -1, 3         180   a line from (0,3) to (-1, 3)

Also have a look at the arrow picture below. It represents the turtle movements as they occur during interpretation of the simple string from the example above.

It's when you combine the possibilities offered by a concise description of long strings, by rewriting the rules with a drawing turtle that lets the characters describe its way, that you get a really powerful tool.

This idea is called L-Systems.

Take a look at the final example before we move on to some implementation details. This is Koch's curve. Below, you have its definition as an L-System. First three iterations, and a picture drawn on the basis of the third string.

    Axiom = F
    Rules = F -> F-F++F-F

    Iteration 0   F
    Iteration 1   F-F++F-F
    Iteration 2   F-F++F-F-F-F++F-F++F-F++F-F-F-F++F-F
    ...

As you can tell from the picture, the angle added to the current turtle heading by + and - characters equals 60 degrees.

### Using the L-Systems Plug-in

What can you do with the L-Systems Plug-in?

- You can create a new L-System, give it a unique name and a unique file name in which the definition will be stored. You can also use an existing L-System as a base of a newly defined one, but be sure not to forget to change the file name or you will lose either the new or the old one! All this is done within the top-left part of the plug-in's GUI. There is a list with all defined L-Systems and a set of buttons to perform various operations on them.
- You can define your L-System by entering an axiom, a set of rules and the number of iterations which should be performed before rendering. Use the first page of the notebook at the bottom of the GUI. Adding rules is as simple as pressing the Add button and filling in the pop-up dialog window. The same goes for editing and removing rules.
- You can define a set of additional rules applied once only after the last iteration. You'll learn more about such rules later. To manipulate the set of last rules you should switch to the second page of the notebook widget.
- Once you've defined the L-System, you have to move on to the third page of the notebook at the bottom of the GUI, and specify the correct information about at least two special symbols: + and -. This is because the special rules for these characters are always included in the set of special rules. The only thing you will probably have to do is to provide correct information about the turn angles.
- Here I should explain something. What does these magic special rules entries mean? That's quite simple, the rule:

    + -> 60.00:       <<CURRENT>>:   -1: -1%:(NO CHANGE)

means exactly the following: The plus character will cause the turtle to increase its heading angle by 60 degrees, not to change its brush (i.e. keep the CURRENT one), not to change brush spacing (the first -1, sorry about these meaningless expression : ), not to change the opacity either (the second -1) and not to change the drawing color.

- In the end you can change various rendering parameters like initial position and heading, step length, turn and step randomness and others.

### Advanced Features

#### Using Braces

As I explained before, you can introduce matched braces in both the axiom and in all rules. They are significant during the rendering process because they cause the turtle to draw part of the L-System in a separate context. The most common use of braced L-Systems is to draw plant-like shapes. You use braces to denote that the turtle after drawing for example a branch should return to the position where the branch started and continue drawing the main trunk. You can change brush shapes, colors, spacing and so on while drawing the branch, but all of these changes will have no effect on the visualization of the trunk and - possibly - the consecutive branches.

As an example, look carefully at the definition of L-Systems with names that start with `Plant/`

#### The Purpose of Last Rules

An additional set of rules applied once, just before rendering, serves several purposes. First, it can be used to translate abstract objects (with no turtle meaning) used in main rules into something visible. You often do this when designing plants or flowers. In this case, every character in main rules and axiom would have a specific meaning, like root, trunk, leaf and so on. Every such abstract symbol should be transformed into something visible with a given color, brush shape, length.

Secondly, you can use last rules to modify the generated shape to make it look more interesting. This is quite common when the L-System looks like a kind of a grid. It would be more interesting if you could see the way the turtle has drawn the shape but that's impossible since many lines are connected in a single point. To avoid that, one should define a set of three simple last rules, which will make turns less sharp:

    + -> +F+
    - -> -F-
    F -> FF

Be sure to adjust the definition of + and - in the special rules section. They must use half the angle they had before the introduction of the last rules. Probably, also the length of a single step will have to be cut in half.

#### Effective Use of Special Rules

Last rules are not only turns! You can use them quite extensively to make your L-Systems look more lively and realistic.

- First comes brushes which will provide you with various textures and line styles.
- Second is color. What the purpose is of using color in the image you are painting is something you probably know better than me!
- Third is opacity. It works great in plants, where for example leaves can be made somewhat translucent to make the picture more interesting. Painting with a semi-opaque paint can also produce nice effects when drawing patterns with intersecting lines. The final color of various parts of the image will then depend on how many times the pixel has been painted - and with what color!
- Fourth and the last is spacing which probably has only one use: to make the program draw just a single print of a brush instead of an awful line painted with a brush which was not designed for it.

#### Where to Look for More Information

If you are interested in the concept of L-Systems look for the following books/articles. For more references look in Prusinkiewicz's book.

- P. Prusinkiewicz, J. Hanan Lindenmayer Systems, Fractals and Plants in series "Lecture Notes in Biomathematics", Springer Verlag 1989
- A. R. Smith "Plants, Fractals and Formal Languages" in ACM Computer Graphics vol. 18, no 3, July 1984

#### Examples

## Maze

Generates a maze. If you want to use it in a pattern, you can get the maze tileable if you check that button.

Width and height controls how many pathways the maze should have. The lower values for width and height, the more paths you will get. The same happens if you increase the number of pieces.

You can specify random Seed or use the time as seed. Using random seed means that the maze pattern will be different each time you invoke the filter.

## Plasma

Plasma generates colorful clouds, which can be used for textures etc... You can control the turbulence in the plasma cloud with the Turbulence slide. High values give a hard and cold feeling to the cloud, low values produce a softer and warmer cloud. You can also generate Seed for random variations in the plasma cloud.

## Qbist

This filter generates random textures, much like KPT Texture Explorer. The original texture is displayed in the middle square, and different variations surround it. If you like one of the alternative textures, click on it. The chosen texture now turns up in the middle, and variations on that specific theme are displayed around it. When you have found the texture you want, click on it and then click OK. The texture will now appear on your drawable.You can save and load your textures. This is quite handy since it's almost impossible to recreate a good pattern by just clicking around.

## Sinus

Lets you make sinusoidally based textures, which looks rather like watered silk or plywood. This plug-in works by using two different colors that you can define in the color tab folder. These two colors then create wave patterns based on a sine function.

You can set the X and Y scale which determine how stretched or packed the texture will be. You can also set the complexity of the function, a high value creates more interference or repetition in the pattern. You can also specify a random seed for greater variation in the pattern.

### Functions

Let's discuss the functions in more detail.

##### X/Y scale

A low X/Y value will maximize the horizontal/vertical stretch of the texture, while a high value will compress it.

##### Complexity and Random Seed

Complexity controls how the two colors interact with each other (the amount of interplay or repetition). Random seed increases variation in the pattern.

##### Force tiling

If you want to use the texture as a tiled background in a webpage, this option creates better looking tiles (though not quite seamless). Tip: To get a perfect result; flip the tiles in the Make Seamless plug-in in the Filters/Map menu so that they mirror each other.

##### Ideal/Distorted

This option gives additional control of the interaction between the two colors. Distorted creates a more distorted interference between the two colors than Ideal.

### The Color tab folder

Here you set the two colors that make up your texture. You can use Black and white or the foreground/background colors in the toolbox, or you can choose a color with the color icons.

The Alpha channel controls the transparency of your texture, just remember that you need an alpha enabled background or a layer.

### The Blend tab folder

In this folder you can control the blend of the two colors. You can choose between three functions to set the blend - Linear, Bilinear and Sinusoidal. The Exponent controls which color is dominant. If you set the exponent to -7.5 the left color will dominate totally, and if you set it to + 7,5 it will be the other way around, a zero value is neutral.

## Solid Noise

This is a great texture maker. Note that this noise is always gray, even if you applied it to a very colorful image (it doesn't matter what the original image looks like - this filter doesn't use background information). This is also the filter you use for creating displacement maps for the Twist plug-in.

X and Y Size controls size and proportion of the noise shapes in X and Y direction.

Seed generates a random variation in your texture.

Detail controls the amount of detail in the noise texture, higher values gives higher level of detail, and the noise seems to be made of small particles, which makes it feel hard. A low value makes it more soft and cloudy. I

f you check Turbulent, you'll get very interesting effects, often something which looks much like oil on water (or living tissue).

If you check Tileable, you'll get a noise which can be used as tiles, e.g you can use it as a background in a HTML page, and the tile edges will be invisible (seamless).

Generated by fmtoweb (v. 2.9c) written by Peter G. Martin <peterm@zeta.org.au> Last modified: 20 May 1998