3D Blobs - Duffer's Guide

You can find information about 2-dimensional blobs elsewhere in this site, but what really interests me is 3D blobs.
3D blobs are defined just the same as the 2D versions, except that the function for density at a given point in 3D space of (x,y,z) is:-

        ! x and y are the co-ordinate values given as input 

        LET distance = sqr ( x*x + y*y + z*z) !Calc distance from centre 
        IF distance > strength THEN 
          LET density = 0               !Outside max_r, density=0 
          LET fraction = (distance/strength) 
                                        !Convert distance to the 
                                        !range 0 to 1 
          LET density = (1-fraction^2) ^ 2 
                                        !calculate density function 

(Note the use of ^2 instead of ^4 in the final assignment statement).
We now have a definition of a whole surface. Let us assume that we have n blobs. For each of the blobs we have xn, yn, and zn which define the centre point of each blob, and sn which is the strength value. The surface is defined by the equation:-

 \   density (xi, yi, zi ,sn) = 1
i = 1

(sorry about the funny layout)

We cannot directly convert the equations to polygons for use in rendering a 3D object. It is known as an Implicit Surface. However, what we can do is sample the density function at various points and form an approximation to the model. In principle there is no reason why we cannot put any function we want into the polygoniser but blobs are the usual one. This is known as implicit surface polygonisation.

Implicit Surface Polygonisation

The approach examined here is the Marching Cubes algorithm, not because it is necessarily the fastest but because it is reliable and not too hard to code (hopefully!), and produces reasonable results - good enough for a graphics demo anyway. Most PC demos use this approach. The algorithm was reported independently by Wyvill and Wyvill, and Lorenson and Cline.
 Page maintained by Steven Tattersall
Pages hosted by Zetnet