[comp.graphics] How do I handle this kind of model??

milo@ndmath.UUCP (Greg Corson) (05/18/88)

I have a rather odd type of 3D model I need to represent and I'm
taking suggestions on how to do it.  The objects being modeled
are not so strange...but the type of calculations I need to do on
them may be a little odd.

I need to model various types of smooth surfaces such as rolling
hills, car bodies, human faces etc.  The pictures produced from
the models need to be hidden surface but WILL NOT be shaded in
any of the usual ways.  The shading will be very simple...if an
object is defined as "blue" it will be the same shade of blue 
all over.  The odd part is that the rendering routine will need 
to look for sudden changes in the objects contours (or places
where one object overlaps itself or another of the same color)
and draw "feature lines" at those places.  For example, if you
were modeling a piece of metal with a very gentle bend, only the
outer edges would be drawn in as black feature lines....however
if you had a piece of metal with a sharp 45 degree bend in it
there would be a black like at the location of the bend.

The idea is to produce pictures that resemble hand-drawn "cell"
animation but are actually based on 3D models.  There will be
no light source-based shading AT ALL.  I just need a way of
modeling surfaces where it is easy to locate the edges of objects
and locations where the shape of the object changes suddenly.

Some type of Z buffering system is a good possibility, but if
anyone can think of a simpler way....

If you have any ideas, please try to write me at my USENET
mailbox...I don't get to read comp.graphics often enough to avoid
missing things.

It would be nice if the modeling technique could actually model
surfaces with some kind of 3D spline/patch based system.  Although
a technique which uses polygons would be ok too.

Thanks!!!

Greg Corson
19141 Summers Drive
South Bend, IN 46637
(219) 277-5306 (weekdays till 6 PM eastern)
{pur-ee,rutgers,uunet}!iuvax!ndmath!milo

allen@granite.dec.com (Allen Akin) (05/21/88)

In article <1131@ndmath.UUCP> milo@ndmath.UUCP (Greg Corson) writes:
>
>I need to model various types of smooth surfaces such as rolling
>hills, car bodies, human faces etc...
>       ... The odd part is that the rendering routine will need 
>to look for sudden changes in the objects contours (or places
>where one object overlaps itself or another of the same color)
>and draw "feature lines" at those places.  For example, if you
>were modeling a piece of metal with a very gentle bend, only the
>outer edges would be drawn in as black feature lines....however
>if you had a piece of metal with a sharp 45 degree bend in it
>there would be a black like at the location of the bend.

(I've replied to Greg directly, but I'm posting this to see if
anyone has a better solution.)


I had a similar problem once.  Maybe the technique I used will be of
help.

I rendered the scene, buffering up a scanline at a time.  For each
pixel I recorded both the intensity (with or without shading, as you
prefer) and the surface normal.  In a postpass I then computed the
angles between adjacent normals (in both the X and Y directions) and
changed the pixel color if the normals diverged by more than a
threshold.  I also changed the pixel color if the distance from the eye
to the surface changed more than a threshold, even if the normals were
roughly the same.

The results were fairly pleasing, and didn't require much threshold
tuning.  Sharp object edges are displayed correctly, and false edges
(such as those generated by interpenetrating objects) are handled
automatically.

I used a ray tracer because I had analytically-defined objects and
extremely tight constraints on memory.  (In fact, I had so little memory
available that I couldn't tessellate the objects I was rendering.)  You
can use a similar approach with a scanline rendering algorithm, or
with Z buffering if you also have a place to store the normals for the
postpass.  If you use a ray tracer, be careful about your numerical
methods; if the intersection points aren't fairly accurate, you get
jagged edges.

Allen