UNREAL Project

It's really unreal, man. -Unknown

Nina Amenta, advisor
Danek Duvall, Summer '95 & code shredder/nuker
Tim Rowley, programmer & X zen master

No, I'm not sure exactly why it's called Unreal. We needed a ``snazzy, two-syllable name'' and this is the best we've come up with so far. Read more about the project, and mail me if you have a cool name, or a good phrase whose acronym is Unreal.

The basic idea behind the project is that photorealistically rendered objects, like what you'd see on a computer screen or in a glossy magazine such as Scientific American, look really horrible if you print them out or photocopy them.

Much better pictures are usually drawn by hand. But some objects are really complex, and so it would be nice to have a computer program that would take an object definition and produce a picture that looks hand drawn.

There are many complex issues involved with this. The two specific things we have tackled are edge detection and shading. The code for edge detection works, but is being rebuilt ground-up in such a way that produces more readable code than before and also that lends itself to better efficiency improvements. The current code distinguishes between the following edge types:

Boundary Edges
These edges are ``real edges''; i.e., places where the surface ends, such as the edges of a square. By default, these edges are drawn with hollow (or double) lines.
Horizon Edges (Silhouette Edges)
These are edges which are created when a surface disappears over the horizon, such as the circular boundary of a sphere. These edges are drawn as thick solid lines.
Interior Edges
These are all the edges in the picture that don't fit into any other category. By default, they are drawn as light solid lines, but in most pictures, they have been removed.
High Angle Edges
These are the edges lying between two faces which have a high angle between them. The angle is adjustable, and the lines are drawn by default the same as the horizon edges.
Intersection Edges
These are the edges which are created by surface intersection. By default, they are drawn as light dashed lines.
If you are at the Geometry Center and you should for some reason want to try the latest version of the program for yourself, just run geomview from the directory /u/dduvall/work/unreal2.0, and run the module Unreal that appears at the top of the Modules list. The interface should be fairly intuitive. Please note that ``the latest version'' of the program won't always work properly, if at all. A properly working, albeit very old version of the program can be found in /u/dduvall/work/styline. In either case, be careful on objects that have a lot of faces, since the program is very slow!

Shading is a much thornier problem, and right now we're mostly just talking about the different things we could do. We are looking at engravings of Albrecht Durer for ideas about how to go about shading. Our current thought is to create contours on the objects based upon distance from the light source. With this information in hand, the cross contours are filled in based upon the angle and distance from the light. So far, code has only been written to produce the light contours.

Some Pictures

Here is a catenoid. The boundary edges are obvious, and you can see both high-angle edges and a slight horizon edge where the surface disappears in the center.

Here is a dodecahedron. This is a good example of high-angle edges. In fact, it was the motivating surface to introduce such an edge.

Dodecahedron and sphere
Here is a good example of intersection edges. It is the dodecahedron intersecting a sphere.

Here is a seashell. A nice example of boundary, intersection, and horizon edges.

Here is an example of a surface gone wrong. For some reason, our program picks up spurious boundary edges on the torus. So does geomview, for that matter. We're not sure where the problem lies.

Boys' surface
Here is another surface which we're not getting quite right. Two boundary edges appear which seemingly shouldn't. But the intersection edges look good.

Below are some images showing the light contours. In the future, we're planning on drawing the cross-contours instead and varying their thickness/intensity based upon angle and distance from the light.

Torus with
Mushroom with contours
bottle with contours

[Brown CS] [People] [Tim Rowley]