1 "<qt title='Evolvotron User Manual'>\n"
2 "<h1>Evolvotron User Manual</h1>\n"
3 "\n"
4 "<p>\n"
5 "  Evolvotron is interactive &quot;generative art&quot; 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 &quot;File&quot; menu (the difference is \n"
30 "  that &quot;reset&quot; also resets the mutation parameters to their default values). \n"
31 "  Selecting one of the &quot;warp&quot; 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 &quot;fullscreen&quot; 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 &quot;interesting&quot; behaviour. \n"
68 "  Fullscreen mode can be toggled within the application using &quot;F&quot; key. \n"
69 "  The &quot;Esc&quot; 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 &quot;bounced&quot; \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 "  (&quot;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 &quot;favourite&quot; 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 &quot;favourite&quot; 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>&quot;Respawn&quot; 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 &quot;undo&quot;. \n"
276 "</li>\n"
277 "</ul>\n"
278 "</p>\n"
279 "<p>\n"
280 "  <ul><li>&quot;Spawn&quot; 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>&quot;Recolour&quot; 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>&quot;Warp&quot;'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>&quot;Lock&quot; 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>&quot;Enlarge&quot; 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 &quot;maximised&quot; window) then the enlarged \n"
308 "  image will also be fullscreen (the &quot;Resizeable&quot; 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>&quot;Save image&quot; 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>&quot;Save function&quot; to store the function to an XML file. \n"
326 "</li>\n"
327 "</ul>\n"
328 "</p>\n"
329 "<p>\n"
330 "  <ul><li>&quot;Load function&quot; 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>&quot;Simplify&quot; 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 &quot;Edit&quot; 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>&quot;Properties&quot; 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 &quot;final composition&quot; 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>&quot;r&quot;/&quot;t&quot;/&quot;x&quot; perform various starts of reset/restart. \n"
411 "</li>\n"
412 "</ul>\n"
413 "</p>\n"
414 "<p>\n"
415 "  <ul><li>&quot;q&quot; quits the application. \n"
416 "</li>\n"
417 "</ul>\n"
418 "</p>\n"
419 "<p>\n"
420 "  <ul><li>&quot;u&quot; (and also Ctrl-z) does an undo. \n"
421 "</li>\n"
422 "</ul>\n"
423 "</p>\n"
424 "<p>\n"
425 "  <ul><li>&quot;f&quot;: 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 &quot;-F&quot; 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>&quot;m&quot; : hides status and menu-bar hiding, which can be nice when \n"
437 "  in full-screen or window-maximised mode. See also &quot;-M&quot; \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 &quot;Enlarge&quot; from a \n"
453 "  context menu also have a couple of keyboard operations: \n"
454 "</p>\n"
455 "<p>\n"
456 "  <ul><li>&quot;f&quot; : [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 &quot;randomize function weights&quot; 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 &quot;restart with specific function&quot; \n"
480 "  item duplicates the functionality of the &quot;-x&quot; and &quot;-X&quot; command-line \n"
481 "  options. \n"
482 "  </li><li>Edit menu: \n"
483 "  &quot;Undo&quot; 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 "  &quot;Simplify&quot; is of curiosity value only: it prunes redundant \n"
487 "  branches from images (&quot;junk DNA&quot;); 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 "  &quot;Mutations&quot; brings up a dialog to modify the amount \n"
491 "  of change spawned images are subject to. \n"
492 "  (See &quot;advanced usage&quot; below.) \n"
493 "  &quot;Functions&quot; 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 "  &quot;Favourite&quot; 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 &quot;About&quot; 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 &quot;tasks&quot; are \n"
514 "  outstanding (or &quot;Ready&quot; 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 &quot;task&quot; 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 &quot;autocool&quot; \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 &quot;evolvotron -s 24&quot; \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 &quot;+&quot; and the &quot;*&quot; 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 &quot;autocool&quot; 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 &quot;Glitch&quot; 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 &quot;Mutation Parameters&quot; 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 &quot;heat&quot; and &quot;cool&quot; buttons), while \n"
633 "  structural alterations are more drastic and are caused by high energy \n"
634 "  gamma rays or something (hence &quot;irradiate&quot; and &quot;shield&quot; 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 &quot;autocool&quot; 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 &quot;Reheat&quot; 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 &quot;half-life&quot; 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 &quot;reheat&quot;). \n"
656 "</p>\n"
657 "<p>\n"
658 "  There is also a dialog accessible from &quot;Functions...&quot; on the &quot;Settings&quot; 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 &quot;Randomize&quot; 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 &quot;Functions&quot; dialog also has a &quot;Dilution&quot; 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 &quot;Dilution&quot; tab of the &quot;Functions&quot; \n"
678 "  dialog there are two slider controls to affect things related to these: \n"
679 "  <ul><li>&quot;proportion constant&quot; 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>&quot;proportion transforms&quot; 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 &quot;genesis&quot; 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>&quot;chr_bl&quot; 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: &quot;Fascinating. Utterly pointless, but fascinating.&quot; \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