Saturday, September 26, 2015

Big update for Titans of Space on Gear VR!

A new version of Titans of Space is now on Oculus Store for the Gear VR:

No more compromises: full stereoscopic 3D is back, running at a smooth 60 FPS!

For those that weren't aware, since its release Titans of Space on Gear VR has always been rendered monoscopically, so both eyes are effectively seeing the same thing.   Basically an interactive 360 video with headtracking.   I did add an optional hybrid 2D/3D mode where only the cockpit could be shown in 3D, but performance of this was borderline, and subject to a bit of choppiness and tearing here and there.  Not ideal, and not something I would be excited to show to anyone, and I know many users felt the same!

So what's changed?  Why is Titans of Space now suddenly able to pull off full stereo 3D at a solid 60 FPS?  Several factors came into play:

  1. Oculus has been doing a stellar job with their Mobile SDK.  They, in combination with Unity, have introduced optimizations that have increased the time available for the CPU to do its work.
  2. Although Titans of Space Gear VR is now using Unity 5, I'm not enabling the checkbox for native VR functionality that comes with Unity (yet).  I'm using the Mobile SDK 0.6.1 that is intended for Unity 4.... with Unity 5.   Seems to have worked out great, and hopefully doesn't backfire later on.  Reason for doing this is because at least up through Unity 5.2.0p1, the native VR functionality still seemed to be underperforming, but it's possible that might have changed recently.  I also couldn't stay on Unity 4.6.x because I use a single Unity 5 project for both PC and mobile versions of Titans of Space.
  3. When the Gear VR innovator edition was first released, Samsung and/or Oculus had put strict limits on the CPU and GPU levels that a developer could choose to target.   For example, Titans of Space was running at CPU1/GPU3.  Max level for each is currently 3.   So GPU running at full speed, CPU running at reduced speed.   At the time, CPU2/GPU3 and CPU3/CPU3 were not valid combinations and trying to set those levels would be considered invalid and thus introduce chaos into the CPU/GPU clock speeds as it reverts to default throttling logic set up by Samsung for normal mobile phone usage.   Sometime in the last few months, those limits were removed.
  4. When Gear VR innovator edition was first released, changing the CPU/GPU levels at runtime resulted in a one-frame flicker as it resets the VR rendering state, which means that the levels had to be selected at load time (or during a fade out, etc), and remain that way.   Sometime in the last few months, this also changed -- the levels could be changed at will without any discernible impact on what the player sees.  This gives rise to the ability to dynamically change the levels at runtime based on what's going on in the app.
Monoscopic rendering is still an option but it's not the default -- this uses the least amount of CPU. And, to address the persistent performance issue for those with the Snapdragon Note 4 & Android 5.0.1 / 5.1, I raised the CPU level further for that configuration to compensate.

The bottom line is, a tiny bit more app optimization + SDK improvements + Unity updates + higher CPU clock level limits was what I needed to make 60 FPS stereo 3D work.   Huge sigh of relief on my part!   

...Until I remembered that higher CPU levels means the device warms up faster!   Which isn't great considering Titans of Space encourages users to take their time to look around and read about things.  Worse still, the tour is linear in nature (well, it has branches depending on the tour length you choose, but it's still basically linear).   So if the device happens to overheat in the middle of the tour, users may not bother trying to catch the rest of it once the device cools down.  Those that have stayed for the whole tour know that there's more than just the Solar System, and many users tend to think it's almost over when they get to Pluto.

My solution to this was to simply remember where the player was last time and give them the option to resume the tour.   It's an obvious feature that should have been implemented a long time ago (even without thermal issues), except for the fact that it's more complicated than it looks.   The tour involves objects moving around, objects changing scale, music changes, flight paths, info text, tweens and animations, and the state of tour at stop Z depends on everything that happened before that between tour stops A through Z.   I ended up having the app fade out and automatically (and very quickly) proceed from the beginning of the tour to where the user last left off.  A number of race conditions and other issues were exposed in doing this, and those were all very interesting to troubleshoot and fix. :-)

Users also have the option to toggle monoscopic rendering (to go back to the way it was before the update) which will be more efficient with CPU usage.

Anyway, beyond that, Titans of Space for Gear VR now has parity with the recent v1.8 update for the desktop version -- updates for Pluto, Ceres, info text for many planets and moons, a "smooth movement" option, and easier to read text.


