Escalators in VR


Jason Jerald created virtual moving walkways (The Virtualator) for a Virtual Worlds assignment two years ago. I like the general idea of trying to increase the size of the virtual space as compared to the size of the real space available. I wanted to extend the virtualator idea to more arbitrary motion paths. The initial idea that I wanted to try out was to create a virtual escalator, much like the escalators you see in multi-level shopping malls.

Figure 1: A view of the escalator environment. It contains two up escalators, two down escalators, and two escalators roughly traveling along a horizontal sine wave.

How it's done: creating the escalators

There is a programmer-specifiable function that takes a parameter from 0.0 to 1.0 and returns a point in 3D. This 3D point specifies the location of an escalator step along the escalator's entire path. This allows the programmer to specify an arbitrary motion path for the escalator. The programmer can also set the speed of each escalator by specifying the amount of time it takes to traverse the escalator (end-to-end). In the future, it might be better to also be able to express this as an actual speed (e.g. the escalator moves at 2 m/sec), since that would make it easier to make escalators of different sizes that move at the same speed, without requiring you to compute the traversal time yourself. Different model files can also be used for each escalator.

I created the various models used in my environment in 3ds Max 7. The cubes strewn about the environment are there to give users a sense of how high they are.

How it's done: transportation via escalator

The basic idea is pretty simple: when the user walks onto an escalator step, the escalator carries the user along with it until the user reaches the top (or end) of the escalator. There were, however, a few issues that needed to be addressed.

Issues

Since I'm not tracking the feet (if only we had full-body tracking...), I use the head position to determine when the user has stepped onto an escalator. This is imprecise because the user can lean over and above the escalator and not technically be stepping on the escalator, but the program will not be able to tell the difference. However, in practice, using the head tracking information seems to work out alright.

Another potential problem with using the head position is that people are different heights. In general, this is not a problem because I can check if the user is above an escalator step by checking if the head position is within the step's local X and Y bounds, at any Z value. However, this becomes a problem if I have escalators on different floors of a room that take up the same X/Y space at different Z values. This requires that the values of Z be bounded as well, so I use a fairly large bound of about 3 meters above the escalator. This could, of course, be calibrated for each person relatively easily, but if you know the height of each virtual floor, you can use values based on that information.

You have to be careful with your VE design when you use escalators, especially when they are in arbitrary orientations or use arbitrary motion paths. In particular, if you have escalators layered on top of each other, you can run out of real space very quickly. For example, if you walk forward 6m (let's say your position in space is (0, 6, 0)) to the first escalator on the ground floor and step onto the escalator, and the escalator transports you 4m forward and 4m up in the virtual world, you are still located physically at (0, 6, 0), but your virtual location is (0, 10, 4). Now, if there is another escalator located directly above the first escalator, you have to physically walk back to the base of it, i.e. you must physically locomote to the real position (0, 2, 0), which now corresponds to the virtual location (0, 6, 4). If you do this one more time, your real position will be (0, -2, 0), and your virtual position will be (0, 6, 8). Eventually, you will run out of tracked space, so care must be taken when designing VEs with motion transport systems like escalators, since there is no longer a 1:1 mapping between the physical and virtual spaces (essentially, a mapping is being created between 3D virtual motion and 2D planar physical walking).

One other interesting question: what do you do when the user steps off the escalator before reaching the end of it? If there are no passive haptics restricting the user's motion, the user can step off the escalator at any time. Should the user be affected by gravity at that point and fall, or float gently to the ground? Or should the user float in the air? I am uncertain of the answers to these questions but it would be interesting to experiment.

More screenshots

Figure 2: A view from the base of the up escalator on the first level of the environment.

Figure 3: A view of the environment while on the first level up escalator.

Figure 4: The view at the beginning of the forward-moving sine wave motion platform "escalator."

Figure 5: A view of the environment while on the forward-moving sine wave motion platform "escalator."

Figure 6: The view while on the second-level down escalator.