L-System Version 1.00

Synopsis:
L-System is a 3DS Max object plugin built on the core algorithms from an old DOS program called, LParser, originally written by Laurens Lapre.  The technology is based upon the work of P. Prusinkiewicz and A. Lindenmayer (Lindenmayer is the "L" in L-Systems) and is a really interesting way to investigate simulated plant growth and self similar fractals. The plugin can be used to create and edit a universe of plants and animals as well as some very interesting shapes and geometries.

Motivation:
We needed to be able to animate plant growth.  Unfortunately, the plugin wasn't done it time and wasn't used.

Installation:
Just put this plugin in your 3DS Max plugin path or use the "Configure Paths" dialog to add the location of the plugin to your plugin path.  See the Max docs for more help.  The object can be found in the create panel, with the geometry button selected, by selecting "Blur's Objects" from the sub-category dropdown list.

Usage:
Basic Concepts:

Create:
In the Create Panel, Click the L-System button, and in any viewport, drag to define the size of the object.

Parameters:
Size:
Animatable - controls the size of the object.  This isn't the overall size (like a bounding box) because the eventual size of the object is really determined by how much it grows.  This just gives you a scaling parameter that you can work with if you want.

Recursion:
Animatable - this is your growth control.  In a tree L-System that is written properly, this parameter can be animated to make the tree grow from a seedling to an old tree.

Basic Angle:
Animatable - the L-System has a base angle that is used and modified over and over again in the interpretation of the L-String.  The angle parameter can be used to coil and uncoil an L-System object.

Thickness:
Animatable - Thickness is, of course, how thick the object is.  The value is a percentage of the height of the basic building block.

Min Thickness:
Animatable - in the L-System object, object's can scale down as they grow - this paramter keeps the pieces from getting thiner than you may want.

Seed:
The L-System can be told to grow in random directions.  This parameter is the seed for those random values.  Using it, you can create one tree L-System, and turn it into a forest of similar, but unique trees.

Generate Closed Form:
The building blocks of the L-System can either be individual blocks (an open form) or strung together as cylinders (a closed form).

Open:
Opens and evaluates a new L-String.  There are several example L-Strings included from the original LParser distribution.

Edit:
Edit opens an editor window so you can work with and evaluate L-Strings.

Generate UVW Mapping:
Not implemented.  Mapping coords are not applied, by default to the object.

Notes on the Editor:

L-System Turtle Commands
Drawing commands when {} structure command is active
F move forward and draw full length  record vertex 
F(x) move x forward and draw  record vertex 
Z move forward and draw half length  record vertex 
Z(x) move x forward and draw  record vertex 
Note: F = F(100) = Z(100)
Z = F(50) = Z(50)
 
Movement commands when {} structure command is active
f move forward with full length record vertex 
f(x) record vertex  move x forward
z move forward with half length record vertex 
z(x) move x forward record vertex
g move forward with full length don't record vertex 
g(x) move x forward don't record vertex
. don't move record vertex 
 
Orientation commands
+ turn left (counter clockwise) around the turtle's local X vector
+(x) turn x degrees left (counter clockwise) around the turtle's local X vector
- turn right (clockwise) around the turtle's local X vector
-(x) turn x degrees right (clockwise) around the turtle's local X vector
& pitch right (clockwise) around the turtle's local Y vector
&(x) pitch x degrees right (clockwise) around the turtle's local Y vector
^ pitch left (counter clockwise) around the turtle's local Y vector
^(x) pitch x degrees left (counter clockwise) around the turtle's local Y vector
< roll left (counter clockwise) around the turtle's forward (Z) vector
<(x) roll x degrees left (counter clockwise) around the turtle's forward (Z) vector
> roll right (clockwise) around the turtle's forward (Z) vector
>(x) roll x degrees right (clockwise) around the turtle's forward (Z) vector
 
Special Orientation commands
turn 180 degrees around X vector  - ie. turn around and face backwards.
roll 180 degrees around the turtle's forward (Z) vector 
roll until horizontal - (not sure this works properly)
turn/pitch/roll in a random direction 
~(x)  turn/pitch/roll in a random direction with a maximum of x degrees
correction for gravity with 0.2 
t(x)  correction for gravity with x 
 
Structure commands
push current state (size, position, alignment) of the turtle onto the stack
pop current state (size, position, alignment) of the turtle off of the stack
begin polygon drawing mode.  Draws one face at a time. 
end polygon drawing mode.
 
Size/Angle/Thickness commands
increment the turtle's current size (length) with 1.1 
decrement the turtle's current size (length) with 0.9 
"(x)  multiply the turtle's current size (length) with x (same as '(x))
increment the turtle's current default rotation angle with 1.1 
decrement the turtle's current default rotation angle with 0.9 
:(x)  multiply the turtle's current default rotation angle with x (same as ;(x)) 
increment the turtle's current thickness with 1.4 
decrement the turtle's current thickness with 0.7 
?(x)  multiply the turtle's current thickness with x (same as !(x))
 
Additional commands
increment material id (color index)
c(x)  set material id to x 
end of object description

Reference Material:


To Be Done:
Lots of stuff.  There a still a lot of bugs in this and I have a wishlist that's a mile long.  If anyone is interested in continuing development on this, let me know.  I am considering open sourcing this and attempting a collaberative development on it, but I want to be sure there is some interest first.  I think it's a really cool project and would like to continue with the generosity of the those that originated the basics of the plugin.  NOTE:  a few of the ls-files cause problems - some crash the plugin.  These ls-files have been included, but have been renamed to *.ls.dead so that they won't be accidentally loaded.

General:
The usual disclaimers apply - Blur studio cannot support or guarantee this thing in any way. Its gratis - enjoy. If you have any comments or questions, direct them to blurbeta@blur.com - If we have the time, we'll do what we can.  See also:  the license agreement. our generic readme, this plugin's current bug list.

You may not distribute this without permission from blur studio.

If you use it, your company has cool T-Shirts, and your looking for a way to show your gratitude, send a shirt or two to:

R&D at Blur Studio, Inc.
1130 Abbot Kinney Blvd.
Venice, CA 90291

software@blur.com
Scott Kirvan - Blur.

Last Modified : 09/29/99