Provided by: netpbm_10.0-15_i386 bug


       ppmforge - fractal forgeries of clouds, planets, and starry skies


       ppmforge [-clouds] [-night] [-dimension dimen] [-hour hour]
                [-inclination|-tilt angle] [-mesh size] [-power factor]
                [-glaciers level] [-ice level] [-saturation sat] [-seed seed]
                [-stars fraction] [-xsize|-width width] [-ysize|-height


       ppmforge  generates  three  kinds  of ``random fractal forgeries,'' the
       term coined by Richard F. Voss of the IBM  Thomas  J.  Watson  Research
       Center for seemingly realistic pictures of natural objects generated by
       simple algorithms embodying  randomness  and  fractal  self-similarity.
       The techniques used by ppmforge are essentially those given by Voss[1],
       particularly the technique of  spectral  synthesis  explained  in  more
       detail by Dietmar Saupe[2].

       The  program  generates  two varieties of pictures: planets and clouds,
       which are just different renderings of data generated in  an  identical
       manner,  illustrating  the unity of the fractal structure of these very
       different  objects.   A  third  type  of  picture,  a  starry  sky,  is
       synthesised directly from pseudorandom numbers.

       The  generation  of planets or clouds begins with the preparation of an
       array of random data in the frequency domain.  The size of this  array,
       the  ``mesh  size,''  can  be set with the -mesh option; the larger the
       mesh the more realistic the  pictures  but  the  calculation  time  and
       memory  requirement  increases  as  the  square  of the mesh size.  The
       fractal dimension, which you can specify with  the  -dimension  option,
       determines  the  roughness of the terrain on the planet or the scale of
       detail in the clouds.  As the fractal dimension is increased, more high
       frequency components are added into the random mesh.

       Once  the  mesh  is  generated,  an  inverse  two  dimensional  Fourier
       transform is performed upon it.   This  converts  the  original  random
       frequency  domain  data  into  spatial  amplitudes.   We scale the real
       components that result from the Fourier transform into numbers  from  0
       to  1  associated  with each point on the mesh.  You can further modify
       this number by applying a ``power law scale'' to  it  with  the  -power
       option.    Unity  scale leaves the numbers unmodified; a power scale of
       0.5 takes the square root of the numbers in the  mesh,  while  a  power
       scale  of  3  replaces the numbers in the mesh with their cubes.  Power
       law scaling is best envisioned by thinking of the data as  representing
       the  elevation  of  terrain;  powers  less than 1 yield landscapes with
       vertical scarps that look like glacially-carved valleys; powers greater
       than  one  make fairy-castle spires (which require large mesh sizes and
       high resolution for best results).

       After these calculations,  we  have  a  array  of  the  specified  size
       containing  numbers  that range from 0 to 1.  The pixmaps are generated
       as follows:

       Clouds    A colour map is created that ranges from pure blue  to  white
                 by  increasing  admixture  (desaturation) of blue with white.
                 Numbers less than 0.5 are coloured blue, numbers between  0.5
                 and 1.0 are coloured with corresponding levels of white, with
                 1.0 being pure white.

       Planet    The mesh is projected onto a sphere.  Values  less  than  0.5
                 are  treated as water and values between 0.5 and 1.0 as land.
                 The water areas are coloured based upon the water depth,  and
                 land  based on its elevation.  The random depth data are used
                 to  create   clouds   over   the   oceans.    An   atmosphere
                 approximately  like  the  Earth's  is  simulated;  its  light
                 absorption is calculated to create a  blue  cast  around  the
                 limb  of the planet.  A function that rises from 0 to 1 based
                 on latitude is modulated by the local elevation  to  generate
                 polar   ice  caps--high  altitude  terrain  carries  glaciers
                 farther from the pole.  Based on the  position  of  the  star
                 with  respect  to  the  observer, the apparent colour of each
                 pixel of the planet is calculated  by  ray-tracing  from  the
                 star  to  the  planet to the observer and applying a lighting
                 model that sums ambient light  and  diffuse  reflection  (for
                 most  planets ambient light is zero, as their primary star is
                 the only source of illumination).  Additional random data are
                 used to generate stars around the planet.

       Night     A  sequence of pseudorandom numbers is used to generate stars
                 with a user specified density.

       Cloud pictures always contain 256 or fewer colours and may be displayed
       on  most  colour  mapped  devices  without  further processing.  Planet
       pictures often contain tens of  thousands  of  colours  which  must  be
       compressed  with  ppmquant  or  ppmdither  before  encoding in a colour
       mapped format.  If the display resolution  is  high  enough,  ppmdither
       generally  produces  better  looking planets.  ppmquant tends to create
       discrete  colour  bands,  particularly  in  the   oceans,   which   are
       unrealistic  and  distracting.   The  number  of  colours in starry sky
       pictures  generated  with  the  -night  option  depends  on  the  value
       specified  for  -saturation.  Small values limit the colour temperature
       distribution of the stars and reduce  the  number  of  colours  in  the
       image.   If  the  -saturation  is  set  to 0, none of the stars will be
       coloured and the resulting image  will  never  contain  more  than  256
       colours.   Night  sky  pictures  with many different star colours often
       look best when colour compressed by pnmdepth rather  than  ppmquant  or
       ppmdither.   Try  newmaxval  settings of 63, 31, or 15 with pnmdepth to
       reduce the number of colours in the picture to 256 or fewer.


       -clouds   Generate clouds.  A pixmap of fractal  clouds  is  generated.
                 Selecting  clouds  sets  the default for fractal dimension to
                 2.15 and power scale factor to 0.75.

       -dimension dimen
                 Sets the fractal dimension to the specified dimen, which  may
                 be  any floating point value between 0 and 3.  Higher fractal
                 dimensions create  more  ``chaotic''  images,  which  require
                 higher  resolution  output and a larger FFT mesh size to look
                 good.  If  no  dimension  is  specified,  2.4  is  used  when
                 generating planets and 2.15 for clouds.

       -glaciers level
                 The floating point level setting controls the extent to which
                 terrain elevation causes ice to appear  at  lower  latitudes.
                 The  default value of 0.75 makes the polar caps extend toward
                 the equator across high terrain and  forms  glaciers  in  the
                 highest  mountains,  as  on  Earth.   Higher  values make ice
                 sheets  that  cover  more  and  more  of  the  land  surface,
                 simulating  planets in the midst of an ice age.  Lower values
                 tend to be boring, resulting  in  unrealistic  geometrically-
                 precise ice cap boundaries.

       -hour hour
                 When generating a planet, hour is used as the ``hour angle at
                 the  central  meridian.''   If  you  specify  -hour  12,  for
                 example,  the planet will be fully illuminated, corresponding
                 to high noon at the longitude at the centre  of  the  screen.
                 You can specify any floating point value between 0 and 24 for
                 hour, but values which place most of the planet  in  darkness
                 (0  to  4  and  20  to  24)  result in crescents which, while
                 pretty, don't give you many illuminated pixels for the amount
                 of   computing  that's  required.   If  no  -hour  option  is
                 specified, a random hour angle is chosen, biased so that only
                 25% of the images generated will be crescents.

       -ice level
                 Sets  the  extent of the polar ice caps to the given floating
                 point level.  The default level  of  0.4  produces  ice  caps
                 similar  to  those  of  the Earth.  Smaller values reduce the
                 amount  of  ice,  while  larger  -ice  settings  create  more
                 prominent  ice  caps.  Sufficiently large values, such as 100
                 or more, in conjunction with  small  settings  for  -glaciers
                 (try 0.1) create ``ice balls'' like Europa.

       -inclination|-tilt angle
                 The  inclination  angle  of  the  planet  with  regard to its
                 primary star is set to angle, which can be any floating point
                 value  from  -90 to 90.  The inclination angle can be thought
                 of as specifying, in degrees, the ``season''  the  planet  is
                 presently  experiencing  or,  more precisely, the latitude at
                 which the star transits the zenith at local noon.  If 0,  the
                 planet  is  at  equinox; the star is directly overhead at the
                 equator.  Positive values represent summer  in  the  northern
                 hemisphere,   negative   values   summer   in   the  southern
                 hemisphere.  The Earth's inclination angle, for  example,  is
                 about  23.5 at the June solstice, 0 at the equinoxes in March
                 and September, and -23.5 at the  December  solstice.   If  no
                 inclination  angle is specified, a random value between -21.6
                 and 21.6 degrees is chosen.

       -mesh size
                 A mesh of size by size will be  used  for  the  fast  Fourier
                 transform   (FFT).    Note   that   memory  requirements  and
                 computation speed increase as the  square  of  size;  if  you
                 double  the  mesh  size,  the program will use four times the
                 memory and run four times  as  long.   The  default  mesh  is
                 256x256,  which  produces  reasonably  good  looking pictures
                 while using half a megabyte for the 256x256 array  of  single
                 precision  complex  numbers required by the FFT.  On machines
                 with limited memory capacity, you may have to reduce the mesh
                 size  to  avoid running out of RAM.  Increasing the mesh size
                 produces better  looking  pictures;  the  difference  becomes
                 particularly   noticeable  when  generating  high  resolution
                 images with relatively high fractal dimensions  (between  2.2
                 and 3).

       -night    A starry sky is generated.  The stars are created by the same
                 algorithm used for the stars that surround  planet  pictures,
                 but the output consists exclusively of stars.

       -power factor
                 Sets   the   ``power   factor''   used  to  scale  elevations
                 synthesised from the FFT to factor, which can be any floating
                 point  number greater than zero.  If no factor is specified a
                 default of 1.2 is used if a planet  is  being  generated,  or
                 0.75  if  clouds  are  selected  by  the -clouds option.  The
                 result of the FFT image synthesis is an  array  of  elevation
                 values   between   0   and   1.   A  non-unity  power  factor
                 exponentiates each  of  these  elevations  to  the  specified
                 power.   For example, a power factor of 2 squares each value,
                 while a power factor of 0.5 replaces  each  with  its  square
                 root.   (Note  that  exponentiating  values  between  0 and 1
                 yields values that remain within that range.)  Power  factors
                 less  than  1  emphasise large-scale elevation changes at the
                 expense of small variations.  Power factors  greater  than  1
                 increase  the roughness of the terrain and, like high fractal
                 dimensions, may require a larger FFT mesh size and/or  higher
                 screen resolution to look good.

       -saturation sat
                 Controls  the  degree  of colour saturation of the stars that
                 surround planet pictures and fill starry skies  created  with
                 the  -night  option.   The default value of 125 creates stars
                 which resemble the sky as seen by the human eye from  Earth's
                 surface.   Stars  are  dim;  only  the brightest activate the
                 cones in the human retina, causing colour  to  be  perceived.
                 Higher values of sat approximate the appearance of stars from
                 Earth  orbit,  where  better  dark  adaptation,  absence   of
                 skyglow,  and  the  concentration  of light from a given star
                 onto a smaller area of the  retina  thanks  to  the  lack  of
                 atmospheric  turbulence  enhances  the  perception of colour.
                 Values greater than  250  create  ``science  fiction''  skies
                 that, while pretty, don't occur in this universe.

                 Thanks  to the inverse square law combined with Nature's love
                 of mediocrity, there are  many,  many  dim  stars  for  every
                 bright  one.   This  population  relationship  is  accurately
                 reflected in the skies created by ppmforge.   Dim,  low  mass
                 stars   live   much   longer   than   bright  massive  stars,
                 consequently there are many  reddish  stars  for  every  blue
                 giant.   This relationship is preserved by ppmforge.  You can
                 reverse the proportion, simulating  the  sky  as  seen  in  a
                 starburst galaxy, by specifying a negative sat value.

       -seed num Sets  the seed for the random number generator to the integer
                 num.  The seed used to create each picture  is  displayed  on
                 standard  output  (unless suppressed with the -quiet option).
                 Pictures generated with the same seed will be identical.   If
                 no  -seed  is  specified, a random seed derived from the date
                 and time will be chosen.  Specifying an explicit seed  allows
                 you  to re-render a picture you particularly like at a higher
                 resolution or with different viewing parameters.

       -stars fraction
                 Specifies the percentage of pixels, in tenths of  a  percent,
                 which  will  appear  as stars, either surrounding a planet or
                 filling the entire frame if -night is specified.  The default
                 fraction is 100.

       -xsize|-width width
                 Sets  the  width of the generated image to width pixels.  The
                 default width is 256 pixels.  Images must be at least as wide
                 as  they  are  high;  if  a  width  less  than  the height is
                 specified, it will be increased to equal the height.  If  you
                 must  have  a  long  skinny  pixmap,  make  a square one with
                 ppmforge, then use pnmcut to extract a portion of  the  shape
                 and size you require.

       -ysize|-height height
                 Sets the height of the generated image to height pixels.  The
                 default height  is  256  pixels.   If  the  height  specified
                 exceeds  the  width, the width will be increased to equal the

       All flags can be abbreviated to their shortest unique prefix.


       The algorithms require the output pixmap to be at least as wide  as  it
       is  high,  and  the  width  to  be  an  even  number  of pixels.  These
       constraints are enforced by increasing the size of the requested pixmap
       if necessary.

       You  may  have  to  reduce  the  FFT  mesh size on machines with 16 bit
       integers and segmented pointer architectures.


       pnmcut(1), pnmdepth(1), ppmdither(1), ppmquant(1), ppm(5)

       [1]  Voss, Richard F., ``Random Fractal Forgeries,''  in  Earnshaw  et.
            al.,   Fundamental   Algorithms  for  Computer  Graphics,  Berlin:
            Springer-Verlag, 1985.

       [2]  Peitgen, H.-O., and Saupe, D. eds., The Science Of Fractal Images,
            New York: Springer Verlag, 1988.


            John Walker
            Autodesk SA
            Avenue des Champs-Montants 14b
            CH-2074 MARIN
            Fax:     038/33 88 15
            Voice:   038/33 76 33

       Permission  to  use, copy, modify, and distribute this software and its
       documentation for any  purpose  and  without  fee  is  hereby  granted,
       without any conditions or restrictions.  This software is provided ``as
       is'' without express or implied warranty.

       PLUGWARE!  If you like this kind of stuff, you may also  enjoy  ``James
       Gleick's  Chaos--The  Software''  for MS-DOS, available for $59.95 from
       your local software  store  or  directly  from  Autodesk,  Inc.,  Attn:
       Science   Series,   2320  Marinship  Way,  Sausalito,  CA  94965,  USA.
       Telephone: (800) 688-2344 toll-free or, outside the U.S. (415) 332-2344
       Ext  4886.   Fax:  (415)  289-4718.  ``Chaos--The Software'' includes a
       more comprehensive  fractal  forgery  generator  which  creates  three-
       dimensional  landscapes  as  well as clouds and planets, plus five more
       modules which explore other aspects of Chaos.  The user guide  of  more
       than  200  pages  includes an introduction by James Gleick and detailed
       explanations by Rudy Rucker of the mathematics and algorithms  used  by
       each program.

                                25 October 1991                    ppmforge(1)