Thursday, August 27, 2015

Titans of Space [Classic] released, works with Oculus Runtime 0.7

Titans of Space is over 2 years old. I've spent a lot of the spare time across 6% of my life on this thing! Yikes! I feel very fortunate that it has seen a lot of downloads across several platforms, and I remain encouraged to push ahead for stronger market penetration and add as much value as I can to it.

So, in this long journey to figure out how to leverage my passion for VR development and using it alone to put food on the table, I've decided the best course of action is to re-brand the existing Titans of Space experience as "Titans of Space [Classic]". More than just a re-name, it's got a bunch of small improvements, new Pluto and Ceres stuff, and overall polish to get it ready for consumer VR. A full list of changes can be found here or inside the program itself.

For those without a VR headset, or with kids that are too young for a VR headset, the "Monitor version" has also been completely brought up to date.

Oculus Share submission is pending approval, Oculus Store (on Gear VR) is pending approval, and I'll update the Cardboard version soon. Until it's up on Share, please feel free to download the update directly from

Titans of Space [Classic] represents the last feature update that I make available for free before I release the full version (actual name TBD). I'm aiming for the end of the year, but we'll see how that goes. The full version will have a lot of huge new features and content. It will be available for desktop VR first, and some of that will trickle down to the Mobile Edition afterward.


Tuesday, March 24, 2015

"Mars Is A Real Place" has been released!

I'm happy to announce that I'm sending a new VR experience out into the wild, and this time I'm charging a small amount for it.  Despite the relatively simple screenshots and premise, I'm hopeful that the few people that take a chance on it will enjoy it.  It's definitely not for everyone, but like all my VR demos and experiences, I tend to build what I would love to see for myself.

Mars Is A Real Place is a short and musicsl slideshow of stereoscopic 3D landscapes, and it is available for three VR platforms right out of the gate:

  • Oculus Rift DK2 (via
  • Samsung Gear VR (via Oculus Store)
  • Google Cardboard (via Google Play, might be a couple hours before it shows up)

(I just had to take a step back and reflect on how amazing it is that there are at least three VR platforms, let alone one!)

Anyway, this experience is virtually the same on all three platforms, but with extra care taken to round out the user experience on the more robust platforms.   I'm sure it goes without saying that the better your VR device, the better the user experience is ultimately going to be. On the off-chance that this sells more than a handful of copies, I'll share the results of simultaneously releasing this on multiple platforms.

If you happen to pick up the DK2 or Cardboard version and run into any problems, don't hesitate to reach out to me at support (at) drashvr (dot) com with feedback, and to get a refund for DK2 purchases. (Cardboard users can simply use the Refund button at the top of the app's store listing.)  The Gear VR one shouldn't have any issues as there's currently only one device to target. :)

This experience's official site can be found at

Friday, February 27, 2015

The Narration Add-On is here! (Cardboard first, other platforms to follow)

When I first released Titans of Space in the middle of 2013 (wow... time flies), one of the top requests I started getting ever since was for a voiceover / narration of some kind.   At first I figured this would be no problem, but it's a pretty big job to get the script written, and then record the voiceover for all of it.  Not only that, but setting the right tone and covering fresh topics is a challenge.

Eventually, I connected with Michael McArdle, who is a regular member of the VR community and always has incredibly insightful things to say about everything VR.   He works within the education sector and is passionate about getting VR into schools and education in general.  It was great to meet him at Oculus Connect #1.  Months of work followed, Michael with his scriptwriting and voiceover recordings, and then integrating it into the existing experience in a way that flows naturally and adds to the core experience rather than clashing with it.   We also worked on getting subtitles together for the whole thing (English only for now).

So, I'm very proud to announce that the Narration Add-on has finally arrived, although for now it's only available here on one platform, Google Cardboard.   As soon as the Gear VR pay store opens up, this add-on will make its way over there, and I will be working on a way to bring it to the full desktop experience in the meantime.   To that end, I have launched a Steam Greenlight campaign in order to easily enable multiple add-ons, sequels, and so on on a platform that will be hopefully painless for players to use.   Also, who knows what GDC will bring re: Valve's headset.   If that turns out to be significant competition for the Oculus Rift, then I will of course bring Titans of Space and other experiences to that platform when possible.

