my sincere thanks go out to Jason Bevins and his 'libnoise' library,
 which is a portable open source, coherent noise generating library for C++
 scrolling this page, the initial idea was born

 I am only going to give brief descriptions here of what you can do with this application
 as I feel the interface is highly intuitive and self explaining

 creating a terrain:
 - drag a generator from the list and drop it on the canvas
 - drag/drop an exporter onto the canvas
 - connect the 2 components by "draging" a line from the generators yellow output to the exporters green input
 - click the "none"-button in exporter to select a output-name and format (export a terragen-terrain)
 - open the terrain in terragen and render

 if any value of the generator is changed, the terrain is saved for you automatically
 all you have to do is to play with the sliders and spinners
 for more complex terrains, you "only" have to create more complex networks

 creating textures works exact the same way: colorize the export with a color-component and save as tga

 ... but please keep in mind, that this application isn't meant to be a texture-generator

 to generate a normalmap, click the Normalmap-Checkbox and save as tga

 for better results with normalmaps generate a terrain with octaves set to ~6,
 then generate a normalmap with same settings, but octaves set to maximum
 the higher the octave-values the higher the details, don't confuse this with the quality-slider!

 below a sample of using a normalmap

 General notes:
 all generators generate noise-values in 3D-space, with values below and above zero
 the resulting heightmap is viewed in black/white, where black is -1.0 and white is +1.0
 values above +1.0 are also white - but not "whiter" :)
 the exported terrain will not be cut off here
 try to stay near this -1.0/1.0 borders to have more visual control what happens
 the 3 output-types (cylinder/sphere/plane) are not mapping-types,
 it's more like cutting out a 3D-surface from the generated 3d-noise
 to adjust where this "cut-out" should happen, use the transform-rollouts


here you can set how a tg-terrain file will be exported,
most important are the Min/Max values,
the lowest generated value will get the Min-elevation
the highest generated value will get the Max-elevation
default-values of are ok for 512x512 terrains,
adjust them to get not too "spiky" terrains
min/max values also influence the generation of normalmaps

Targa-settings don't need explanations...
split alpha doesn't do anything :)

 Preferences (CTRL+P):
- snap to grid: snaps components to grid
- grid spacing: sets grid-spacing of camvas
- selection radius: if you have problems selecting
    control-points of curve components
- autoload exit-file: if you quit TerraNoise it will exit... :)
    without asking to save your work, TerraNoise writes
    a file named "saved_on_exit.nnn"
    load it on startup or not - that's the question...
    so you can continue with your work later, exactly
    where you stopped to have a coffee-break
- disable exporters on load: after loading a network file,
    exporters will overwrite existing files,
    leave it checked to prevent overwriting

 Render controls:

 LED: shows render activity
 threads: number of rederthreads to use
 size: the output size used by exporters
 lock-button: locks with & height (square output)
 cylinder-button: renders output for cylindrical mapping
 sphere-button: renders output for spherical mapping, for generating whole planets
 plane-button: renders output for planar mapping, for heightfields
 T-button: for generating seamless terrain tiles or textures

 CTRL+O - open
 CTRL+S - save
 CTRL+SHIFT+S - save as
 CTRL+N - new, clears the canvas without any warning
 CTRL+P - preferences

 "special" functionality:
 - use TAB-key to hide/show the component treeview
 - every mouse-drag action can be undone/canceled by pressing right mouse-button while left mouse-button is still down
 - while spinning or paning mouse leaves screen an appears on opposite side of screen
 - pan: drag with middle mouse button (canvas, generator-previews, curve-components, export)
 - zoom: hold down CTRL+ALT and drag with middle mouse button (generator-previews and curve-components)

 paning with middle mouse-button (undo with right mouse-button)
 if you cant find you components anymore, a doubleclick with middle mouse-button will bring them back into view

 they have no scollbars, "scroll" by draging with middle mouse-button, mouse-wheel

 they work like the spinners in Max
 holding down CTRL while spinning - speed-up by 10
 holding down ALT while spinning - slow-down by 10
 right-click on arrows sets a default value
 undo with right mouse-button

 component-type can be changed at any time by choosing from the dropdown-list
 all component-types share the component-params of a component
 all components have max-like rollouts
 they can be opened/closed (click on titles of rollouts, or context-menu)
 componnet adjusts its size, depending on rollout-states
 re-arrange rollouts by drag rollout-title
 re-arraging rollouts will change the way generators work, rendering is done "top-down"
 eq. translate then scale will give a different result when scaled first and the translated
 only some components can be resized (curve-modifiers, exporters and color-component)
 zoom/pan works for curve-components
 controlpoints of curve-components are deleted by DEL-key (the only question my testers asked)

 - create: drag/drop from treeview
 - move: by draging on titlebar, or CTRL+drag anywhere on a component
 - clone: SHIFT-drag existing component, or contextmenu of component
 - delete: by using contextmenu
 - minimize/restore: doubleclick on titlebar, or via contextmenu
 - enable/disable: click on the green "led" in top-left corner of a component
      a disabled component gets rendered, but it delivers no output, no output means a value of 0.0
      when enabling a component, dependant components are re-rendered

 preview (of generators) can be paned and zoomed, all connected components should update in realtime

 contains component specific params
 when using a spinner only the components preview is rendered
 when releasing the spinner the final noise-map is rendered then dependant components
 if you're interested in what exactly all these parameters do, Jason Bevins libnoise has very good documentation included

 Transform-Rollouts (generators only):
 translate/rotate/scale and turbulence
 rollout-titles are colored different to indicate their effect is position-dependent
 rendering is done "top-down", eq. scale-rotate vs. rotate-scale will give different results

 Connecting components:
 all outputs have a yellow-ish color
 input colors depend on component-type
 components without inputs deliver a outputvalue of 0.0
 connections can be created from output to input, or from input to output
 outputs can have more than one connection, inputs can only have one
 a cursor change indicates where it's possible to make a connection
 endless-loops are detected, such connections shouldn't be possible, a future version may support feedback-loops
 input-connections can be swaped by using ALT-key, also between different components
 components can be inserted between 2 connected components by using the contextmenu of the connection-line

 Future plans:
 3D-preview of generated terrain (textured)
 set camera and sun positions and export a terragen world file
 flight-path editor for camera animation and export a terragen animation-script
 some more components..., craters, image and tg-terrain inputs, etc.
 masking to define where to apply modifications
 terrain erosions
 generating slope-dependant materials to use with Max
 hdri-sky generation ?
 all should stay 100% procedural
 feel free to request anything you can think of