ppmforge
fractal forgeries of clouds, planets, and starry skies
see also :
pnmcut - pnmdepth - ppmdither - ppmquant
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]
add an example, a script, a trick and tips
examples
no example yet ...
... Feel free to add your own example above to help other Linux-lovers !
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:
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 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 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.
see also
pnmcut ,
pnmdepth , ppmdither , ppmquant ,
ppm
[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[:at:]Autodesk[:dot:]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.