While gravity is an excellent way to add a sense of realism for your user and to control their movements to ease your polygonal needs, it can wreak havoc on viewpoint nodes. Gravity effects the current viewpoint node.
Unfortunately, when I say lower end machine I'm speaking of anything below a Pentium II.
If the user is always in control things are fine, but animating the viewpoint node can prove difficult, especially if the end user in using a lower end machine. Unfortunately, when I say lower end machine I'm speaking of anything below a Pentium II. This is because of errors in collision detection while the processor is trying to render the animation.
A flat area is generally fine but worlds with a lot of movement in the Z-axis develop problems. What happens is the viewpoint will literally fly through solid objects, even the ground plane. To compound this problem, I think the tension and bias settings used in VRML97 are set too loose to create an smooth effect. Thus, they do not allow tight turns, even with the addition of linear key-frame settings, although some benefit can be gained by adding 2 to 3 key-frames in a row set to linear to offset this.
My first experience in dealing with this came when I attempted to add a "tour" fly-through to the VRML section of National Geographic’s Silverbank feature. The world is the deck of the Spanish galleon Conception, which consists of 4 decks and 3 masts. The fly-through takes you down the left side of the galleon beginning on the foredeck. You move down to the main deck and proceed up to the middeck, then poopdeck. Once you reach the end of the galleon, you sweep over to the right and quickly return to the beginning point with the option of taking the "tour" again or returning to your own exploration.
Going down decks was fine but instead of flying up to the middeck, the viewpoint node would go through the rear wall and "fall" to the water, the ground plane, under the galleon. After the viewpoint went under the galleon it visibly collided with the underside of the galleon trying to get to the following key-frames on the deck. Once on the water, it is impossible to "walk" back onto the deck of the galleon. This did not show up as a problem on the faster Pentium II that I was developing with, but on Pentium mmx systems it always happened. The solution I finally accepted was to copy user actions. For the user to walk the decks, I created stairs within the avatars stepping range that they could climb up and down. I set many tightly packed key-frames around the deck level transitions for the viewpoint node to use the stairs. Once the animated viewpoint was set to stay at the height level of the avatar and using the stairs, the "tour" worked correctly. See the Silverbank Galleon VRML at National Geographic Online feature Silverbank.
My second run-in with this problem came during the development of the Return to Mars feature for National Geographic Online. I entered into a similar situation. In this piece, I wanted to let the user experience driving the Sojourner around the surface of Mars. To introduce the user to the enviroment, I decided to begin with a pulled-back view of the Pathfinder on Mars. From this view, the user can see some of the surrounding terrain and watch the Sojouner roll off the Pathfinder to begin exploring. After the sojourner is off the Pathfinder, the camera sweeps down in front of the Sojourner to give the user the sense that they are taking control.
I started by setting up a controlled platform (see Gravity and the viewpoint node) for the user to start at. From here, there is a start button for the user to push to start the Soujourner on its way. The user can not walk off the platform but the animation linked to the start button takes control of the viewpoint and forces it off the platform. In the original, the viewpoint would fall off the edge of the platform to the ground and chase alongside the Sojourner, finally overtaking it and moving in front. This is what happened on the Pentium II. On the Pentium mmx, the viewpoint flew straight through the surface of Mars.
Since the camera is meant to fly through the sky, there is no surface to follow like the ladders on the Galleon. So I made an invisible path. I created a slide for the camera to follow down to the ground, allowing it to dolly alongside the Sojourner. The slide ends with a low enough drop that the viewpoint does not go through the ground, but high enough that the user can not "walk" into it once they are driving around the surface.