Monday, November 28, 2016

Titans of Space 2.0 gets a comfort mode

Despite the positive reactions Titans of Space has received since the initial version was released over three years ago, there has been one nagging problem throughout:  it uses artificial locomotion to sweep players along from planet to planet, accelerating them at a blistering pace along curved paths while rotating their frame of reference, performing lateral moves, and so on.  Even though I made an effort to be gentle with the player, it "breaks all the rules".

As far as I can tell, Titans of Space has gotten away with this for so long is because many players apparently enjoy the experience in spite of these motion issues, and because developers (me) are the worst playtesters, and -- here's the main reason -- because I could never come up with a good-enough solution to this that didn't sacrifice the essence of the experience, though I definitely made a few attempts along the way.

From the very beginning, the experience had an option for low vs high intensity routes, defaulting to low intensity.   Some time later, I added an option for smooth movement vs abrupt takeoffs.   Right after Oculus Connect #1, I added an option for a "player-locked skybox", which I found to be pretty trippy in practice even though no one really liked it or knew to look for it in the options.  Besides, it detracts from the creative vision that the player be moving through space, so it's not something I actively pushed onto players.   And finally, I added a "protective frame" around the cockpit that by default shows up when moving to provide a much more obvious frame of reference, and then hides away after coming to a stop to avoid obstructing the player's view.  But none of that was good enough.

I finally found some time in the last few months to really tackle this problem through intense prototyping and external playtesting, and now I'm very proud to say that I consider motion sickness a solved problem in Titans of Space 2.0 (for PC VR only at the moment).

I'd like to share some of the little gotchas and breakthroughs that added up to a complete solution:

At the beginning of the experience, the player is now asked whether or not they are sensitive to motion.  When answering yes, the new comfort mode kicks in and the basic idea is that each flight between planets is broken up into multiple segments of constant velocity.  Meaning, the player will move along these segments in a straight line at a fixed speed, while reproducing the experience of the original curved paths as much as possible, with each segment separated by a fade out and fade in of some kind.   However, when this was implemented in a straightforward way, there ended up being many interesting problems:

  1. Simply breaking up a 30 second flight into 4 or 5 segments made each segment feel WAY too fast and frantic, and was arguably far more disorienting than the original curved flight trajectory.
  2. Constant velocity is a very comfortable form of motion, but not if it involves lateral movement or moving backward.  Unfortunately, the original curved paths involved lateral and backward movement in order to point the player in the right direction.
  3. Reorienting the player for each segment in order to see the action can be disorienting if the view changed too much.
  4. Conversely, when the view doesn't change enough between segments, the player can feel that the fade out and fade in was unnecessary, which leads to annoyance.   "Why does this keep blinking for no reason?"
  5. Related to #3 above, suddenly fading in with a giant Sun in view is a bit like being in a dark room and then turning on a flashlight into one's eyes - very jarring.
  6. Approaching a planet at a fixed speed and then cutting to simply being stationary in front of that planet creates an overwhelming feeling of impending collision, even if there is a slow fade out and fade in at the cut.   This can also feel like an unnecessary cut.
  7. Slow fade-ins took time away from the experience of the travel itself, while fast fade-ins were too jarring.
  8. Anxiety in not knowing when each segment is about to end, or how far there was to go to the next tour stop.
  9. Fading in to movement away from the last tour stop was sometimes disorienting as the fade-in itself obscured exactly how and in which direction the player left that tour stop.


