Project 2: ArticulateAssigned: Monday, 26 October 1998
Due: Monday, 9 November 1998<
Artifact: Friday, 13 November 1998
In this project you will use VRML (Virtual Reality Modeling Language) to create and animate a character of your own design. You will become familiar with 3D hierarchical modeling, transformations, and some basic keyframe animation. After you are finished, we can create a `virtual classroom' accessible through the web, filled with everybody's characters.
What is a Hierarchical Model?
A hierarchical model is a way of grouping together shapes and attributes to form a complex object. Parts of the object are defined in relationship to each other as opposed to their position in some absolute coordinate system. Think of each object as a tree, with nodes decreasing in complexity as you move from root to leaf. Each node can be treated as a single object, so that when you modify a node you end up modifying all its children together. Hierarchical modeling is a very common way to structure 3D scenes and objects, and is found in many other contexts.
The VRML Language
VRML makes hierarchal modeling a breeze. The types you work with are called nodes. There are Shape nodes, Attribute nodes, Group nodes and many others. Overall, VRML is a pretty easy language to learn and use, there are some excellent manuals available in the lab, as well as loads of resources on the web. Be aware as you are exploring that we will be using VRML 2.0, also known as "moving worlds," which is quite different from VRML 1.0. Stay away from VRML 1.0 tutorials; they will probably just confuse you. Some good tutorial and reference sites are:
The most comprehensive site with lots of links to tutorials, demos, and the VRML 2.0 specification
Some not-so difficult tutorials, also part of an extensive site
Notes from a VRML class given at the SIGGRAPH 96 conference
"An impartial, comprehensive, community resource for the dissemination of information relating to VRML." Their words, not ours.
- The language specification itself resides at http://www.vrml.org/Specifications/VRML2.0.old, but it can be reached via most of the sites listed above. Especially useful to you will be the chapters on Nodes and Fields and Events.
A recommended book is The VRML 2.0 Handbook written by Jed Hartman and Josie Wernecke. There are two copies of this book in the lab. Please do not take them home with you.
Not that you'll have any trouble finding cool VRML demos on the web, but just to start you off with some that we like:
- http://www.unitedmedia.com/comics/dilbert/vrml/ has 3D Dilbert comics.
- http://mars.jpl.nasa.gov/vrml/vrml.html has cool Mars stuff and you can fly on the Pathfinder trajectory around the solar system!
- Also, check out http://vrml.sgi.com/worlds/
First of all, you must come up with a character. This character must be composed solely of primitive shapes (Box, Cylinder, Cone, and Sphere), but use at least ten primitives and at least four levels of hierarchy. You must also use at least one each of the Translation, Rotation and Scale fields of the Transform node. Other than that, you have complete artistic freedom on this, so be creative! When creating your model, keep in mind that the units of measurement you use for size should correspond roughly to meters (1 meter = 3.28 feet = default radius for a VRML sphere).
Once you have all that done, you must create an animated sequence that begins when the user clicks on a part of your model. Make the first keyframe match the last keyframe so that the movement can smoothly repeat itself until the user clicks again.
You are required to complete two bells (or equivalent) from the list below:
Bells and WhistlesOne bell is worth two whistles. Before implementing any bells and whistles save your original file for reuse in project 4!
Use a texture map on all or part of your character.
Add a light source to illuminate your scene.
Use a more complex shape, like a point set, indexed line set, or indexed face set in your model.
Make another animated sequence your character can perform.
Better yet, give your character superpowers by doing something to adjust the whole scene (fog, viewpoint shifting), or making something appear and disappear at will when the user clicks on your character.
Allow for adjustable levels of detail. (Hint: check out the LOD node type.)
Define your entire character as a PROTO and add some adjustable parameters to your prototype so that you can create individual-looking instances of your character.
Give you character a recognizable way of expressing at least three moods (for example: happy, sad, and puzzled), and have it change it's mood periodically with no input from the user.
If in addition to mood cycling you have your character react differently to clicks (or collisions) depending on what mood they are in.
Make your character respond to collisions (this involves collision detection and some type of animated reaction)
Variable extra credit for anything else cool you can think up! Have fun!