# phpman > man > ppmforge(1)

> **TLDR:** Generate fractals resembling clouds, planets, and starry skies.
>
- Generate an image of a planet:
  `ppmforge > {{path/to/image.ppm}}`
- Generate an image of clouds or the night sky:
  `ppmforge -{{night|clouds}} > {{path/to/image.ppm}}`
- Use a custom mesh size and dimension for fractal generation and specify the dimensions of the output:
  `ppmforge {{-m|-mesh}} {{512}} {{-d|-dimension}} {{2.5}} {{-x|-xsize}} {{1000}} {{-y|-ysize}} {{1000}} > {{path/to/image.ppm}}`
- Control the tilt and the angle from which the generated planet is illuminated:
  `ppmforge {{-t|-tilt}} {{15}} {{-ho|-hour}} {{12}} > {{path/to/image.ppm}}`

*Source: tldr-pages*

---

[ppmforge(1)](https://www.chedong.com/phpMan.php/man/ppmforge/1/markdown)                            General Commands Manual                           [ppmforge(1)](https://www.chedong.com/phpMan.php/man/ppmforge/1/markdown)



## 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  tech‐
       nique 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 synthe‐
       sised 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 mem‐
       ory  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 fre‐
       quency 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 as‐
       sociated  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  unmodi‐
       fied;  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  en‐
       visioned 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,  num‐
                 bers  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 generat‐
       ed 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  im‐
       age.   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
                 the default for fractal dimension to 2.15 and power scale factor to 0.75.

### -dimension
                 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
                 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 high‐
                 est 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  bound‐
                 aries.

### -hour
                 When  generating  a planet, _hour_ is used as the ``hour angle at the central meridi‐
                 an.''  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
                 Sets the extent of the polar ice caps to the given floating point _level_.   The  de‐
                 fault 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
                 The inclination angle of the planet with regard to its primary star is set  to  _an__‐
                 _gle_,  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 exam‐
                 ple, 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
                 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 com‐
                 plex 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  notice‐
                 able when generating high resolution images with relatively high fractal dimensions
                 (between 2.2 and 3).

### -night
                 the  stars  that  surround  planet pictures, but the output consists exclusively of
                 stars.

### -power
                 Sets the ``power factor'' used to scale elevations synthesised from the FFT to _fac__‐
                 _tor_,  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 fac‐
                 tor 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  eleva‐
                 tion  changes at the expense 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
                 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 concen‐
                 tration  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 ac‐
                 curately 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 ev‐
                 ery 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 nega‐
                 tive _sat_ value.

### -seed
                 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
                 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  speci‐
                 fied.  The default _fraction_ is 100.

### -xsize|-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
                 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**(1)](https://www.chedong.com/phpMan.php/man/pnmcut/1/markdown), [**pnmdepth**(1)](https://www.chedong.com/phpMan.php/man/pnmdepth/1/markdown), [**ppmdither**(1)](https://www.chedong.com/phpMan.php/man/ppmdither/1/markdown), [**ppmquant**(1)](https://www.chedong.com/phpMan.php/man/ppmquant/1/markdown), [**ppm**(5)](https://www.chedong.com/phpMan.php/man/ppm/5/markdown)

       [1]  Voss, Richard F., ``Random Fractal Forgeries,'' in Earnshaw et. al.,  Fundamental  Algo‐
            rithms 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.   Tele‐
       phone:  (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 mod‐
       ules 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.



                                           25 October 1991                               [ppmforge(1)](https://www.chedong.com/phpMan.php/man/ppmforge/1/markdown)