Solving all these issues without resorting to the disappointing fallback of simply teleporting from one tour stop to the next required doing the following:

  1. Constant velocity movement is slowed WAY DOWN relative to the original curved trajectories.   Doing so gives the player enough time to absorb what's happening in given segment and allows for lower fixed speeds.  Amazingly, even if the movement is slowed down twice as much, the perception of time passing tends to be about the same as the original continuous curved trajectories.
  2. The player's cockpit always faces the direction of movement.  The exception to this is rising or falling (the cockpit doesn't pitch up or down for that), but there is always some sort of forward movement.  This produces a consistent direction of travel that is comfortable since it removes lateral and backward motion.
  3. Constant velocity travel no longer conforms exactly to the original flight paths.   I spent time creating detailed editing tools that gave more control over these paths and allowed me to easily gauge each segment's speed and duration at design-time.   As a result, many of the fast close approaches toward planets were removed, and consecutive segments that did not significantly change the player's view were consolidated, and some segments became disjointed instead of continuous.  In addition, many of the constant velocity paths were changed to start with a flyby of the planet they were just looking at, to give more context about where the player is going.
  4. There is a new and obvious progress indicator that appears during constant velocity travel, showing the player moving at a fixed speed with icons for each cut.  Playtesters absolutely loved this feature as it wiped away their anxiety.
  5. The cockpit remains visible during fade-outs between segments.   The allows the player's frame of reference to remain useful at a time when the player needs it the most.   This simple change was actually one of the biggest breakthroughs in achieving something comfortable. 
  6. The fade-out/fade-in mechanism was changed to an actual "blink" (like eyelids closing from the top and bottom), with the fade-out portion actually fading out at the same time.   The reason for the blink approach during the fade-out is to inform the player that a cut is about to happen, and to discourage the player from looking up where it is easy to be disoriented after a cut.  And the reason for the blink approach during the fade-in portion is to steadily reveal more and more of the field of view so that the new view (and new fixed speed) isn't jarring.  The fading fade-out was done in order to avoid *scaring* the player if they happened to be looking up and saw the fade out appear out of thin air above them.  The fade color is a solid dark gray instead of black in order to avoid annoying changes in brightness (something I learned from putting together the slideshow portion of 'Mars Is A Real Place'), and it is a solid color without any texture to avoid introducing vection.  However, it's still important that the player can sense that it's a small sphere around the cockpit so the sphere remains low poly with visible polygons along the edges.
  7. Fade out/fade ins ended up being the same speed.  I experimented with quick fade out to make the beginning of travel feel responsive, slow fade outs to avoid jarring cuts, quick fade ins when speeding up from one cut to the next, slow fade ins when slowing down.   However, playtest results informed me that the different fade in/out speeds felt chaotic and random.  


Other comfort-related changes include:

  1. The cockpit floor is no longer see-through when in comfort mode -- one player reported feeling like they were dangling in ferris wheel pod high up in the air and couldn't shake the anxiety from that.
  2. More than one player reported that a dizzying sensation of falling on one particular downward segment (even at a constant velocity), so that had to be slowed down.
  3. The motion sensitivity prompt in the beginning replaces the old prompt whether or not to use gaze-timer interaction ("Wait for Input" vs "Automatic").   Not only is gaze-timer interaction completely outdated now in PC VR, players that unknowingly choose gaze-timed interaction sometimes feel extremely disoriented when they accidentally start the cockpit moving, which leaves a sour taste in a player's mouth.
  4. The moving cloud bands of Jupiter are now paused while moving slowly near the planet.   I'm a seasoned VR user but even for me, moving slowly near a large rotating body like Jupiter with an easy way to cause vection issues.
  5. The overview of the Solar System toward the end involved pitching down about 90 degrees as you look down onto the orbits.  This produced another vection issue, solved by darkening the stars in the background during that rotation.

Overall, this was quite a learning experience, and these lessons learned will carry forward as the tour is extended and more content released in the next few updates,

3 comments:

  1. Drash also did a number of optimizations to make it run faster as well as other refactoring to make it easier to add more tours in the future and write my essay for me and go beyond our solar system. His talking about some of the challenges with getting DK2 demos working in this early stage is really surprising.

    ReplyDelete
  2. I really appreciate your efforts to develop high quality VR app. Especially, Titans of Space is the greatest space VR app I have ever seen with excellent cinematic approach to planets with information.

    ReplyDelete
  3. I think you got to take a quick glimpse at this iphone parental control software, to know all the latest information

    ReplyDelete