Isosurface manual
Build in functions

Parameters

There are some special parameters with complicated effects that are found in several of these functions. Rather than describe them each time they occur, they are described here, and referred to them later as "Cross section type", "Field Strength", "Field Limit" etc.

Cross section type

In the helixes and spiral functions, the 6th parameter is the cross section type. The following values seem to work:
  • 0: square
  • 1: circle
  • 2: diamond
  • 3: concave diamond
Fractional values produce results that are intermediate between these shapes, i.e.
  • 0.0 to 1.0: rounded squares
  • 1.0 to 2.0: rounded diamonds
  • 2.0 to 3.0: partially concave diamonds

Field Strength

The numerical value at a point in space generated by the function is multiplied by the Field Strength. The set of points where the function evaluates to zero are unaffected by any positive value of this parameter, so if you're just using the function on its own with threshold = 0, the generated surface is still the same.
In some cases, the field strength has a considerable effect on the speed and accuracy of rendering the surface. In general, increasing the field strength speeds up the rendering, but if you set the value too high the surface starts to break up and may disappear completely.
The surface generated with threshold = 0.1 and field strength 1 is the same as the surface generated with threshold = 0.2 and field strength 2. Doubling the field strength has doubled the numeric value at a point in space, but doubling the threshold tells Megapov to look for points where the numeric value is double.
Setting the field strength to a negative value produces the inverse of the surface, like setting sign -1.

Field Limit

The numerical value at a point in space generated by the function is limited to plus or minus the field limit.
E.g. if you set the field limit to 2, then the value returned for a point that is a large distance from the surface will be +2 or -2.
This won't make any difference to the generated surface if you're using threshold that's within the field limit (and will kill the surface completely if the threshold is greater than the field limit). However, it may make a huge difference to the rendering times.
If you use the function to generate a pigment, then all points that are a long way from the surface will have the same color, the color that corresponds to the numerical value of the field limit.

SOR Switch

"algbr_cyl1", <1, 1.5, 1, 0, 0>
If greater than zero, the curve is swept out as a surface of revolution (SOR).
If the value is zero or negative, the curve is extruded linearly in the Z direction.
The image is sliced in half so that you can see the 2d figure-of-eight curve that generates it.

SOR Offset

"algbr_cyl1", <1, 1.5, 1, 0.4, 0>
If the SOR switch is on, then the curve is shifted this distance in the X direction before being swept out.
This time the figure-of-eight curve has been shifted 0.4 units to the right before being swept out by setting SOR Offset to 0.4.

SOR Angle

"algbr_cyl1", <1, 1.5, 1, 0.8, 90>
If the SOR switch is on, then the curve is rotated this number of degrees about the Z axis before being swept out.
This time the figure-of-eight curve has been rotated by 90 degrees and shifted 0.8 units to the right before being swept out by setting SOR Angle to 90.

Inside / outside

Sometimes, when you render a surface, you may find that you get only the shape of the container.
This could be caused by the fact that some of the build in functions are defined inside out. MegaPOV defines the "inside" of the surface as the region of space where the function is less than the threshold (i.e. in this case the region where the function evaluates to a negative value).
To see what's going on, we can slice the object in half. (Note that when performing CSG operations on an isosurface we need to specify a max_trace parameter, otherwise some parts of the surface may be missing).
The algbr_cyl1 we used to show the working of the SOR Switch is defined correctly. We can invert the isosurface by adding the "sign -1" parameter, and get this result:
"algbr_cyl1", <1, 1.5, 1, 0, 0>
sign -1
We can see that the surface that we wanted is buried inside, and it's hollow.
  • Hint: in this tutorial, if the "sign -1" parameter is needed to get correct results, it is added in the example.
  • Note: that we can't use the "inverse" command because that inverts the contained_by surface as well and the result looks the same apart from the "Camera is inside a non-hollow object" warning.

Another way of solving the problem is to make the contained_by surface "open". This is equivalent to using "clipped_by" in POV.
When you specify "open", the contained_by surface becomes invisible. However, there can sometimes be a severe speed penalty associated with this parameter.

Another way of solving the problem is to add an invisible copy of the contained_by surface after the isosurface. Because the two surfaces exactly coincide, only the second one is rendered, and if the pigment of the second one is totally transparent you can't see it.

