PPMFORGE



		

NAME

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

SYNOPSIS

      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
               height]

DESCRIPTION

      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 syn-
      thesised 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 com-
      ponents  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 eleva-
      tion 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  con-
      taining  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  approxi-
                mately  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 unrealis-
      tic  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 newmax-
      val  settings  of  63, 31, or 15 with pnmdepth to reduce the number of
      colours in the picture to 256 or fewer.

OPTIONS

      -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  gen-
                erating 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 lati-
                tudes.  The default value of 0.75 makes the polar  caps  ex-
                tend  toward  the equator across high terrain and forms gla-
                ciers in the highest mountains, as on Earth.  Higher  values
                make  ice  sheets  that cover more and more of the land sur-
                face, 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 ex-
                ample, 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 dark-
                ness (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 prom-
                inent 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  pri-
                mary  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  hemi-
                sphere.   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 computa-
                tion 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 rela-
                tively 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 pic-
                tures, but the output consists exclusively of stars.
      -power factor
                Sets the ``power factor''  used  to  scale  elevations  syn-
                thesised  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  exponen-
                tiates 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  ex-
                pense of small variations.  Power factors greater than 1 in-
                crease 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 at-
                mospheric 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  re-
                flected  in  the  skies  created by ppmforge.  Dim, low mass
                stars live much longer than  bright  massive  stars,  conse-
                quently  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  de-
                fault 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
                height.
      All flags can be abbreviated to their shortest unique prefix.

BUGS

      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 con-
      straints 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  in-
      tegers and segmented pointer architectures.

DEMONSTRATION

      Let a.ppm be a portable pixmap.
      The following command will generate respectively some clouds, 
      a planet and stars:
	ppmmerge ppmforge -clouds > clouds.ppm
        ppmmerge ppmforge -hour 10 > planet.ppm
	ppmmerge ppmforge -night -stars 1000 > stars.ppm
clouds

planet

stars


		

SEE ALSO

      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  Im-
           ages, New York: Springer Verlag, 1988.

AUTHOR

           John Walker
           Autodesk SA
           Avenue des Champs-Montants 14b
           CH-2074 MARIN
           Suisse/Schweiz/Svizzera/Svizra/Switzerland
           Usenet:  kelvin@Autodesk.com
           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:  Sci-
      ence 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.