1 "<qt title='Evolvotron User Manual'>\n" 2 "<h1>Evolvotron User Manual</h1>\n" 3 "\n" 4 "<p>\n" 5 " Evolvotron is interactive "generative art" software to evolve \n" 6 " images/textures/patterns through an iterative process of random \n" 7 " mutation and user-selection driven evolution. \n" 8 "</p>\n" 9 "<p>\n" 10 " On starting the application, a grid of images is displayed. \n" 11 " Resize or maximise the application if you like, but the more \n" 12 " pixels have to be calculated, the slower it will be. \n" 13 " (For the default 2D image mode, you will need a fast machine or patience. \n" 14 " For the optional animation mode, you will need both.) \n" 15 "</p>\n" 16 "<p>\n" 17 " Simply repeat the following until bored: \n" 18 " <ul><li>Click (singleclick) on an image you like to \n" 19 " spawn the next generation of its mutant offspring. \n" 20 " </li><li>Wait until variations on it are regenerated in sufficient \n" 21 " detail that you can decide which one you like best again. \n" 22 "</li>\n" 23 "</ul>\n" 24 "</p>\n" 25 "<p>\n" 26 " IMPORTANT: Initially you should select images with some sort of variation. \n" 27 " If you select a uniform image, you may get stuck in a degenerate zone with \n" 28 " little to mutate and therefore little chance of escape to more interesting \n" 29 " images. You can always reset/restart from the "File" menu (the difference is \n" 30 " that "reset" also resets the mutation parameters to their default values). \n" 31 " Selecting one of the "warp" options from a context menu (right-click on \n" 32 " an image) can also help by introducing an additional opportunity for \n" 33 " mutation on subsequent spawns. \n" 34 "</p>\n" 35 "<p>\n" 36 " Note that various spirals, grids and tiles, although complex looking, \n" 37 " are actually implemented by a single function node and may leave you stuck too. \n" 38 "</p>\n" 39 "<h2>Command Line Options</h2>\n" 40 "<p>\n" 41 " The following are equivalent: \n" 42 " <ul><li>evolvotron --grid 12x8 \n" 43 " </li><li>evolvotron --grid=12x8 \n" 44 " </li><li>evolvotron -g 12x8 \n" 45 "</li>\n" 46 "</ul>\n" 47 "</p>\n" 48 "<h3>General Options</h3>\n" 49 "\n" 50 "<p>\n" 51 " <ul><li>-a, --autocool <br>\n" 52 " Enable autocooling by default, and cause resets of mutation \n" 53 " parameters to re-enable autocooling if it was disabled. \n" 54 "</li>\n" 55 "</ul>\n" 56 "</p>\n" 57 "<p>\n" 58 " <ul><li>-F, --fullscreen <br>\n" 59 " Start in "fullscreen" mode (NB for Qt on X11 this means \n" 60 " a screen-filling borderless/undecorated window is used; \n" 61 " it's not simply maximising the window, and it's not the \n" 62 " sort of framebuffer hijacking used by SDL games). The Qt \n" 63 " documentation claims some window managers may not be entirely \n" 64 " cooperative with this (in which case sorry, you're on your own). \n" 65 " evolvotron actions which bring up dialog boxes (e.g save) seem \n" 66 " to generally behave fairly sensibly but child windows \n" 67 " (e.g enlargements or dialogs) can show some "interesting" behaviour. \n" 68 " Fullscreen mode can be toggled within the application using "F" key. \n" 69 " The "Esc" key will also exit it. \n" 70 "</li>\n" 71 "</ul>\n" 72 "</p>\n" 73 "<p>\n" 74 " <ul><li>-g, --grid <i>cols</i>x<i>rows</i> <br>\n" 75 " Sets size of the grid of image display cells in the main application area (defaults to 5x6) \n" 76 "</li>\n" 77 "</ul>\n" 78 "</p>\n" 79 "<p>\n" 80 " <ul><li>-h, --help <br>\n" 81 " Print summary of command line options and exit. \n" 82 "</li>\n" 83 "</ul>\n" 84 "</p>\n" 85 "<p>\n" 86 " <ul><li>-j, --jitter <br>\n" 87 " Enable sample jittering. Samples will be made at a random position \n" 88 " within a pixel instead of on a regular grid, providing some antialiasing. \n" 89 "</li>\n" 90 "</ul>\n" 91 "</p>\n" 92 "<p>\n" 93 " <ul><li>-m, --multisample <i>multisample grid</i> <br>\n" 94 " Enables additional antialiasing passes. \n" 95 " Specifying 2 or 3 will provide an additional pass with 2x2 or 3x3 samples per pixel. \n" 96 " Specifying 4 (or higher) will provide a 2x2 and a final 4x4 pass. \n" 97 " Specifying 1 provides the default behaviour of one sample per pixel. \n" 98 " For best rendering quality also specify -j. \n" 99 "</li>\n" 100 "</ul>\n" 101 "</p>\n" 102 "<p>\n" 103 " <ul><li>-M, --menuhide <br>\n" 104 " Start with menu and status bar hidden. Nice with --fullscreen. \n" 105 " Hiding can be toggled within the application using ctrl-m. \n" 106 " The Esc key will also bring them back. \n" 107 "</li>\n" 108 "</ul>\n" 109 "</p>\n" 110 "<p>\n" 111 " <ul><li>-p, --spheremap <br>\n" 112 " Images are produced by sampling the underlying 3D function on the \n" 113 " latitude-longitude grid of a sphere. The resulting images should be \n" 114 " usable as spheremaps/spherical environment maps. Animations vary \n" 115 " the radius of the sphere. NB when in spheremap mode, \n" 116 " middle mouse button adjustments do not yet behave like you'd expect. \n" 117 "</li>\n" 118 "</ul>\n" 119 "</p>\n" 120 "<p>\n" 121 " <ul><li>-S, --startup <i>function_filename</i> <br>\n" 122 " Specify a function filename (evolvotron's XML format) to load on startup \n" 123 " (or reset). The option can be provided multiple times, and this is \n" 124 " also the interpretation of any positional arguments. Startup functions \n" 125 " are placed in the grid from left to right, top to bottom. \n" 126 "</li>\n" 127 "</ul>\n" 128 "</p>\n" 129 "<p>\n" 130 " <ul><li>-U, --shuffle <br>\n" 131 " Use in conjunction with -S / --startup options, to display the specified \n" 132 " functions in random order, both on application startup and on each \n" 133 " reset of the application. \n" 134 "</li>\n" 135 "</ul>\n" 136 "</p>\n" 137 "<h3>Animation Options</h3>\n" 138 "\n" 139 "<p>\n" 140 " <ul><li>-f, --frames <i>frames</i> <br>\n" 141 " Number of frames in animations (defaults to 1 i.e no animation) \n" 142 "</li>\n" 143 "</ul>\n" 144 "</p>\n" 145 "<p>\n" 146 " <ul><li>-l, --linear <br>\n" 147 " Vary z linearly with time rather than sinusoidally. \n" 148 " Sinusoidal variation generally looks better when animations are "bounced" \n" 149 " forwards and backwards, but this option is useful when generating slices to \n" 150 " use as volumetric textures. \n" 151 "</li>\n" 152 "</ul>\n" 153 "</p>\n" 154 "<p>\n" 155 " <ul><li>-s, --fps <i>framerate</i> <br>\n" 156 " Rate at which frames are displayed per second (integer). (Defaults to 8). \n" 157 "</li>\n" 158 "</ul>\n" 159 "</p>\n" 160 "<h3>Power-user & Debug Options</h3>\n" 161 "\n" 162 "<p>\n" 163 " Note that the usual Qt/X11 options \n" 164 " (for example, -geometry <i>width</i>x<i>height</i> option to set on-screen size in pixels) \n" 165 " are processed and removed before evolvotron options are checked. \n" 166 "</p>\n" 167 "<p>\n" 168 " <ul><li>-D, --debug <br>\n" 169 " Puts the certain aspects of the app into a more debug oriented mode. \n" 170 " Currently (ie this may change) it simply changes function weightings \n" 171 " so virtually all function nodes are FunctionNoiseOneChannel. By itself \n" 172 " this is a pretty pointless thing to do, but in conjunction with the -X \n" 173 " options it's useful for examining the behaviour of specific functions. \n" 174 "</li>\n" 175 "</ul>\n" 176 "</p>\n" 177 "<p>\n" 178 " <ul><li>-E, --enlargement-threadpool <br>\n" 179 " Use a separate thread pool for computing enlargements. \n" 180 " Using this option ensures computation of enlargements \n" 181 " continue to make some progress even while the main grid \n" 182 " is being actively worked on. However, this will be at \n" 183 " the expense of main grid rendering performance. \n" 184 " Without this option, enlargements' final high-resolution \n" 185 " renderings are invariably lower priority than computation \n" 186 " for images in the main grid. \n" 187 " See also the -N option to control the priority of threads \n" 188 " in this pool. \n" 189 "</li>\n" 190 "</ul>\n" 191 "</p>\n" 192 "<p>\n" 193 " <ul><li>-n, --nice <i>niceness</i> <br>\n" 194 " Sets additional niceness (relative to the main application thread) \n" 195 " of the compute (rendering) thread(s). \n" 196 " It's useful to run compute threads at a slightly lower priority \n" 197 " ("nice 4\" is the default without this option) than the main (GUI) \n" 198 " part of the program (but note that this means other normal/lowish \n" 199 " priority tasks running on your machine may slow evolvotron down \n" 200 " a bit more than expected). \n" 201 "</li>\n" 202 "</ul>\n" 203 "</p>\n" 204 "<p>\n" 205 " <ul><li>-N, --Nice <i>enlargement niceness</i> <br>\n" 206 " Sets additional niceness (relative to the main application thread) \n" 207 " of the compute thread(s) computing enlargements (default value is 8). \n" 208 " Only effective in conjunction with -E option. \n" 209 "</li>\n" 210 "</ul>\n" 211 "</p>\n" 212 "<p>\n" 213 " <ul><li>-t, --threads <i>threads</i> <br>\n" 214 " Sets number of compute threads. \n" 215 " If this is not specified, then as many compute threads are created \n" 216 " as there are processors on the system (unless this cannot be \n" 217 " discovered in which case only a single compute thread is created). \n" 218 " Non-linux builds will likely not include code to determine processor count \n" 219 " (suitable patches gratefully received). \n" 220 "</li>\n" 221 "</ul>\n" 222 "</p>\n" 223 "<p>\n" 224 " <ul><li>-u, --unwrapped <br>\n" 225 " Modifies -F behaviour so that the specified "favourite" function \n" 226 " is NOT wrapped by space/colour transforms. NB For functions without leaf nodes \n" 227 " or parameters (e.g FunctionSphericalToCartesian) this doesn't \n" 228 " leave any scope for variation or future mutation. \n" 229 " Function name recognition is case sensitive. \n" 230 " Example: \n" 231 " <code>evolvotron -F FunctionKaleidoscope -u </code>\n" 232 "</li>\n" 233 "</ul>\n" 234 "</p>\n" 235 "<p>\n" 236 " <ul><li>-v, --verbose <br>\n" 237 " Verbose mode, writes various things to application stderr. \n" 238 " This is primarily intended to assist debugging. \n" 239 " This option used to be useful for getting a list of supported function \n" 240 " names for use with the -F option, but those can also be inspected \n" 241 " via the Settings dialogs. \n" 242 "</li>\n" 243 "</ul>\n" 244 "</p>\n" 245 "<p>\n" 246 " <ul><li>-x, --favourite <i>functionname</i> <br>\n" 247 " Force a specific "favourite" function type to be used at the top level \n" 248 " of all function trees. The specified function is still wrapped \n" 249 " by spatial and colour warping functions which may disguise \n" 250 " it considerably. A list of all the function names understood \n" 251 " by evolvotron is output during app startup when the -v option \n" 252 " is specified. Function name recognition is case sensitive. \n" 253 " Example: \n" 254 " <code>evolvotron -F FunctionSpiralLinear </code>\n" 255 "</li>\n" 256 "</ul>\n" 257 "</p>\n" 258 "<h2>Mouse Control</h2>\n" 259 "\n" 260 "<h3>Left-click</h3>\n" 261 "<p>\n" 262 " A left-click on an image in the main window spawns the mutant offspring \n" 263 " of that image to all the other (non-locked) displays in the grid. \n" 264 "</p>\n" 265 "<h3>Right-click Context Menu</h3>\n" 266 "<p>\n" 267 " Right clicking on an image gets you a few more options: \n" 268 "</p>\n" 269 "<p>\n" 270 " <ul><li>"Respawn" regenerates just the current image from whatever it was \n" 271 " spawned from (and using recolour or warp, if that's what was used \n" 272 " to produce it). \n" 273 " The main use of this is to make your grid of images look nice \n" 274 " for screendumps, by regenerating any which aren't up to scratch. \n" 275 " NB May not work as expected after an "undo". \n" 276 "</li>\n" 277 "</ul>\n" 278 "</p>\n" 279 "<p>\n" 280 " <ul><li>"Spawn" is the same as clicking an image. It generates mutated \n" 281 " images to all unlocked images in the grid. \n" 282 "</li>\n" 283 "</ul>\n" 284 "</p>\n" 285 "<p>\n" 286 " <ul><li>"Recolour" to produce different coloured variants of the selected image \n" 287 "</li>\n" 288 "</ul>\n" 289 "</p>\n" 290 "<p>\n" 291 " <ul><li>"Warp"'s sub-options produce variants of the image which have been \n" 292 " zoomed/rotated/panned. \n" 293 "</li>\n" 294 "</ul>\n" 295 "</p>\n" 296 "<p>\n" 297 " <ul><li>"Lock" to prevent an image from being overwritten by spawns from other \n" 298 " images (select again to toggle). \n" 299 "</li>\n" 300 "</ul>\n" 301 "</p>\n" 302 "<p>\n" 303 " <ul><li>"Enlarge" to produce a blow-up of the image in a single window. \n" 304 " Submenu items select either a freely resizable window or \n" 305 " a scrollable view of a fixed size image. \n" 306 " If the application is running in fullscreen mode (NB this is \n" 307 " NOT the same as a simply "maximised" window) then the enlarged \n" 308 " image will also be fullscreen (the "Resizeable" mode is probably \n" 309 " what you want in this case as the image will automatically be \n" 310 " rendered at the correct resolution). \n" 311 "</li>\n" 312 "</ul>\n" 313 "</p>\n" 314 "<p>\n" 315 " <ul><li>"Save image" to save the image in a file (.ppm or .png). \n" 316 " You generally want to save an enlarged image: if you \n" 317 " save a small image from the grid, the size you see on the screen \n" 318 " is the size you get in the file. Save isn't allowed until the \n" 319 " full resolution image has been generated; if you try to save too \n" 320 " early a dialog box will be displayed telling you to try again later. \n" 321 "</li>\n" 322 "</ul>\n" 323 "</p>\n" 324 "<p>\n" 325 " <ul><li>"Save function" to store the function to an XML file. \n" 326 "</li>\n" 327 "</ul>\n" 328 "</p>\n" 329 "<p>\n" 330 " <ul><li>"Load function" to load a stored function from an XML file. \n" 331 " NB if the file was saved from a different version numbered \n" 332 " evolvotron, a warning message will be generated. \n" 333 " Save/load of functions is an experimental feature and you should \n" 334 " not count on future versions of evolvotron being able to load \n" 335 " files saved from old versions, or producing the same image \n" 336 " from a loaded function. Attempting to load functions from later \n" 337 " versions into earlier versions is even less likely to succeed. \n" 338 "</li>\n" 339 "</ul>\n" 340 "</p>\n" 341 "<p>\n" 342 " <ul><li>"Simplify" prunes the function tree of redundant branches where \n" 343 " possible (the same action can be applied to all images from \n" 344 " the main "Edit" menu). This doesn't change the appearance of \n" 345 " the image, but may make it recompute faster. \n" 346 "</li>\n" 347 "</ul>\n" 348 "</p>\n" 349 "<p>\n" 350 " <ul><li>"Properties" brings up a dialog box containing some information \n" 351 " about the image (e.g the number of function nodes it contains). \n" 352 "</li>\n" 353 "</ul>\n" 354 "</p>\n" 355 "<h3>Middle Mouse Button</h3>\n" 356 "<p>\n" 357 " [NB This feature will probably only be of practical use to those with high-end machines]. \n" 358 "</p>\n" 359 "<p>\n" 360 " You can use the middle mouse button to drag-adjust individual images. \n" 361 " This is useful for "final composition" type tweaks, e.g centering an \n" 362 " image's most interesting feature, or just for satisfying your curiosity \n" 363 " about what's off the edge of the image. \n" 364 "</p>\n" 365 "<p>\n" 366 " It also works on enlarged images, although it's virtually unusable without \n" 367 " a bit of practice on smaller, faster ones (just boldly make the adjustment \n" 368 " you want, release the button... and wait). \n" 369 "</p>\n" 370 "<p>\n" 371 " Changes made can be rolled-back on the main Edit/Undo menu item, \n" 372 " one drag-action at a time. \n" 373 "</p>\n" 374 "<p>\n" 375 " An unmodified middle-mouse drag pans the image around following \n" 376 " the mouse motion. \n" 377 "</p>\n" 378 "<p>\n" 379 " A SHIFT-middle drag zooms the image in and out with scaling \n" 380 " proportional to the distance from the centre of the image. Beware of \n" 381 " generating huge zooms by clicking too near the centre of the image. \n" 382 "</p>\n" 383 "<p>\n" 384 " An ALT-SHIFT-middle drag is similar but anisotropic: the scaling \n" 385 " may be different in X and Y. Warning: this technique is very \n" 386 " sensitive and can be quite tricky to use! In particular, \n" 387 " if you initially click near the centre axes of the image the zoom factor \n" 388 " can be HUGE, so the best way to start using this is to click about halfway \n" 389 " on a diagonal between the image centre and a corner and gently move in and \n" 390 " out radially. Dragging from one side of the image to the other flips it over \n" 391 " (the degenerate case of infinite zoom at the centre is handled cleanly I think). \n" 392 " If it all goes horribly wrong, undo and try again. \n" 393 "</p>\n" 394 "<p>\n" 395 " A CTRL-middle drag rotates the image about its centre. \n" 396 "</p>\n" 397 "<p>\n" 398 " A CTRL-ALT-middle drag shears the image (the best way to see what \n" 399 " this does is to click in the corner of an image and move the mouse \n" 400 " horizontally or vertically). \n" 401 "</p>\n" 402 "<h2>Keyboard Control</h2>\n" 403 "\n" 404 "<p>\n" 405 " There are some keyboard shortcuts. \n" 406 "</p>\n" 407 "<h3>Main Window</h3>\n" 408 "\n" 409 "<p>\n" 410 " <ul><li>"r"/"t"/"x" perform various starts of reset/restart. \n" 411 "</li>\n" 412 "</ul>\n" 413 "</p>\n" 414 "<p>\n" 415 " <ul><li>"q" quits the application. \n" 416 "</li>\n" 417 "</ul>\n" 418 "</p>\n" 419 "<p>\n" 420 " <ul><li>"u" (and also Ctrl-z) does an undo. \n" 421 "</li>\n" 422 "</ul>\n" 423 "</p>\n" 424 "<p>\n" 425 " <ul><li>"f": full-screen mode (on X11, Qt does this by asking the \n" 426 " window manager for a screen-filling undecorated window, and the \n" 427 " documentation contains some dire warnings about problems with broken \n" 428 " window managers). See also "-F" command line option. \n" 429 " Fullscreen mode propagates to enlarged image display windows. \n" 430 " NB The application may completely disappear from the screen for \n" 431 " a brief interval while switching mode. \n" 432 "</li>\n" 433 "</ul>\n" 434 "</p>\n" 435 "<p>\n" 436 " <ul><li>"m" : hides status and menu-bar hiding, which can be nice when \n" 437 " in full-screen or window-maximised mode. See also "-M" \n" 438 " command line option. Also note that while the menu bar \n" 439 " is hidden, most of these keyboard shortcuts won't function \n" 440 " as they're tied to the menu system. \n" 441 "</li>\n" 442 "</ul>\n" 443 "</p>\n" 444 "<p>\n" 445 " <ul><li>Esc : exits full-screen and/or menu-hiding mode, putting the \n" 446 " application into its normal default state. \n" 447 "</li>\n" 448 "</ul>\n" 449 "</p>\n" 450 "<h3>Enlargement Windows</h3>\n" 451 "<p>\n" 452 " The image display windows created by selecting "Enlarge" from a \n" 453 " context menu also have a couple of keyboard operations: \n" 454 "</p>\n" 455 "<p>\n" 456 " <ul><li>"f" : [NB only available with fullscreen build option] toggles \n" 457 " full-screen mode. When returning to normal mode, if the main app \n" 458 " window was fullscreen then it will also drop back to normal mode. \n" 459 "</li>\n" 460 "</ul>\n" 461 "</p>\n" 462 "<p>\n" 463 " <ul><li>Esc : [NB only available with fullscreen build option] \n" 464 " completely closes a fullscreen-mode enlargement window. \n" 465 "</li>\n" 466 "</ul>\n" 467 "</p>\n" 468 "<h2>Gui Elements</h2>\n" 469 "\n" 470 "<h3>Main Menu Bar</h3>\n" 471 "<p>\n" 472 " <ul><li>File menu: \n" 473 " Items to restart, reset and quit the application. \n" 474 " The difference between restart and reset is that reset \n" 475 " sets the mutation parameters back the their default values. \n" 476 " The "randomize function weights" version of restart scrambles \n" 477 " the relative probability of the various function types (if you \n" 478 " think evolvotron just keeps generating the same kinds of \n" 479 " images give it a try). The "restart with specific function" \n" 480 " item duplicates the functionality of the "-x" and "-X" command-line \n" 481 " options. \n" 482 " </li><li>Edit menu: \n" 483 " "Undo" lets you undo certain actions: e.g spawn, \n" 484 " middle-button adjustment, simplification and lock/unlock. \n" 485 " There is a large but limited number of levels of undo. \n" 486 " "Simplify" is of curiosity value only: it prunes redundant \n" 487 " branches from images ("junk DNA"); this may help them recompute \n" 488 " faster but at the cost of there being less mutatable material. \n" 489 " </li><li>Settings menu: \n" 490 " "Mutations" brings up a dialog to modify the amount \n" 491 " of change spawned images are subject to. \n" 492 " (See "advanced usage" below.) \n" 493 " "Functions" brings up a dialog to modify the relative probability \n" 494 " of functions being used. By default all functions are equally \n" 495 " likely except for iterative functions and fractals, which are \n" 496 " almost but not completely suppressed. But if you think there \n" 497 " are too many spirals or grids (or not enough fractals) then this \n" 498 " is the place to adjust the frequency with which they appear. \n" 499 " If the software was built with the fullscreen option, \n" 500 " that can also be controlled from this menu. \n" 501 " "Favourite" brings up a dialog which allows you to select a specific \n" 502 " function type to always be used as the root node of any new functions. \n" 503 " The function can be wrapped by some other random stuff, or unwrapped. \n" 504 " See also the -X and -x command line options. \n" 505 " </li><li>Help menu: \n" 506 " Items to bring up documentation, and the usual "About" box \n" 507 " (which includes the license). \n" 508 "</li>\n" 509 "</ul>\n" 510 "</p>\n" 511 "<h3>Status Bar</h3>\n" 512 "<p>\n" 513 " An area on the status bar shows how many compute "tasks" are \n" 514 " outstanding (or "Ready" when there are none). When two task \n" 515 " totals are reported, the first is for the main grid and the \n" 516 " second for any enlargements being computed. \n" 517 " Each "task" is the recomputation of an image at some resolution. \n" 518 " Tasks are prioritised by their number of pixels (small image \n" 519 " implies higher priority). This is why, if the main grid is still \n" 520 " recomputing, recalculations of enlargements will appear to freeze \n" 521 " after they have reached a certain resolution, at least until other \n" 522 " lower resolution tasks have completed. \n" 523 "</p>\n" 524 "<p>\n" 525 " The status bar also provides some control over the "autocool" \n" 526 " mechanism which reduces mutation strength with time. \n" 527 " See the advanced usage section below. \n" 528 "</p>\n" 529 "<h2>Tips</h2>\n" 530 "<p>\n" 531 " <ul><li>Don't start a session with any preconceived ideas about the kind \n" 532 " of image you want to get out of it. You will be disappointed. \n" 533 " </li><li>I get the best results when I click the image which most \n" 534 " immediately catches my eye as they start appearing. If you stop \n" 535 " to think about it too much then things seem to go downhill. \n" 536 " </li><li>If you seem to be just getting the same old spirals and grids \n" 537 " all the time, stop clicking on spirals and grids! \n" 538 " (The same goes for random mush). \n" 539 " </li><li>Don't get too hung up on using the warp and middle-mouse drag \n" 540 " adjustments every iteration... use those tools for final \n" 541 " polishing of your masterpiece. \n" 542 " </li><li>You can quickly cycle through a lot of initial images (until \n" 543 " you find one with real potential) by bashing on Ctrl-r to \n" 544 " repeatedly restart. \n" 545 " </li><li>To add variety to an image's mutations, nudge it with a small \n" 546 " middle-mouse drag. This introduces a top level transform, and \n" 547 " therefore more parameters to be varied. \n" 548 " </li><li>Enlargements take a long time to complete their final \n" 549 " high-resolution rendering pass (especially with multisampling \n" 550 " enabled). Most convenient practice seems to be to go away and \n" 551 " leave them to complete, then come back and save them later. \n" 552 " Continuing to click away on the main grid effectively starves \n" 553 " them of CPU, unless the -E command-line option is used. \n" 554 "</li>\n" 555 "</ul>\n" 556 "</p>\n" 557 "<h2>Animation</h2>\n" 558 "<p>\n" 559 " As of version 0.2.0 evolvotron contains some experimental support \n" 560 " for generation of animations (although so far the results have been \n" 561 " pretty disappointing IMHO, but it's still early days). \n" 562 "</p>\n" 563 "<p>\n" 564 " NB THIS IS EVEN MORE COMPUTATIONALLY AND MEMORY INTENSIVE THAN \n" 565 " THE STATIC IMAGE MODE. \n" 566 "</p>\n" 567 "<p>\n" 568 " Simply supply a -f <i>frames</i> command line option and evolvotron will \n" 569 " generate animated sequences with the specified number of frames. \n" 570 " These will be displayed at the frame rate specified by the \n" 571 " optional -s <i>framerate</i> option (default 8). So "evolvotron -s 24" \n" 572 " will generate 3 second long animations. Animations reverse direction \n" 573 " at each end to avoid a sudden jump. \n" 574 "</p>\n" 575 "<p>\n" 576 " If you save an animation as PPM or PNG, multiple files will \n" 577 " be saved with .fnnnnnn (where nnnnnn is the zero-filled frame \n" 578 " number) inserted in each filename before the filetype qualifier. \n" 579 "</p>\n" 580 "<p>\n" 581 " For example, if you enter foo.ppm as the filename to save, \n" 582 " files foo.f000000.ppm, foo.f000001.ppm... will be saved. \n" 583 " If you have the ImageMagick tools you can convert these to \n" 584 " an animated GIF playing at approx. 8 frames per second with: \n" 585 "</p>\n" 586 "<p>\n" 587 " <code>convert -delay 12 foo.f??????.ppm foo.gif </code>\n" 588 "</p>\n" 589 "<h2>Advanced Usage</h2>\n" 590 "<p>\n" 591 " Evolvotron's idea of an image is a function which converts \n" 592 " XYZ co-ordinates to an RGB colour (however we can only display \n" 593 " a 2D plane for now so the input Z is fixed to zero, or varied \n" 594 " with time when animating). \n" 595 "</p>\n" 596 "<p>\n" 597 " The image functions are constructed from trees of function nodes. \n" 598 " (In the mathematical expression 1+(2*x) the "+" and the "*" would \n" 599 " be function nodes.) Evolvotron's functions tend to correspond to \n" 600 " geometric or colour-space operations or anything else which can be \n" 601 " applied to a 3D vector. \n" 602 "</p>\n" 603 "<p>\n" 604 " By mutating the structure of the function tree (adding random \n" 605 " branches, for example) and the values of the constant embedded \n" 606 " within it, the image can be changed. \n" 607 "</p>\n" 608 "<p>\n" 609 " The mutation parameters are under control from the dialogs accessible \n" 610 " via the Settings menu, and the "autocool" mechanism exposed in the \n" 611 " status bar also has some influence. \n" 612 "</p>\n" 613 "<p>\n" 614 " There are two kinds of mutation: perturbations to the magnitude of constants, \n" 615 " and structural mutations which re-arrange the function tree of an image. \n" 616 " Four types of structural mutations are currently implemented: \n" 617 " <ul><li>replacement of a function branch by a new random stub (a "Glitch" mutation). \n" 618 " </li><li>a random shuffle of a node's sub-nodes \n" 619 " </li><li>insertion of random nodes between a node and it's sub-nodes \n" 620 " </li><li>the substitution of a node with one of a different type, \n" 621 " with sub-nodes unaffected where possible). \n" 622 "</li>\n" 623 "</ul>\n" 624 "</p>\n" 625 "<p>\n" 626 " The probability (per function node) of these mutations is controlled \n" 627 " from spinboxes on the "Mutation Parameters" dialog (expressed as \n" 628 " chances-in-a-hundred), as is the size of perturbations to constants. \n" 629 "</p>\n" 630 "<p>\n" 631 " It is useful to think of the perturbations to constant parameters as \n" 632 " being a thermal effect (hence the "heat" and "cool" buttons), while \n" 633 " structural alterations are more drastic and are caused by high energy \n" 634 " gamma rays or something (hence "irradiate" and "shield" buttons to \n" 635 " adjust the probability of structural mutations). \n" 636 "</p>\n" 637 "<p>\n" 638 " So why would you want to change the mutation parameters from the initial \n" 639 " defaults ? Basically, if you're getting too much variation in spawned images \n" 640 " (this tends to happen after many generations of images, by which time the \n" 641 " function trees have grown quite large and therefore are experiencing a lot \n" 642 " of mutations) then cool and/or shield. \n" 643 " If all the images look too similar, heat and/or irradiate. \n" 644 "</p>\n" 645 "<p>\n" 646 " The "autocool" mechanism (enabled from the statusbar or mutation parameters \n" 647 " dialog) automatically reduces the strength of mutations from the base \n" 648 " values with successive generations. The cooling can be cancelled by \n" 649 " disabling autocooling or pressing the "Reheat" button to zero the number \n" 650 " of generations counted for cooling. The effect of the cooling is a compound \n" 651 " halving of the mutation strength after some number of generations (this number \n" 652 " is the "half-life" controllable from the mutation parameters dialog). \n" 653 " Note that if autocooling is enabled then eventually, after a number of \n" 654 " iterations more than many multiples of the half-life has passes, spawned \n" 655 " images will differ very little from their parents (hence the need for "reheat"). \n" 656 "</p>\n" 657 "<p>\n" 658 " There is also a dialog accessible from "Functions..." on the "Settings" menu. \n" 659 " This allows control over the relative proportions in which functions occur. \n" 660 " There is a tab showing the relative weighting of all functions (log-2 scale: each \n" 661 " tick halves the probability of the function occurring), and additional tabs \n" 662 " for various classifications of function for quicker access. \n" 663 " The "Randomize" button on each tab assigns random weightings and helps \n" 664 " increase the uniqueness of your session. \n" 665 "</p>\n" 666 "<p>\n" 667 " The "Functions" dialog also has a "Dilution" tab which allows the average \n" 668 " function-tree branching ratio to be controlled (by changing the proportion \n" 669 " of trivial zero-branch functions added): note that using a high branching \n" 670 " ratio results in very complex images which will take a long time to compute, \n" 671 " while reducing the ratio results in simple, boring images. \n" 672 "</p>\n" 673 "<p>\n" 674 " 3 types of function node are considered fundamental: constant nodes \n" 675 " (which return a constant), identity nodes (which return their \n" 676 " position argument) and transform nodes (which transform their position \n" 677 " argument by random parameters). On the "Dilution" tab of the "Functions" \n" 678 " dialog there are two slider controls to affect things related to these: \n" 679 " <ul><li>"proportion constant" controls the proportion of diluting fundamental nodes \n" 680 " which are constants. Changing this from its default value of 0.5 doesn't \n" 681 " actually seem to have much effect. \n" 682 " </li><li>"proportion transforms" sets the proportion of non-constant nodes diluting \n" 683 " which are transforms (as opposed to identity nodes). \n" 684 " The main effect of this is that images are less commonly obviously centred \n" 685 " on the origin or aligned with the axes. I think this is a good thing, so \n" 686 " the value is at 1.0 by default. \n" 687 "</li>\n" 688 "</ul>\n" 689 "</p>\n" 690 "<h2>Other Executables</h2>\n" 691 "<p>\n" 692 " This release also builds some other command-line driven (non-GUI, non-interactive) utilities. \n" 693 " Consult the man pages for full details. \n" 694 "</p>\n" 695 "<p>\n" 696 " evolvotron_render reads a XML function description from its standard input and renders it to the \n" 697 " file specified. \n" 698 "</p>\n" 699 "<p>\n" 700 " evolvotron_mutate reads an XML function description from its standard input and outputs a mutated version. \n" 701 " A command line option allows the "genesis" situation of creating a random function description with no input. \n" 702 "</p>\n" 703 "<h3>Examples</h3>\n" 704 "\n" 705 "<p>\n" 706 " Evolving and mutating on the command line: \n" 707 "</p>\n" 708 "<p>\n" 709 " <code>evolvotron_mutate -g | tee fn.xml | evolvotron_render /tmp/xxx.ppm ; display /tmp/xxx.ppm </code>\n" 710 "</p>\n" 711 "<p>\n" 712 " <code>cat fn.xml | evolvotron_mutate | evolvotron_render -j -m 4 /tmp/xxx.ppm ; display /tmp/xxx.ppm </code>\n" 713 "</p>\n" 714 "<p>\n" 715 " Animating a function ani.xml saved from evolvotron in animation mode: \n" 716 "</p>\n" 717 "<p>\n" 718 " <code>cat ani.xml | evolvotron_render -f 100 -v -s 256 256 ani.ppm ; animate ani.f??????.ppm </code>\n" 719 "</p>\n" 720 "<h2>Future Developments</h2>\n" 721 "<p>\n" 722 " Please check the TODO file first before you send me suggestions! \n" 723 "</p>\n" 724 "<p>\n" 725 " Please don't ask me to port evolvotron to proprietary platforms. \n" 726 " You are of course Free under the terms of the GPL to do so yourself, \n" 727 " but please read \n" 728 " http://www.fefe.de/nowindows/ \n" 729 " first. \n" 730 "</p>\n" 731 "<h2>Thanks</h2>\n" 732 "<p>\n" 733 " To those who have contributed feedback, suggestions and patches: \n" 734 " <ul><li>Dmitry Kirsanov \n" 735 " </li><li>Jonathan Melhuish \n" 736 " </li><li>Karl Robillard \n" 737 " </li><li>Linc Davis \n" 738 " </li><li>Paolo Greppi \n" 739 " </li><li>Marcin Wojtczuk \n" 740 " </li><li>Michael Sterrett \n" 741 " </li><li>Massimiliano Guastafierro \n" 742 " </li><li>Goetz Waschk \n" 743 " </li><li>Forrest Walter \n" 744 " </li><li>"chr_bl" at web.de \n" 745 "</li>\n" 746 "</ul>\n" 747 "</p>\n" 748 "<p>\n" 749 " And to the anonymous Linspire reviewer who perhaps came up with the best \n" 750 " summary of evolvotron yet: "Fascinating. Utterly pointless, but fascinating." \n" 751 "</p>\n" 752 "<p>\n" 753 " The friezegroups wouldn't have been possible without \n" 754 " http://michaelshepperd.tripod.com/resources/groups.html \n" 755 "</p>\n" 756 "<p>\n" 757 " Thanks to www.di.fm, www.somafm.com and Trance4Ever for music to code to. \n" 758 "</p>\n" 759 "<p>\n" 760 " Thanks especially to a SIGGRAPH conference panel many years ago (likely \n" 761 " including Karl Sims, the pioneer in this area) who first got me interested \n" 762 " in this stuff. \n" 763 "</p>\n" 764 "<h2>Why ?</h2>\n" 765 "<p>\n" 766 " I have always admired those who have the skill to wield a pen or paintbrush \n" 767 " and fill a sheet of paper or a canvas with some striking image from their \n" 768 " imagination. Unfortunately I lack the patience to learn such skills, \n" 769 " and probably the necessary manual dexterity and imagination too. \n" 770 "</p>\n" 771 "<p>\n" 772 " Evolvotron, and several predecessors developed on and off over a decade \n" 773 " since I first came across the idea, are an attempt to compensate for \n" 774 " this using the skills I do have i.e some mathematical sensibility \n" 775 " and the ability to write working code (well, sometimes). If you like \n" 776 " an image it produces, then as far as I'm concerned that's as satisfying \n" 777 " a result as if you liked something I'd drawn myself. \n" 778 "</p>\n" 779 "<p>\n" 780 " Tim Day \n" 781