Of the three methods, the "sign -1" is normally the best solution.

Polar coordinates

The first three functions (“R”, ”TH”, “PH”) are more useful when used in combination with other functions, or for expressing a surface in terms of 3d polar co-ordinates, but here the images show them working alone.
The functions "R", "TH" and "PH" are equivalent to the standard 3d polar co-ordinates Radius, Theta and Phi.

The build in functions

R

#declare F = function {"R"}
isosurface { function { F(x,y,z) - 0.7}}

Parameters (0):

  • No parameters required
In this image we have subtracted 0.7 from the function, which is identical to setting the threshold to 0.7.
When used alone, the "R" function gives a surface that consists of all the points that are a specific distance from the origin, i.e. a sphere. If you use a threshold of zero (the default) this gives a sphere of size zero, which is invisible.

TH

When used alone, the "TH" function gives a surface which consists of all points that have a longitude of zero or 180 degrees. I.e. a plane through the origin.
"TH" is a function that is only useful when combined with other surfaces.
It produces a value which is equal to the "theta" angle, in radians, at any point. The theta angle is like the longitude co-ordinate on the Earth. It stays the same as you move north or south, but varies from east to west.
#declare Theta = function{"TH"}
#declare Sphere = function{"sphere" <1>}
isosurface { function { Sphere + sin(Theta*20)*0.05*(1-y*y) }

Parameters (0):

  • No parameters required
This surface is a sphere to which has been added a height that's proportional to sin(theta), but which also decreases as you get near the poles (otherwise the ridges look out of proportion when the come close together).

PH

For this image, the threshold is set to 0.5. To do this, we have subtracted 0.5 from the function, which is identical to setting the threshold to 0.5. The cone consists of all points that have Phi equal to 1 radian.
#declare F = function {"PH"}
isosurface { function { F(x,y,z) - 0.5 }

Parameters (0):

  • No parameters required
When used alone, the "PH" function gives a surface that consists of all points that are at a particular latitude, i.e. a cone. If you use a threshold of zero (the default) this gives a cone of width zero, which is invisible.

sphere

"sphere", <1.0>

Parameters (1):

  1. Radius of sphere
The "sphere" function creates a sphere, which gives exactly the same results as you would get by using a conventional sphere{0, 1} object or using the mathematical isosurface function (x^2 + y^2 + z^2 - 1)

helix1 / func_6

"helix1", <1, 8, 0.3, 0.9, 0.6, 0.2, 0>

Parameters (7):

  1. Number of helixes - e.g. 2 for a double helix
  2. Period - is related to the number of turns per unit length
  3. Minor radius
  4. Major radius
  5. Shape parameter. If this is greater than 1 then the tube becomes fatter in the y direction
  6. Cross section type.
  7. Cross section rotation angle (degrees). E.g. if you choose a square cross section and rotate it by 45 degrees you get a diamond cross section.
The "func_6" surface is identical the the standard "helix1" surface in all respects.
"Helix1" is intended for use with helixes where the major radius is greater than the minor radius.

helix2 / func_7

"func_7", <0, 8, 0.3, 0.2, 1, 1, 0>
sign -1

Parameters (7):

  1. Not used
  2. Period - is related to the number of turns per unit length
  3. Minor radius
  4. Major radius
  5. Not used
  6. Cross section type.
  7. Cross section rotation angle (degrees). E.g. if you choose a square cross section and rotate it by 45 degrees you get a diamond cross section.
The "func_7" surface is identical to the standard "helix2" surface in all respects.
"helix2" is intended for use with helixes where the minor radius is greater than the major radius. I.e. for situations like twisty table legs.

spiral / func_8

"func_8", <0.3, 0.1, 1, 0, 0, 2>

Parameters (6):

  1. Distance between windings: setting this to 0.3 means that the spiral is 0.3 pov units further from the origin each time it completes one whole turn
  2. Thickness
  3. Outer diameter of the spiral. The surface behaves as if it is contained_by a sphere of this diameter
  4. Not used
  5. Not used
  6. Cross section type
The "func_8" surface is identical the the standard "spiral" surface in all respects.

mesh1 / func_14

"func_14", <1/5, 1/4, 1/6, 0.0001, 1/10>
threshold 0.005

Parameters (5):

  1. Number of threads per unit in the x direction
  2. Number of threads per unit in the z direction
  3. Relative thickness in the x and z directions
  4. Amplitude of the weaving effect. Set to zero for a flat grid
  5. Relative thickness in the y direction
The func_14 surface is remarkably similar to the standard "mesh1" surface.
"mesh1" gives a set of threads that weave up and down through each other in a rectangular pattern.
Note: The overall thickness of the threads is controlled by the isosurface threshold, not by a parameter. If you render a mesh1 with zero threshold, the threads have zero thickness and are therefore invisible. Parameters 3 and 5 control the shape of the thread relative to this threshold parameter.

rounded_box

"rounded_box", <0.2>

Parameters (1):

  1. Radius of curvature. Zero gives square corners, 0.1 gives corners that match "sphere {0,0.1}"

torus

"torus", <0.8, 0.2>

Parameters (2):

  1. Major radius
  2. Minor radius
Thus the isosurface function {"torus" <0.8,0.1>} is identical to the conventional torus {0.8,0.1}.

superellipsoid

"superellipsoid", <0.3, 0.5>
sign -1

Parameters (2):

  1. NW
  2. SW
The "superellipsoid" isosurface function creates a surface that's the same as the conventional superellipsoid object, and the two parameters have the same effects.
However, it only seems to work if turned inside out, by using sign -1.

func_0

"func_0", <1/0.95, 1/0.3, 1/0.95>
threshold 1

Parameters (3):

  1. X scale (inverse)
  2. Y scale (inverse)
  3. Z scale (inverse)
func_0 generates spheres and ellipsoids.
Setting these scaling parameters to 1/n gives exactly the same effect as performing a scale operation to increase the scaling by n in the corresponding direction.

func_1

"func_1", <1.4, 1, 0.8, 1.2, 1>
threshold -0.3

Parameters (5):

  1. X distance between the two components
  2. Blob strength of component 1
  3. Inverse blob radius of component 1
  4. Blob strength of component 2
  5. Inverse blob radius of component 2
func_1 generates blobs that are similar to a CSG blob with two spherical components.
For some unknown reason, this function only seems to work with negative threshold settings.

func_2

"func_2", <0.01, 35, 1.5, 1.2>

Parameters (4):

  1. Spikiness. Set this to very low values to increase the spikes. Set it to 1 and you get a sphere
  2. Inverse size. Increase this to decrease the size of the surface. (The other parameters also drastically affect the size, but this parameter has no other effects)
  3. Flange. Increase this to increase the flanges that appear between the spikes. Set it to 1 for no flanges
  4. Threshold. Setting this parameter to 1 and the threshold to zero has exactly the same effect as setting this parameter to zero and the threshold to -1

func_2b

"func_2b", <1, 1/0.2, 2, 1>

Parameters (4):

  1. Separation. One blob component is at the origin, and the other is this distance away on the X axis
  2. Inverse size. Increase this to decrease the size of the surface
  3. Blob strength
  4. Threshold. Setting this parameter to 1 and the threshold to zero has exactly the same effect as setting this parameter to zero and the threshold to -1
Although the mathematics of func_2b are similar to that of func_2 (hence the name) the surface produced is more like func_1. The surface is similar to a CSG blob with two spherical components.

func_3

"func_3", <0.05, 8, 8, 1>

Parameters (4):

  1. Eccentricity. When less than 1, the ellipsoids are oblate, when greater than 1 the ellipsoids are prolate, when zero the ellipsoids are spherical (and hence the whole surface is a sphere)
  2. Inverse size. Increase this to decrease the size of the surface
  3. Diameter. Increase this to increase the size of the ellipsoids
  4. Threshold. Setting this parameter to 1 and the threshold to zero has exactly the same effect as setting this parameter to zero and the threshold to -1
The func_3 surface is like the union of three crossed ellipsoids, one oriented along each axis.

func_4

"func_4", <5, 1, 18, 1>

Parameters (4):

  1. Eccentricity. When less than 1, the ellipsoids are oblate, when greater than 1 the ellipsoids are prolate, when zero the ellipsoids are spherical (and hence the whole surface is a sphere)
  2. Inverse size. Increase this to decrease the size of the surface
  3. Diameter. Increase this to increase the size of the ellipsoids
  4. Threshold. Setting this parameter to 1 and the threshold to zero has exactly the same effect as setting this parameter to zero and the threshold to -1
The func_4 surface is like the intersection of three crossed ellipsoids, one oriented along each axis.

func_5

"func_5", <0.04, 5.6, -4, 0.1, 1>

Parameters (5):

  1. Spikiness. Set this to very low values to increase the spikes. Set it to 1 and you get a sphere
  2. Hollowness. Increasing this causes the sides to bend in more
  3. Size. Increasing this increases the size of the object
  4. Roundness. This parameter has a subtle effect on the roundness of the spikes
  5. Fatness. Increasing this makes the spikes fatter

func_9

"func_9", <0, 1, -1, 0, 0>

Parameters (5):

  1. Constant
  2. Y coefficient
  3. Y2 coefficient
  4. Y3 coefficient
  5. Y4 coefficient
This function can be used to generate the surface of revolution of any polynomial up to degree 4.
To put it another way: If we call the parameters A, B, C, D, E; then this function generates the surface of revolution formed by revolving "x = A + By + Cy2 + Dy3 + Ey4" around the Y axis.

func_10

"func_10", <0.7, 15, 15, 2.2>

Parameters (4):

  1. Height of central spike
  2. Frequency of spikes in the X direction
  3. Frequency of spikes in the Z direction
  4. Rate at which the spikes reduce as you move away from the center

func_11

"func_11", <0>

Parameters (1):

  1. Not used
There's a comment in the source code that says "well known function in quantum mechanics". It resembles the shape of the electron density cloud for one of the d orbitals.
This function doesn't use the passed parameter, but the MegaPOV syntax requires that at least one parameter be present.

func_12

"func_12", <2, 7, 1, 0.1, 1, 0.5, 1, 6, 2.0, 0>

Parameters (10):

  1. Major radius
  2. Number of winding loops
  3. Twistiness of winding. When zero, each winding loop is separate. When set to one, each loop twists into the next one. When set to two, each loop twists into the one after next
  4. Fatness of winding?
  5. Threshold. Setting this parameter to 1 and the threshold to zero has s similar effect as setting this parameter to zero and the threshold to 1
  6. Negative minor radius? Reducing this parameter increases the minor radius of the central torus. Increasing it can make the torus disappear and be replaced by a vertical column. The value at which the surface switches from one form to the other depends on several other parameters
  7. Another fatness of winding control?
  8. Groove period. Increase this for more grooves
  9. Groove amplitude. Increase this for deeper grooves
  10. Groove phase. Set this to zero for symmetrical grooves
This is the "func_12" surface. With some sets of parameters, it looks like a torus with a helical winding around it. The winding optionally has grooves around the outside.
I'm not completely sure about how the parameters work for this surface.

func_13

"func_13", <1>

Parameters (1):

  1. Scale
The "func_13" surface is very much like a comma-shape.

func_16

"func_16", <8, -1, -1/100, -0.02, 0.1, -0.25>
threshold 0.4

Parameters (6):

  1. Number of tubes
  2. Constant
  3. Y coefficient
  4. Y2 coefficient
  5. Y3 coefficient
  6. Y4 coefficient
The func_16 surface consists of a number of tubes. Each tube follows a 2d curve which is specified by a polynomial of degree 4 or less.
To put it another way: If we call the parameters A, B, C, D, E, F; then this function generates "A" tubes which all follow the equation " x = B + Cy + Dy2 + Ey3 + Fy4 " arranged around the Y axis.

algbr_cyl1

"algbr_cyl1", <1, 1.5, 1, 0, 0>

Parameters (5):

  1. Field Strength
  2. Field Limit
  3. SOR Switch
  4. SOR Offset
  5. SOR Angle
An algebraic cylinder is what you get if you take any 2d curve and plot it in 3d. The 2d curve is simply extruded along the third axis, in this case the z axis.
With the SOR Switch switched on, the figure-of-eight curve is now rotated around the Y axis instead of being extruded along the Z axis.

algbr_cyl2

"algbr_cyl2", <0.3, 5, 1, 0, 0>
sign -1

Parameters (5):

  1. Field Strength
  2. Field Limit
  3. SOR Switch
  4. SOR Offset
  5. SOR Angle
An algebraic cylinder is what you get if you take any 2d curve and plot it in 3d. The 2d curve is simply extruded along the third axis, in this case the z axis.
With the SOR Switch switched on, the curve is now rotated around the Y axis instead of being extruded along the Z axis.

algbr_cyl3

"algbr_cyl3", <1, 3, 1, 0, 0>
sign -1

Parameters (5):

  1. Field Strength
  2. Field Limit
  3. SOR Switch
  4. SOR Offset
  5. SOR Angle
An algebraic cylinder is what you get if you take any 2d curve and plot it in 3d. The 2d curve is simply extruded along the third axis, in this case the z axis.
With the SOR Switch switched on, the curve is now rotated around the Y axis instead of being extruded along the Z axis.

algbr_cyl4

"algbr_cyl4", <0.4, 5, 1, 0, 0>
sign -1

Parameters (5):

  1. Field Strength
  2. Field Limit
  3. SOR Switch
  4. SOR Offset
  5. SOR Angle
An algebraic cylinder is what you get if you take any 2d curve and plot it in 3d. The 2d curve is simply extruded along the third axis, in this case the z axis.
With the SOR Switch switched on, the curve is now rotated around the Y axis instead of being extruded along the Z axis.

bicorn

"bicorn", <0.01, 3>
sign -1

Parameters (2):

  1. Field Strength
  2. Scale. The surface is always the same shape. Changing this parameter has the same effect as adding a scale modifier. Setting the scale to 1 gives a surface with a radius of about 1 unit.
The bicorn surface looks something like the top part of a a paraboloid bounded below by another paraboloid.

bifolia

"bifolia", <1, 3>
sign -1

Parameters (2):

  1. Field Strength
  2. Scale. The mathematics of this surface suggest that the shape should be different for different values of this parameter. In practice the difference in shape is hard to spot. Setting the scale to 3 gives a surface with a radius of about 1 unit.
The surface is a surface of revolution.

boy_surface

"boy_surface", <0.001, 0.01>
sign -1

Parameters (2):

  1. Field Strength
  2. Scale. The surface is always the same shape. Changing this parameter has the same effect as adding a scale modifier.
The "Boy_surface" is a model of the projective plane without singularities. Found by Werner Boy on assignment from David Hilbert.
For this surface, it helps if the field strength is set low, otherwise the surface has a tendency to break up or disappear entirely. This has the side effect of making the rendering times extremely long.

ovals_of_cassini

"ovals_of_cassini", <0.1, 0.4, 0.18, 6>
sign -1

Parameters (4):

  1. Field Strength
  2. Major radius - like the major radius of a torus
  3. Filling. Set this to zero, and you get a torus. Set this to a higher value and the hole in the middle starts to heal up. Set it even higher and you get an ellipsoid with a dimple
  4. Thickness. The higher you set this value, the plumper is the result.
The Ovals of Cassini are a generalization of the torus shape.
The surface is actually inside out, so it may need inverting - either by setting "sign -1" or setting the field strength negative.

cubic_saddle

"cubic_saddle", <0.5>
sign -1

Parameters (1):

  1. Field Strength
For this surface, it helps if the field strength is set quite low, otherwise the surface has a tendency to break up or disappear entirely.

cushion / odd

"cushion", <0.25>
sign -1

Parameters (1):

  1. Field Strength
One odd thing about the "odd" surface is that it's identical to the "cushion" surface.
The rear face puckers forward to meet the dimple from the front face.

devils_curve

"devils_curve", <0.2>
sign -1

Parameters (1):

  1. Field Strength

devils_curve2d

"devils_curve2d", <1, 0.25, 0.3, 1, 0, 0>
sign -1

Parameters (6):

  1. Field Strength
  2. X factor
  3. Y factor
  4. SOR Switch
  5. SOR Offset
  6. SOR Angle
The 2d devil's curve can be extruded along the z axis, or using the SOR parameters it can be made into a surface of revolution.
The X and Y factors control the size of the central feature. If the X factor is slightly stronger than the Y factor, then the side pieces are linked to the central piece by a horizontal bridge at each corner.
If the Y factor is slightly greater than the X factor, then there is a vertical gap between the side pieces and the central piece at each corner.
If the X and Y factors are equal each of the four corners meets at a point.

dupin_cyclid

"dupin_cyclid", <0.05, 0.27, 0.04, 0.55, 0.0, 1.0>
sign -1

Parameters (6):

  1. Field Strength
  2. Major radius of torus
  3. Minor radius of torus
  4. X displacement of torus
  5. Y displacement of torus
  6. Radius of inversion
The Dupin Cyclid can take several forms depending on the parameters.
A Dupin Cyclid can be considered to be the envelope of all the possible spheres that just kiss three other spheres. It can also be considered to be the envelope of all spheres on a conic section that just touch a given sphere. And it can also be considered to be the "inversion" of a torus.
The parameters of the Dupin Cyclid consider it to be generated by the "inversion" of a torus. (Inversion here has some weird mathematical meaning, don't confuse it with the POV concept of "inverse").

folium_surface

"folium_surface", <0.02, 15, 15>
sign -1

Parameters (3):

  1. Field Strength
  2. Neck width factor - the larger you set this, the narrower the neck where the paraboloid meets the plane
  3. Divergence - the higher you set this value, the wider the paraboloid gets
A Folium Surface looks something like a paraboloid glued to a plane.

folium_surface2d

"folium_surface2d", <0.01, 12, 20, 1, 0, 0>
sign -1

Parameters (6):

  1. Field Strength
  2. Neck width factor - same as the 3d surface if you're revolving it around the Y axis
  3. Divergence - same as the 3d surface if you're revolving it around the Y axis
  4. SOR Switch
  5. SOR Offset
  6. SOR Angle
The 2d folium curve can be rotated around the X axis to generate the same 3d surface as the folium_surface, or it can be extruded in the Z direction (by switching the SOR switch off), or it can be rotated around the Y axis.

torus_gumdrop

"torus_gumdrop", <0.01>
sign -1

Parameters (1):

  1. Field Strength
The "Torus Gumdrop" surface is something like a torus with a couple of gumdrops hanging off the end.

hunt_surface

"hunt_surface", <0.01>
sign -1

Parameters (1):

  1. Field Strength

hyperbolic_torus

"hyperbolic_torus", <0.005, 1, 0.6>
sign -1

Parameters (3):

  1. Field Strength
  2. Major radius: separation between the centers of the tubes at the closest point
  3. Minor radius: thickness of the tubes at the closest point

kampyle_of_eudoxus

"kampyle_of_eudoxus", <0.001, 0.01, 2>
sign -1

Parameters (3):

  1. Field Strength
  2. Dimple: When zero, the two dimples punch right through and meet at the center. Non-zero values give less dimpling
  3. Closeness: Higher values make the two planes become closer
The "Kampyle of Eudoxus" is like two infinite planes with a dimple at the center.

kampyle_of_eudoxus2d

"kampyle_of_eudoxus2d", <0.001, 0, 2, 1, 0, 90>
sign -1

Parameters (6):

  1. Field Strength
  2. Dimple: When zero, the two dimples punch right through and meet at the center. Non-zero values give less dimpling
  3. Closeness: Higher values make the two planes become closer
  4. SOR Switch
  5. SOR Offset
  6. SOR Angle
The 2d curve that generates the above surface can be extruded in the Z direction or rotated about various axes by using the SOR parameters.

klein_bottle

"klein_bottle", <0.0005>
sign -1

Parameters (1):

  1. Field Strength
The klein bottle is the 3d equivalent of the Moebius Strip. It's a surface with only one side.

kummer_surface_v1

"kummer_surface_v1", <0.01>
sign -1

Parameters (1):

  1. Field Strength
The Kummer surface consists of a collection of radiating rods.

kummer_surface_v2

"kummer_surface_v2", <0.0005, -0.3, -0.97, 0.0>
sign -1

Parameters (4):

  1. Field Strength
  2. Rod width (negative): Setting this parameter to larger negative values increases the diameter of the rods
  3. Divergence (negative): Setting this number to -1 causes the rods to become approximately cylindrical. Larger negative values cause the rods to become fatter further from the origin. Smaller negative numbers cause the rods to become narrower away from the origin, and have a finite length
  4. Influences the length of half of the rods. Changing the sign affects the other half of the rods. 0 has no effect
Version 2 of the kummer surface only looks like radiating rods when the parameters are set to particular negative values. For positive values it tends to look rather like a superellipsoid.

lemniscate_of_gerono

"lemniscate_of_gerono", <0.1>
sign -1

Parameters (1):

  1. Field Strength
The "Lemniscate_of_Gerono" surface is an hourglass shape. Two teardrops with their ends connected.

lemniscate_of_gerono2d

"lemniscate_of_gerono2d", <0.1, 1, 1, 1, 2, -45>
sign -1

Parameters (6):

  1. Field Strength
  2. Size: increasing this makes the 2d curve larger and less rounded
  3. Width: increasing this makes the 2d curve fatter
  4. SOR Switch
  5. SOR Offset
  6. SOR Angle
The 2d version of the Lemniscate can be extruded in the Z direction, or used as a surface of revolution to generate the equivalent of the 3d version, or revolved in different ways. To produce the 3d Lemniscate, switch SOR on and set the SOR offset to zero and the SOR angle to 90.

paraboloid

"paraboloid", <1>
sign -1

Parameters (1):

  1. Field Strength
This paraboloid is the surface of revolution that you get if you rotate a parabola about the Y axis.

parabolic_torus

"parabolic_torus", <0.1, 0.4, 0.5>
sign -1

Parameters (3):

  1. Field Strength
  2. Major radius
  3. Minor radius

piriform

"piriform", <0.7>

Parameters (1):

  1. Field Strength
The piriform surface looks rather like half a lemniscate.

piriform2d

"piriform2d", <1, 1, -1, 0.9, 1, 0, -90>
sign -1

Parameters (7):

  1. Field Strength
  2. Size factor 1: increasing this makes the curve larger
  3. Size factor 2: making this less negative makes the curve larger but also thinner
  4. Fatness: increasing this makes the curve fatter
  5. SOR Switch
  6. SOR Offset
  7. SOR Angle
The 2d version of the Lemniscate can be extruded in the Z direction, or used as a surface of revolution to generate the equivalent of the 3d version, or revolved in different ways.
This might be a useful shape for making hot air balloons - reduce the fatness parameter to make a weather balloon.

quartic_paraboloid

"quartic_paraboloid", <0.01>
sign -1

Parameters (1):

  1. Field Strength
The Quartic paraboloid is similar to a paraboloid, but has a squarer shape.

quartic_saddle

"quartic_saddle", <0.05>

Parameters (1):

  1. Field Strength
The Quartic saddle is similar to a saddle, but has a squarer shape.

quartic_cylinder

"quartic_cylinder", <1, 0.8, 0.2>
sign -1

Parameters (3):

  1. Field Strength
  2. Diameter of the "egg"
  3. Controls the width of the tube and the vertical scale of the "egg"
The Quartic cylinder looks a bit like a cylinder that's swallowed an egg.

steiners_roman

"steiners_roman", <1>
sign -1

Parameters (1):

  1. Field Strength
The "Steiners Roman" is composed of four identical triangular pads which together make up a sort of rounded tetrahedron. There are creases along the X, Y and Z axes where the pads meet.
It is a model of the projective plane.

strophoid

"strophoid", <0.2, 2, 0.5, 0.9>
sign -1

Parameters (4):

  1. Field Strength
  2. Size of bulb. Larger values give larger bulbs. Negative values give a bulb on the other side of the plane
  3. Sharpness. When zero, the bulb is like a sphere that just touches the plane. When positive, there is a crossover point. When negative the bulb simply bulges out of the plane like a pimple
  4. Fatness. Higher values make the top end of the bulb fatter
The Strophoid is like an infinite plane with a bulb sticking out of it.
When the Size and Sharpness parameters are equal, the surface is given the special name "right strophoid".
When the Size parameter is 3 times the Sharpness, the surface is given the special name "trisectrix of Maclaurin".

strophoid2d

"strophoid2d", <0.02, -8, 0.8, 0.3, 1, 0, 0>

Parameters (7):

  1. Field Strength
  2. Size of bulb. Larger values give larger bulbs. Negative values give a bulb on the other side of the plane
  3. Sharpness. When zero, the bulb is like a sphere that just touches the plane. When positive, there is a crossover point. When negative the bulb simply bulges out of the plane like a pimple
  4. Fatness. Higher values make the top end of the bulb fatter
  5. SOR Switch
  6. SOR Offset
  7. SOR Angle
The 2d strophoid curve can be extruded in the Z direction or rotated about various axes by using the SOR parameters.

glob

"glob", <1>
sign -1

Parameters (1):

  1. Field Strength
This Glob function is rotated through z*90 so that it looks like a falling drip of thick liquid.
One part of this surface would actually go off to infinity if it were not restricted by the contained_by shape. It's possible to select just the teardrop part by choosing the contained_by shape appropriately.

pillow

"pillow", <1>

Parameters (1):

  1. Field Strength
This "pillow" surface apparently featured on the back cover of the 1992 Siggraph proceedings.

crossed_trough

"crossed_trough", <0.05>
sign -1

Parameters (1):

  1. Field Strength

witch_of_agnesi

"witch_of_agnesi", <0.09, 0.02>
sign -1

Parameters (2):

  1. Field Strength
  2. Controls the width of the spike. The height of the spike is always about 1 unit
The "Witch of Agnesi" surface looks something like a witches hat.

witch_of_agnesi2d

"witch_of_agnesi2d", <0.2, 0.2, 0.08, 1, 0, 0>
sign -1

Parameters (6):

  1. Field Strength
  2. Controls the size of the spike
  3. Controls the height of the spike
  4. SOR Switch
  5. SOR Offset
  6. SOR Angle
The 2d version of the Witch of Agnesi curve can be extruded in the Z direction or rotated about various axes by use of the SOR parameters.
To produce a surface that matches the 3d version, the height parameter needs to be the square of the size parameter.

mitre

"mitre", <0.5>
sign -1

Parameters (1):

  1. Field Strength
The "Mitre" surface looks a bit like an ellipsoid which has been nipped at each end with a pair of sharp nosed pliers.

heart

"heart", <0.001>
sign -1

Parameters (1):

  1. Field Strength
A surface for Valentine's Day.

torus2

"torus2", <1, 0.4, 0.07>
sign -1

Parameters (3):

  1. Field Strength
  2. Major radius
  3. Minor radius
This is different from the standard torus function which just has the major and minor radii as parameters.

nodal_cubic

"nodal_cubic", <0.005>
sign -1

Parameters (1):

  1. Field Strength
The Nodal Cubic is something like what you'd get if you were to extrude the Stophid2D curve along the X axis and then lean it over.

umbrella

"umbrella", <0.2>
sign -1

Parameters (1):

  1. Field Strength

enneper

"enneper", <0.1>
sign -1

Parameters (1):

  1. Field Strength

heteromf

"heteromf", <1.1, 2.05, 15, 0.26, 0.01>

Parameters (3):

  1. H
  2. lacunarity
  3. octaves
  4. offset
  5. T
This is the Hetero Multifractal surface used on its own.
But this function is mainly intended for use as pigment function or for modifying other surfaces.

hex_x

#declare Hex_X = function {"hex_x", <1>}

function {Hex_X(x,y,z) - threshold }

Parameters (1):

  1. No effect (but the syntax of MegaPOV requires at least one parameter)
This is a grid of hexagonal cylinders stretching along the z-axis. The fatness is controlled by the threshold value. When this value equals 0.8660254 or cos(30) the sides will touch, because this is the distance between centers.
Adding "sign -1" will inverse the function and create a honey-comb structure.
This function is also useful as pigment function.

hex_y

#declare Hex_Y = function {"hex_y", <1>}

function {Hex_Y(x,y,z) - 0.07 }

Parameters (1):

  1. No effect (but the syntax of MegaPOV requires at least one parameter)
This is function forms a lattice of infinite boxes stretching along the z-axis. The fatness is controlled by the threshold value.
These boxes are rotated 60 degrees around centers, which are 0.8660254 or cos(30) away from each other.
Adding "sign -1" will inverse the function and create an object sliced by the lattice structure.
This function is also useful as pigment function.
Previous |  Overview |  General | 
Syntax |  Use-functions |  Substitution |  Combining |  Noise3d |  Displacement

Last update : 28 Jan. 2001