Thank you Michael!  To anyone that happens to try the new Narration add-on, please let him know what you think on Twitter (@MikeMan444).

Titans of Space for Cardboard - Lessons Learned

Warning: long post ahead!

Well, this has been very interesting.

After a good long while of ignoring Cardboard as a legitimate platform, I finally took the time to dig into it.  I've been receiving many emails over the last year asking if there will be an Android/Dive/Cardboard version of Titans of Space, so I'm recognizing there is some degree of demand for this.

It's probably a lot easier now than it used to be to put together a Cardboard app built with Unity since there is now a sufficiently robust Cardboard SDK for Unity.  I appreciate the to-the-point simplicity it offers, which made things easy to test.  Google's developer console is a pleasure to use as well, with its professional Alpha/Beta/Production staging capabilities.  Also, Android is apparently *everywhere*, so I'm actually completely intimidated by the idea that I'm releasing an app that will potentially be seen by so many people.

I'm still not sure how I'll monetize all this VR stuff just yet.  Titans of Space has always been free and will continue to be on all platforms, but its sequels and add-ons will not be free.  However, most of those are still a ways off so I'm experimenting with some simple text advertisements / sponsorships in the loading screen and the end screen after the tour.  Nothing too major, but it's a start.

Now that Titans of Space has been ported for the Cardboard platform, it gives me great pleasure to see it featured in Google's Cardboard apps collection.  I consider this a huge win given the size of the userbase.

Here's what I learned and observed while porting Titans of Space to Cardboard:

1) Many phones used with Cardboard are quite forgiving of framerate.  In this case, I tested with a Nexus 5 phone.  It looks like an RGB display to me, so in a Cardboard-compatible headset it feels like it could be DK1 with a much narrower FOV.  Without the low-persistence display found in DK2/Gear VR, it's very blurry when quickly looking around.  However, since my framerate was varying between 30 and 60 FPS (depending on whether it was throttling clock speeds), the Nexus 5 display somewhat covers up most of the sub-60 FPS judder.  Easy breezy.  There's still a tremendous benefit to keeping a solid 60 FPS for a fluid experience, but at least it's not the end of the world when it's not.

2) Because Cardboard works with a ton of different Android devices, each with different display characteristics, it can be a challenge to account for both the black blacks of OLED displays and the dim gray backlight of other displays.  The starfield in Titans of Space can look completely different on one device versus another.  It's not bad either way, but I can imagine that this may complicate art and gameplay tuning for some apps out there.

3) The standard Google Cardboard viewer has tiny lenses and a low FOV.  For an experience like Titans of Space, this is unfortunate as so much of the experience is about looking around your environment.  It's much harder to notice things in the peripheral vision so that you know to look there.  It will be interesting to see what kind of reviews I get.   Browsing through the reviews of other apps is incredibly amusing and maddening, and I get the sense that there are many players out there that are happy to assign 1-star ratings for just about anything.  The upside is that there are many Cardboard-compatible headsets out there with larger lenses and a more comfortable faciaL interface.  Some even have straps!

4) Speaking of straps, since the standard Google Cardboard and many of its variants do not have straps, this changes things.  The player will have to hold the headset up with one hand, and if the player isn't used to holding up their arm this way, it can result in a shaky view and a tired arm for longer experiences.  The shaky view can be a little bit of an immersion breaker sometimes.   The overall player experience will vary quite drastically depending on the combination of device and headset they choose to use.

5) I'm unaware of any VR-enabled launcher out there for Cardboard, so we cannot rely on the user to be wearing the headset when the app starts.  So, it turns out that when your app starts head-tracking, it's important to immediately render a visible floor under the player and not just have an empty blackness down there.  If the player has set their phone down on their desk or lap, they won't see anything except maybe the vertical divider down the middle, and may cause some players to immediately give up thinking something is wrong with the app.

