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}
height]
This program is part of Netpbm(1).
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. ppmforge generates as
follows:
The randomness in the image is limited before Netpbm 10.37
(December 2006) -- if you run the program twice in the same second, you may
get identical output.
- Clouds
- A color map is created that ranges from pure blue to white by increasing
admixture (desaturation) of blue with white. Numbers less than 0.5 are
colored blue, numbers between 0.5 and 1.0 are colored 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 colored
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 color 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 colors and may be
displayed on most color mapped devices without further processing. Planet
pictures often contain tens of thousands of colors which must be compressed
with pnmquant or ppmdither before encoding in a color mapped
format. If the display resolution is high enough, ppmdither generally
produces better looking planets. pnmquant tends to create discrete
color bands, particularly in the oceans, which are unrealistic and
distracting. The number of colors in starry sky pictures generated with the
-night option depends on the value specified for -saturation.
Small values limit the color temperature distribution of the stars and
reduce the number of colors in the image. If the -saturation is set
to 0, none of the stars will be colored and the resulting image will never
contain more than 256 colors. Night sky pictures with many different star
colors often look best when color compressed by pamdepth rather than
pnmquant or ppmdither. Try newmaxval settings of 63,
31, or 15 with pamdepth to reduce the number of colors in the picture
to 256 or fewer.
In addition to the options common to all programs based on
libnetpbm (most notably -quiet, see
Common Options ), ppmforge recognizes the following command line
options:
You can abbreviate any options to its shortest unique prefix.
- -clouds
- Generate clouds. An image 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
real number between 0 and 5 inclusive. 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, the
program uses 2.4 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, ppmforge uses hour 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 center 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 currently 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 color 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 color 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 color. 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 image, make a square one with
ppmforge, then use pamcut 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.
The algorithms require the output image 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 image if necessary.
You may have to reduce the FFT mesh size on machines with 16 bit
integers and segmented pointer architectures.
pamcut(1), pamdepth(1), ppmdither(1),
pnmquant(1), ppm(1)
- [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
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.
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.
This manual page was generated by the Netpbm tool 'makeman' from
HTML source. The master documentation is at
- http://netpbm.sourceforge.net/doc/ppmforge.html