Procedural is an adjective applying to curves and surfaces which are defined implicitly by geometric requirements. A curve or surface is not procedural if it is defined by an explicit formula: for example, B-spline curves and surfaces, straight lines, circles, spheres, and planes are not procedural. Procedural curves and surfaces may arise when modeling operations are performed on other geometric elements: for example, when two surfaces are intersected or a curve is offset.
Defining Things Without Formulas
Counting whole numbers and subdividing things allows people to conceptualize most numbers easily. But some numbers, like the square root of two, cannot be obtained this way. The question is: how do you define it then? One way to define the square root of two would be as the length of a diagonal of a square with side length one. This definition is superior to its approximations: 1.4, 1.41, 1.414 ... because the procedural definition can be used to make arbitrarily accurate approximations, while individual approximations each have a fixed inaccuracy to them.
Some Parametric Geometry
The simplest parametric surfaces and curves to represent and operate upon are those which have explicit formulas. For example, some simple formulas and what they describe are listed below.
Where Procedural Geometry Arises
A problem results from simple operations like
- intersecting surfaces
- offsetting surfaces
- blending edges
- sweeping edges
which quickly go out of the realm of geometry that can be described by an explicit parametric formula. For example, we cannot find a parametric formula for the curve obtained by intersecting the wiggle and cone described in the previous section, because
does not have a closed form solution. However, numerically stable methods exist for finding intersections between surfaces: so we can define curves like the one above as intersections between two surfaces, and evaluate them by calculating points where the surfaces intersect. You could approximate this curve by a NURBS curve, but this limits the precision that you are dealing with. If multiple operations are performed on an approximation like this, replacing procedural geometry with approximate NURBS geometry at each step, "round off" errors would build up. In contrast, if this curve is defined as an intersection of two surfaces, we can perform whatever subsequent operations we want, without introducing this source of inaccuracy.
All procedural curves are intcurves, but not all intcurves are procedural. The type of int_cur underlying the intcurve determines whether it is procedural or not. If the underlying int_cur is an exact_int_cur, then the curve is a B-spline and it is not procedural. All other classes of int_curs are procedural. To show the versatility of procedural curves, some of the more commonly used procedural int_cur classes are listed in the table below.
|par_int_cur||The 3-dimensional image of a parameter space curve|
|int_int_cur||The intersection of two surfaces|
|law_int_cur||A curve defined by a user-defined function|
|off_int_cur||The intersection of two surfaces offset from two given surfaces|
|offset_int_cur||The offset of another curve|
|off_surf_int_cur||The offset of a curve lying on a surface along the surface normal|
|para_silh_int_cur||A parallel-view silhouette curve|
|persp_silh_int_cur||A perspective-view silhouette curve|
|proj_int_cur||The perpendicular projection of a curve onto a surface|
|spring_int_cur||A spring curve, which is a curve along the edge of a blend surface|
All procedural surfaces are splines, but not all splines are procedural. The type of spl_sur underlying the spline determines whether it is procedural or not. If the underlying spl_sur is an exact_spl_sur, then the surface is a B-spline and it is not procedural. All other classes of spl_surs are procedural. To show the versatility of procedural surfaces, some of the most frequently used procedural spl_sur classes are listed in the table below.
|blend_spl_sur||A blend surface|
|ruled_spl_sur||A ruled surface|
|sum_spl_sur||A sum surface|
|law_spl_sur||A surface defined by a user-defined function|
|off_spl_sur||The offset of another surface|
|rot_spl_sur||A surface of revolution|
|skin_spl_sur||A skinned surface|
|loft_spl_sur||A lofted surface|
|net_spl_sur||A net surface|
|sweep_spl_sur||A swept surface|