6) Like Gear VR, Cardboard VR is mobile, which means that care must be taken in orienting the player's forward direction.  Gear VR automatically reorients the view when putting the headset on and IMO this is a wonderful and unappreciated feature, and I would like Cardboard apps to do something similar.  Various Android devices means varied sensor capabilities, and of course drift is still not a completely solved problem when relying only on internal sensors.  Drift is very much an issue for seated cockpit experiences like Titans of Space, although I suspect this will be addressed in a future Cardboard SDK release.  Other than headtracking, Cardboard-compatible headsets only have one input -- the magnet switch.  If I were making an experience that was completely hands-free from start to finish, then sure, the magnet switch is a perfect way for the user to reset the view.  In this case, I need that input as a way of selecting buttons, so I took a cue from Google's Cardboard demo app, and decided to make tilting on the side result in reorienting the player's forward direction.  For headsets without straps this is super easy to do at any time.  For those with straps, I hope they have a controller or a swivel chair...

7) Without a VR launcher, you need an actual app icon now. I probably should hire a graphic artist at some point!

8) Unlike Gear VR, there isn't going to be a carefully controlled clock-speed for devices running a Cardboard app, and as a result the app's framerate can vary wildly depending on how the phone wants to throttle heavy demands on its processors.  Other than requesting the wake-lock permission to prevent the CPU from going to sleep, the best I could do is warn players in the description than they're going to need a powerful modern phone for best results.  The upside is that you can cram somewhat more complex scenes into a Cardboard, though it will heat up and run the framerate into the ground, depending on the device of course.  For short and sweet VR experiences, this free-for-all approach still makes things easier.

9) Out of the box, I didn't see an implementation of a neck model in the Cardboard SDK for Unity.  I might be blind, but I wasn't feeling my view move around with a virtual neck in-game.  I had to implement this myself by hacking the SDK a bit.  I hope Google includes this in a future SDK update as that's a critical feature in my eyes.  EDIT: I've been informed that simply having a CardboardHead as the parent of the StereoController and setting up the local position of the StereoController as the neck-to-eye offset should do the trick without having to rip into the SDK.

10) Multi-threaded rendering currently does not work with the Cardboard SDK.  I've been using Unity 4.6.1p5 if that makes any difference to someone reading this.

11) In the Gear VR version, I am making full-use of a 24-bit depth buffer.  The Cardboard SDK is hardcoded to use a 16-bit depth buffer, so I needed to change that in the SDK code.

12) Uploading an app larger than 50MB to Google Play requires splitting up the binary into two pieces.  Fortunately Unity makes this part easy.  Note that a while back, you could only download the first piece (< 50 MB) via Google Play, and your program has to download the rest from Google's servers.  I'm not 100% on this, but I think the requirement to manually download the expansion isn't necessary anymore, especially for the types of devices required to run a Cardboard app.

13) I finally opened up my old Dodocase viewer that I picked up at the Proto Awards last year, and found it to be a big improvement over the standard Google Cardboard viewer, mainly for two reasons:  The magnet switch is way easier to pull and therefore less of a strain to aim at something in VR while pulling the switch, and because it comes with a big black sticker to put where your forehead meets cardboard.   Seeing how these subtle differences had a big impact, I'm now quite curious about all the more robust headsets out there.   Note that there is a newer Dodocase viewer out now with capacitive touch for the switch!  Even so, this has nothing on Gear VR's superior touchpad and back button.

14) Headtracking latency is still pretty terrible on most devices.  However, I will admit that it's not as bad as I thought it would be on some of the newest phones out there.  It think it can be acceptable, especially for someone new to the idea of VR.

15) No Async Timewarp on Cardboard means that head-tracking loading screens are once again uncomfortable.  I needed to update my app to delay the start of VR mode until after the loading screen.

16) Access to a pay store is certainly a bonus!  See my next post for my first attempt at monetization.

So, working on a Cardboard port of a Gear VR title definitely highlights how different these two mobile VR platforms are.  I will admit that with the standard viewer and its low FOV, Cardboard can technically only barely be called VR, but now that there are a growing number of viewers with straps and larger lenses and FOV, I'm starting to warm up to calling it the "rowdy little brother of mobile VR", or something.

In any case, they both clearly have very different strengths, and their characteristics are evolving very rapidly.   Gear VR as a platform seems to me to be a fine piece of engineering and thoughtfulness, and is setting the bar and leading by example.   Cardboard as a platform feels like a raw and rapid expansion into an empty segment of the market, creating opportunity along the way.

Hope these observations were helpful, although it's probably all old news for the many Cardboard devs already out there.  This is basically my first time publishing something to an established mobile app store with millions of users.

Wish me luck!