"\n"
"Evolvotron User Manual
\n"
"\n"
"\n"
" Evolvotron is interactive "generative art" software to evolve \n"
" images/textures/patterns through an iterative process of random \n"
" mutation and user-selection driven evolution. \n"
"
\n"
"\n"
" On starting the application, a grid of images is displayed. \n"
" Resize or maximise the application if you like, but the more \n"
" pixels have to be calculated, the slower it will be. \n"
" (For the default 2D image mode, you will need a fast machine or patience. \n"
" For the optional animation mode, you will need both.) \n"
"
\n"
"\n"
" Simply repeat the following until bored: \n"
"
- Click (singleclick) on an image you like to \n"
" spawn the next generation of its mutant offspring. \n"
"
- Wait until variations on it are regenerated in sufficient \n"
" detail that you can decide which one you like best again. \n"
"
\n"
"
\n"
"
\n"
"\n"
" IMPORTANT: Initially you should select images with some sort of variation. \n"
" If you select a uniform image, you may get stuck in a degenerate zone with \n"
" little to mutate and therefore little chance of escape to more interesting \n"
" images. You can always reset/restart from the "File" menu (the difference is \n"
" that "reset" also resets the mutation parameters to their default values). \n"
" Selecting one of the "warp" options from a context menu (right-click on \n"
" an image) can also help by introducing an additional opportunity for \n"
" mutation on subsequent spawns. \n"
"
\n"
"\n"
" Note that various spirals, grids and tiles, although complex looking, \n"
" are actually implemented by a single function node and may leave you stuck too. \n"
"
\n"
"Command Line Options
\n"
"\n"
" The following are equivalent: \n"
"
- evolvotron --grid 12x8 \n"
"
- evolvotron --grid=12x8 \n"
"
- evolvotron -g 12x8 \n"
"
\n"
"
\n"
"\n"
"General Options
\n"
"\n"
"\n"
"
- -a, --autocool
\n"
" Enable autocooling by default, and cause resets of mutation \n"
" parameters to re-enable autocooling if it was disabled. \n"
" \n"
"
\n"
"\n"
"\n"
"
- -F, --fullscreen
\n"
" Start in "fullscreen" mode (NB for Qt on X11 this means \n"
" a screen-filling borderless/undecorated window is used; \n"
" it's not simply maximising the window, and it's not the \n"
" sort of framebuffer hijacking used by SDL games). The Qt \n"
" documentation claims some window managers may not be entirely \n"
" cooperative with this (in which case sorry, you're on your own). \n"
" evolvotron actions which bring up dialog boxes (e.g save) seem \n"
" to generally behave fairly sensibly but child windows \n"
" (e.g enlargements or dialogs) can show some "interesting" behaviour. \n"
" Fullscreen mode can be toggled within the application using "F" key. \n"
" The "Esc" key will also exit it. \n"
" \n"
"
\n"
"\n"
"\n"
"
- -g, --grid colsxrows
\n"
" Sets size of the grid of image display cells in the main application area (defaults to 5x6) \n"
" \n"
"
\n"
"\n"
"\n"
"
- -h, --help
\n"
" Print summary of command line options and exit. \n"
" \n"
"
\n"
"\n"
"\n"
"
- -j, --jitter
\n"
" Enable sample jittering. Samples will be made at a random position \n"
" within a pixel instead of on a regular grid, providing some antialiasing. \n"
" \n"
"
\n"
"\n"
"\n"
"
- -m, --multisample multisample grid
\n"
" Enables additional antialiasing passes. \n"
" Specifying 2 or 3 will provide an additional pass with 2x2 or 3x3 samples per pixel. \n"
" Specifying 4 (or higher) will provide a 2x2 and a final 4x4 pass. \n"
" Specifying 1 provides the default behaviour of one sample per pixel. \n"
" For best rendering quality also specify -j. \n"
" \n"
"
\n"
"\n"
"\n"
"
- -M, --menuhide
\n"
" Start with menu and status bar hidden. Nice with --fullscreen. \n"
" Hiding can be toggled within the application using ctrl-m. \n"
" The Esc key will also bring them back. \n"
" \n"
"
\n"
"\n"
"\n"
"
- -p, --spheremap
\n"
" Images are produced by sampling the underlying 3D function on the \n"
" latitude-longitude grid of a sphere. The resulting images should be \n"
" usable as spheremaps/spherical environment maps. Animations vary \n"
" the radius of the sphere. NB when in spheremap mode, \n"
" middle mouse button adjustments do not yet behave like you'd expect. \n"
" \n"
"
\n"
"\n"
"\n"
"
- -S, --startup function_filename
\n"
" Specify a function filename (evolvotron's XML format) to load on startup \n"
" (or reset). The option can be provided multiple times, and this is \n"
" also the interpretation of any positional arguments. Startup functions \n"
" are placed in the grid from left to right, top to bottom. \n"
" \n"
"
\n"
"\n"
"\n"
"
- -U, --shuffle
\n"
" Use in conjunction with -S / --startup options, to display the specified \n"
" functions in random order, both on application startup and on each \n"
" reset of the application. \n"
" \n"
"
\n"
"\n"
"Animation Options
\n"
"\n"
"\n"
"
- -f, --frames frames
\n"
" Number of frames in animations (defaults to 1 i.e no animation) \n"
" \n"
"
\n"
"\n"
"\n"
"
- -l, --linear
\n"
" Vary z linearly with time rather than sinusoidally. \n"
" Sinusoidal variation generally looks better when animations are "bounced" \n"
" forwards and backwards, but this option is useful when generating slices to \n"
" use as volumetric textures. \n"
" \n"
"
\n"
"\n"
"\n"
"
- -s, --fps framerate
\n"
" Rate at which frames are displayed per second (integer). (Defaults to 8). \n"
" \n"
"
\n"
"\n"
"Power-user & Debug Options
\n"
"\n"
"\n"
" Note that the usual Qt/X11 options \n"
" (for example, -geometry widthxheight option to set on-screen size in pixels) \n"
" are processed and removed before evolvotron options are checked. \n"
"
\n"
"\n"
"
- -D, --debug
\n"
" Puts the certain aspects of the app into a more debug oriented mode. \n"
" Currently (ie this may change) it simply changes function weightings \n"
" so virtually all function nodes are FunctionNoiseOneChannel. By itself \n"
" this is a pretty pointless thing to do, but in conjunction with the -X \n"
" options it's useful for examining the behaviour of specific functions. \n"
" \n"
"
\n"
"\n"
"\n"
"
- -E, --enlargement-threadpool
\n"
" Use a separate thread pool for computing enlargements. \n"
" Using this option ensures computation of enlargements \n"
" continue to make some progress even while the main grid \n"
" is being actively worked on. However, this will be at \n"
" the expense of main grid rendering performance. \n"
" Without this option, enlargements' final high-resolution \n"
" renderings are invariably lower priority than computation \n"
" for images in the main grid. \n"
" See also the -N option to control the priority of threads \n"
" in this pool. \n"
" \n"
"
\n"
"\n"
"\n"
"
- -n, --nice niceness
\n"
" Sets additional niceness (relative to the main application thread) \n"
" of the compute (rendering) thread(s). \n"
" It's useful to run compute threads at a slightly lower priority \n"
" ("nice 4\" is the default without this option) than the main (GUI) \n"
" part of the program (but note that this means other normal/lowish \n"
" priority tasks running on your machine may slow evolvotron down \n"
" a bit more than expected). \n"
" \n"
"
\n"
"\n"
"\n"
"
- -N, --Nice enlargement niceness
\n"
" Sets additional niceness (relative to the main application thread) \n"
" of the compute thread(s) computing enlargements (default value is 8). \n"
" Only effective in conjunction with -E option. \n"
" \n"
"
\n"
"\n"
"\n"
"
- -t, --threads threads
\n"
" Sets number of compute threads. \n"
" If this is not specified, then as many compute threads are created \n"
" as there are processors on the system (unless this cannot be \n"
" discovered in which case only a single compute thread is created). \n"
" Non-linux builds will likely not include code to determine processor count \n"
" (suitable patches gratefully received). \n"
" \n"
"
\n"
"\n"
"\n"
"
- -u, --unwrapped
\n"
" Modifies -F behaviour so that the specified "favourite" function \n"
" is NOT wrapped by space/colour transforms. NB For functions without leaf nodes \n"
" or parameters (e.g FunctionSphericalToCartesian) this doesn't \n"
" leave any scope for variation or future mutation. \n"
" Function name recognition is case sensitive. \n"
" Example: \n"
" evolvotron -F FunctionKaleidoscope -u
\n"
" \n"
"
\n"
"\n"
"\n"
"
- -v, --verbose
\n"
" Verbose mode, writes various things to application stderr. \n"
" This is primarily intended to assist debugging. \n"
" This option used to be useful for getting a list of supported function \n"
" names for use with the -F option, but those can also be inspected \n"
" via the Settings dialogs. \n"
" \n"
"
\n"
"\n"
"\n"
"
- -x, --favourite functionname
\n"
" Force a specific "favourite" function type to be used at the top level \n"
" of all function trees. The specified function is still wrapped \n"
" by spatial and colour warping functions which may disguise \n"
" it considerably. A list of all the function names understood \n"
" by evolvotron is output during app startup when the -v option \n"
" is specified. Function name recognition is case sensitive. \n"
" Example: \n"
" evolvotron -F FunctionSpiralLinear
\n"
" \n"
"
\n"
"\n"
"Mouse Control
\n"
"\n"
"Left-click
\n"
"\n"
" A left-click on an image in the main window spawns the mutant offspring \n"
" of that image to all the other (non-locked) displays in the grid. \n"
"
\n"
"Right-click Context Menu
\n"
"\n"
" Right clicking on an image gets you a few more options: \n"
"
\n"
"\n"
"
- "Respawn" regenerates just the current image from whatever it was \n"
" spawned from (and using recolour or warp, if that's what was used \n"
" to produce it). \n"
" The main use of this is to make your grid of images look nice \n"
" for screendumps, by regenerating any which aren't up to scratch. \n"
" NB May not work as expected after an "undo". \n"
"
\n"
"
\n"
"\n"
"\n"
"
- "Spawn" is the same as clicking an image. It generates mutated \n"
" images to all unlocked images in the grid. \n"
"
\n"
"
\n"
"\n"
"\n"
"
- "Recolour" to produce different coloured variants of the selected image \n"
"
\n"
"
\n"
"\n"
"\n"
"
- "Warp"'s sub-options produce variants of the image which have been \n"
" zoomed/rotated/panned. \n"
"
\n"
"
\n"
"\n"
"\n"
"
- "Lock" to prevent an image from being overwritten by spawns from other \n"
" images (select again to toggle). \n"
"
\n"
"
\n"
"\n"
"\n"
"
- "Enlarge" to produce a blow-up of the image in a single window. \n"
" Submenu items select either a freely resizable window or \n"
" a scrollable view of a fixed size image. \n"
" If the application is running in fullscreen mode (NB this is \n"
" NOT the same as a simply "maximised" window) then the enlarged \n"
" image will also be fullscreen (the "Resizeable" mode is probably \n"
" what you want in this case as the image will automatically be \n"
" rendered at the correct resolution). \n"
"
\n"
"
\n"
"\n"
"\n"
"
- "Save image" to save the image in a file (.ppm or .png). \n"
" You generally want to save an enlarged image: if you \n"
" save a small image from the grid, the size you see on the screen \n"
" is the size you get in the file. Save isn't allowed until the \n"
" full resolution image has been generated; if you try to save too \n"
" early a dialog box will be displayed telling you to try again later. \n"
"
\n"
"
\n"
"\n"
"\n"
"
- "Save function" to store the function to an XML file. \n"
"
\n"
"
\n"
"\n"
"\n"
"
- "Load function" to load a stored function from an XML file. \n"
" NB if the file was saved from a different version numbered \n"
" evolvotron, a warning message will be generated. \n"
" Save/load of functions is an experimental feature and you should \n"
" not count on future versions of evolvotron being able to load \n"
" files saved from old versions, or producing the same image \n"
" from a loaded function. Attempting to load functions from later \n"
" versions into earlier versions is even less likely to succeed. \n"
"
\n"
"
\n"
"\n"
"\n"
"
- "Simplify" prunes the function tree of redundant branches where \n"
" possible (the same action can be applied to all images from \n"
" the main "Edit" menu). This doesn't change the appearance of \n"
" the image, but may make it recompute faster. \n"
"
\n"
"
\n"
"\n"
"\n"
"
- "Properties" brings up a dialog box containing some information \n"
" about the image (e.g the number of function nodes it contains). \n"
"
\n"
"
\n"
"\n"
"Middle Mouse Button
\n"
"\n"
" [NB This feature will probably only be of practical use to those with high-end machines]. \n"
"
\n"
"\n"
" You can use the middle mouse button to drag-adjust individual images. \n"
" This is useful for "final composition" type tweaks, e.g centering an \n"
" image's most interesting feature, or just for satisfying your curiosity \n"
" about what's off the edge of the image. \n"
"
\n"
"\n"
" It also works on enlarged images, although it's virtually unusable without \n"
" a bit of practice on smaller, faster ones (just boldly make the adjustment \n"
" you want, release the button... and wait). \n"
"
\n"
"\n"
" Changes made can be rolled-back on the main Edit/Undo menu item, \n"
" one drag-action at a time. \n"
"
\n"
"\n"
" An unmodified middle-mouse drag pans the image around following \n"
" the mouse motion. \n"
"
\n"
"\n"
" A SHIFT-middle drag zooms the image in and out with scaling \n"
" proportional to the distance from the centre of the image. Beware of \n"
" generating huge zooms by clicking too near the centre of the image. \n"
"
\n"
"\n"
" An ALT-SHIFT-middle drag is similar but anisotropic: the scaling \n"
" may be different in X and Y. Warning: this technique is very \n"
" sensitive and can be quite tricky to use! In particular, \n"
" if you initially click near the centre axes of the image the zoom factor \n"
" can be HUGE, so the best way to start using this is to click about halfway \n"
" on a diagonal between the image centre and a corner and gently move in and \n"
" out radially. Dragging from one side of the image to the other flips it over \n"
" (the degenerate case of infinite zoom at the centre is handled cleanly I think). \n"
" If it all goes horribly wrong, undo and try again. \n"
"
\n"
"\n"
" A CTRL-middle drag rotates the image about its centre. \n"
"
\n"
"\n"
" A CTRL-ALT-middle drag shears the image (the best way to see what \n"
" this does is to click in the corner of an image and move the mouse \n"
" horizontally or vertically). \n"
"
\n"
"Keyboard Control
\n"
"\n"
"\n"
" There are some keyboard shortcuts. \n"
"
\n"
"Main Window
\n"
"\n"
"\n"
"
- "r"/"t"/"x" perform various starts of reset/restart. \n"
"
\n"
"
\n"
"\n"
"\n"
"
- "q" quits the application. \n"
"
\n"
"
\n"
"\n"
"\n"
"
- "u" (and also Ctrl-z) does an undo. \n"
"
\n"
"
\n"
"\n"
"\n"
"
- "f": full-screen mode (on X11, Qt does this by asking the \n"
" window manager for a screen-filling undecorated window, and the \n"
" documentation contains some dire warnings about problems with broken \n"
" window managers). See also "-F" command line option. \n"
" Fullscreen mode propagates to enlarged image display windows. \n"
" NB The application may completely disappear from the screen for \n"
" a brief interval while switching mode. \n"
"
\n"
"
\n"
"\n"
"\n"
"
- "m" : hides status and menu-bar hiding, which can be nice when \n"
" in full-screen or window-maximised mode. See also "-M" \n"
" command line option. Also note that while the menu bar \n"
" is hidden, most of these keyboard shortcuts won't function \n"
" as they're tied to the menu system. \n"
"
\n"
"
\n"
"\n"
"\n"
"
- Esc : exits full-screen and/or menu-hiding mode, putting the \n"
" application into its normal default state. \n"
"
\n"
"
\n"
"\n"
"Enlargement Windows
\n"
"\n"
" The image display windows created by selecting "Enlarge" from a \n"
" context menu also have a couple of keyboard operations: \n"
"
\n"
"\n"
"
- "f" : [NB only available with fullscreen build option] toggles \n"
" full-screen mode. When returning to normal mode, if the main app \n"
" window was fullscreen then it will also drop back to normal mode. \n"
"
\n"
"
\n"
"\n"
"\n"
"
- Esc : [NB only available with fullscreen build option] \n"
" completely closes a fullscreen-mode enlargement window. \n"
"
\n"
"
\n"
"\n"
"Gui Elements
\n"
"\n"
"Main Menu Bar
\n"
"\n"
"
- File menu: \n"
" Items to restart, reset and quit the application. \n"
" The difference between restart and reset is that reset \n"
" sets the mutation parameters back the their default values. \n"
" The "randomize function weights" version of restart scrambles \n"
" the relative probability of the various function types (if you \n"
" think evolvotron just keeps generating the same kinds of \n"
" images give it a try). The "restart with specific function" \n"
" item duplicates the functionality of the "-x" and "-X" command-line \n"
" options. \n"
"
- Edit menu: \n"
" "Undo" lets you undo certain actions: e.g spawn, \n"
" middle-button adjustment, simplification and lock/unlock. \n"
" There is a large but limited number of levels of undo. \n"
" "Simplify" is of curiosity value only: it prunes redundant \n"
" branches from images ("junk DNA"); this may help them recompute \n"
" faster but at the cost of there being less mutatable material. \n"
"
- Settings menu: \n"
" "Mutations" brings up a dialog to modify the amount \n"
" of change spawned images are subject to. \n"
" (See "advanced usage" below.) \n"
" "Functions" brings up a dialog to modify the relative probability \n"
" of functions being used. By default all functions are equally \n"
" likely except for iterative functions and fractals, which are \n"
" almost but not completely suppressed. But if you think there \n"
" are too many spirals or grids (or not enough fractals) then this \n"
" is the place to adjust the frequency with which they appear. \n"
" If the software was built with the fullscreen option, \n"
" that can also be controlled from this menu. \n"
" "Favourite" brings up a dialog which allows you to select a specific \n"
" function type to always be used as the root node of any new functions. \n"
" The function can be wrapped by some other random stuff, or unwrapped. \n"
" See also the -X and -x command line options. \n"
"
- Help menu: \n"
" Items to bring up documentation, and the usual "About" box \n"
" (which includes the license). \n"
"
\n"
"
\n"
"\n"
"Status Bar
\n"
"\n"
" An area on the status bar shows how many compute "tasks" are \n"
" outstanding (or "Ready" when there are none). When two task \n"
" totals are reported, the first is for the main grid and the \n"
" second for any enlargements being computed. \n"
" Each "task" is the recomputation of an image at some resolution. \n"
" Tasks are prioritised by their number of pixels (small image \n"
" implies higher priority). This is why, if the main grid is still \n"
" recomputing, recalculations of enlargements will appear to freeze \n"
" after they have reached a certain resolution, at least until other \n"
" lower resolution tasks have completed. \n"
"
\n"
"\n"
" The status bar also provides some control over the "autocool" \n"
" mechanism which reduces mutation strength with time. \n"
" See the advanced usage section below. \n"
"
\n"
"Tips
\n"
"\n"
"
- Don't start a session with any preconceived ideas about the kind \n"
" of image you want to get out of it. You will be disappointed. \n"
"
- I get the best results when I click the image which most \n"
" immediately catches my eye as they start appearing. If you stop \n"
" to think about it too much then things seem to go downhill. \n"
"
- If you seem to be just getting the same old spirals and grids \n"
" all the time, stop clicking on spirals and grids! \n"
" (The same goes for random mush). \n"
"
- Don't get too hung up on using the warp and middle-mouse drag \n"
" adjustments every iteration... use those tools for final \n"
" polishing of your masterpiece. \n"
"
- You can quickly cycle through a lot of initial images (until \n"
" you find one with real potential) by bashing on Ctrl-r to \n"
" repeatedly restart. \n"
"
- To add variety to an image's mutations, nudge it with a small \n"
" middle-mouse drag. This introduces a top level transform, and \n"
" therefore more parameters to be varied. \n"
"
- Enlargements take a long time to complete their final \n"
" high-resolution rendering pass (especially with multisampling \n"
" enabled). Most convenient practice seems to be to go away and \n"
" leave them to complete, then come back and save them later. \n"
" Continuing to click away on the main grid effectively starves \n"
" them of CPU, unless the -E command-line option is used. \n"
"
\n"
"
\n"
"\n"
"Animation
\n"
"\n"
" As of version 0.2.0 evolvotron contains some experimental support \n"
" for generation of animations (although so far the results have been \n"
" pretty disappointing IMHO, but it's still early days). \n"
"
\n"
"\n"
" NB THIS IS EVEN MORE COMPUTATIONALLY AND MEMORY INTENSIVE THAN \n"
" THE STATIC IMAGE MODE. \n"
"
\n"
"\n"
" Simply supply a -f frames command line option and evolvotron will \n"
" generate animated sequences with the specified number of frames. \n"
" These will be displayed at the frame rate specified by the \n"
" optional -s framerate option (default 8). So "evolvotron -s 24" \n"
" will generate 3 second long animations. Animations reverse direction \n"
" at each end to avoid a sudden jump. \n"
"
\n"
"\n"
" If you save an animation as PPM or PNG, multiple files will \n"
" be saved with .fnnnnnn (where nnnnnn is the zero-filled frame \n"
" number) inserted in each filename before the filetype qualifier. \n"
"
\n"
"\n"
" For example, if you enter foo.ppm as the filename to save, \n"
" files foo.f000000.ppm, foo.f000001.ppm... will be saved. \n"
" If you have the ImageMagick tools you can convert these to \n"
" an animated GIF playing at approx. 8 frames per second with: \n"
"
\n"
"\n"
" convert -delay 12 foo.f??????.ppm foo.gif
\n"
"
\n"
"Advanced Usage
\n"
"\n"
" Evolvotron's idea of an image is a function which converts \n"
" XYZ co-ordinates to an RGB colour (however we can only display \n"
" a 2D plane for now so the input Z is fixed to zero, or varied \n"
" with time when animating). \n"
"
\n"
"\n"
" The image functions are constructed from trees of function nodes. \n"
" (In the mathematical expression 1+(2*x) the "+" and the "*" would \n"
" be function nodes.) Evolvotron's functions tend to correspond to \n"
" geometric or colour-space operations or anything else which can be \n"
" applied to a 3D vector. \n"
"
\n"
"\n"
" By mutating the structure of the function tree (adding random \n"
" branches, for example) and the values of the constant embedded \n"
" within it, the image can be changed. \n"
"
\n"
"\n"
" The mutation parameters are under control from the dialogs accessible \n"
" via the Settings menu, and the "autocool" mechanism exposed in the \n"
" status bar also has some influence. \n"
"
\n"
"\n"
" There are two kinds of mutation: perturbations to the magnitude of constants, \n"
" and structural mutations which re-arrange the function tree of an image. \n"
" Four types of structural mutations are currently implemented: \n"
"
- replacement of a function branch by a new random stub (a "Glitch" mutation). \n"
"
- a random shuffle of a node's sub-nodes \n"
"
- insertion of random nodes between a node and it's sub-nodes \n"
"
- the substitution of a node with one of a different type, \n"
" with sub-nodes unaffected where possible). \n"
"
\n"
"
\n"
"\n"
"\n"
" The probability (per function node) of these mutations is controlled \n"
" from spinboxes on the "Mutation Parameters" dialog (expressed as \n"
" chances-in-a-hundred), as is the size of perturbations to constants. \n"
"
\n"
"\n"
" It is useful to think of the perturbations to constant parameters as \n"
" being a thermal effect (hence the "heat" and "cool" buttons), while \n"
" structural alterations are more drastic and are caused by high energy \n"
" gamma rays or something (hence "irradiate" and "shield" buttons to \n"
" adjust the probability of structural mutations). \n"
"
\n"
"\n"
" So why would you want to change the mutation parameters from the initial \n"
" defaults ? Basically, if you're getting too much variation in spawned images \n"
" (this tends to happen after many generations of images, by which time the \n"
" function trees have grown quite large and therefore are experiencing a lot \n"
" of mutations) then cool and/or shield. \n"
" If all the images look too similar, heat and/or irradiate. \n"
"
\n"
"\n"
" The "autocool" mechanism (enabled from the statusbar or mutation parameters \n"
" dialog) automatically reduces the strength of mutations from the base \n"
" values with successive generations. The cooling can be cancelled by \n"
" disabling autocooling or pressing the "Reheat" button to zero the number \n"
" of generations counted for cooling. The effect of the cooling is a compound \n"
" halving of the mutation strength after some number of generations (this number \n"
" is the "half-life" controllable from the mutation parameters dialog). \n"
" Note that if autocooling is enabled then eventually, after a number of \n"
" iterations more than many multiples of the half-life has passes, spawned \n"
" images will differ very little from their parents (hence the need for "reheat"). \n"
"
\n"
"\n"
" There is also a dialog accessible from "Functions..." on the "Settings" menu. \n"
" This allows control over the relative proportions in which functions occur. \n"
" There is a tab showing the relative weighting of all functions (log-2 scale: each \n"
" tick halves the probability of the function occurring), and additional tabs \n"
" for various classifications of function for quicker access. \n"
" The "Randomize" button on each tab assigns random weightings and helps \n"
" increase the uniqueness of your session. \n"
"
\n"
"\n"
" The "Functions" dialog also has a "Dilution" tab which allows the average \n"
" function-tree branching ratio to be controlled (by changing the proportion \n"
" of trivial zero-branch functions added): note that using a high branching \n"
" ratio results in very complex images which will take a long time to compute, \n"
" while reducing the ratio results in simple, boring images. \n"
"
\n"
"\n"
" 3 types of function node are considered fundamental: constant nodes \n"
" (which return a constant), identity nodes (which return their \n"
" position argument) and transform nodes (which transform their position \n"
" argument by random parameters). On the "Dilution" tab of the "Functions" \n"
" dialog there are two slider controls to affect things related to these: \n"
"
- "proportion constant" controls the proportion of diluting fundamental nodes \n"
" which are constants. Changing this from its default value of 0.5 doesn't \n"
" actually seem to have much effect. \n"
"
- "proportion transforms" sets the proportion of non-constant nodes diluting \n"
" which are transforms (as opposed to identity nodes). \n"
" The main effect of this is that images are less commonly obviously centred \n"
" on the origin or aligned with the axes. I think this is a good thing, so \n"
" the value is at 1.0 by default. \n"
"
\n"
"
\n"
"\n"
"Other Executables
\n"
"\n"
" This release also builds some other command-line driven (non-GUI, non-interactive) utilities. \n"
" Consult the man pages for full details. \n"
"
\n"
"\n"
" evolvotron_render reads a XML function description from its standard input and renders it to the \n"
" file specified. \n"
"
\n"
"\n"
" evolvotron_mutate reads an XML function description from its standard input and outputs a mutated version. \n"
" A command line option allows the "genesis" situation of creating a random function description with no input. \n"
"
\n"
"Examples
\n"
"\n"
"\n"
" Evolving and mutating on the command line: \n"
"
\n"
"\n"
" evolvotron_mutate -g | tee fn.xml | evolvotron_render /tmp/xxx.ppm ; display /tmp/xxx.ppm
\n"
"
\n"
"\n"
" cat fn.xml | evolvotron_mutate | evolvotron_render -j -m 4 /tmp/xxx.ppm ; display /tmp/xxx.ppm
\n"
"
\n"
"\n"
" Animating a function ani.xml saved from evolvotron in animation mode: \n"
"
\n"
"\n"
" cat ani.xml | evolvotron_render -f 100 -v -s 256 256 ani.ppm ; animate ani.f??????.ppm
\n"
"
\n"
"Future Developments
\n"
"\n"
" Please check the TODO file first before you send me suggestions! \n"
"
\n"
"\n"
" Please don't ask me to port evolvotron to proprietary platforms. \n"
" You are of course Free under the terms of the GPL to do so yourself, \n"
" but please read \n"
" http://www.fefe.de/nowindows/ \n"
" first. \n"
"
\n"
"Thanks
\n"
"\n"
" To those who have contributed feedback, suggestions and patches: \n"
"
- Dmitry Kirsanov \n"
"
- Jonathan Melhuish \n"
"
- Karl Robillard \n"
"
- Linc Davis \n"
"
- Paolo Greppi \n"
"
- Marcin Wojtczuk \n"
"
- Michael Sterrett \n"
"
- Massimiliano Guastafierro \n"
"
- Goetz Waschk \n"
"
- Forrest Walter \n"
"
- "chr_bl" at web.de \n"
"
\n"
"
\n"
"\n"
"\n"
" And to the anonymous Linspire reviewer who perhaps came up with the best \n"
" summary of evolvotron yet: "Fascinating. Utterly pointless, but fascinating." \n"
"
\n"
"\n"
" The friezegroups wouldn't have been possible without \n"
" http://michaelshepperd.tripod.com/resources/groups.html \n"
"
\n"
"\n"
" Thanks to www.di.fm, www.somafm.com and Trance4Ever for music to code to. \n"
"
\n"
"\n"
" Thanks especially to a SIGGRAPH conference panel many years ago (likely \n"
" including Karl Sims, the pioneer in this area) who first got me interested \n"
" in this stuff. \n"
"
\n"
"Why ?
\n"
"\n"
" I have always admired those who have the skill to wield a pen or paintbrush \n"
" and fill a sheet of paper or a canvas with some striking image from their \n"
" imagination. Unfortunately I lack the patience to learn such skills, \n"
" and probably the necessary manual dexterity and imagination too. \n"
"
\n"
"\n"
" Evolvotron, and several predecessors developed on and off over a decade \n"
" since I first came across the idea, are an attempt to compensate for \n"
" this using the skills I do have i.e some mathematical sensibility \n"
" and the ability to write working code (well, sometimes). If you like \n"
" an image it produces, then as far as I'm concerned that's as satisfying \n"
" a result as if you liked something I'd drawn myself. \n"
"
\n"
"\n"
" Tim Day \n"