Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ ppmforge(1) — Dell System V Release 4 Issue 2.2

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

pnmcut(1)

pnmdepth(1)

ppmdither(1)

ppmquant(1)

ppm(5)



ppmforge(1)             UNIX System V(25 October 1991)              ppmforge(1)


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 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:



10/89                                                                    Page 1







ppmforge(1)             UNIX System V(25 October 1991)              ppmforge(1)


      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.

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


Page 2                                                                    10/89







ppmforge(1)             UNIX System V(25 October 1991)              ppmforge(1)


                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


10/89                                                                    Page 3







ppmforge(1)             UNIX System V(25 October 1991)              ppmforge(1)


                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


Page 4                                                                    10/89







ppmforge(1)             UNIX System V(25 October 1991)              ppmforge(1)


                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 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 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.





10/89                                                                    Page 5







ppmforge(1)             UNIX System V(25 October 1991)              ppmforge(1)


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 Images,
           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: 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.


















Page 6                                                                    10/89





Typewritten Software • bear@typewritten.org • Edmonds, WA 98026