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.