I've been developing with Improbable's SpatialOS since the beginning of 2016. Being the first developer to use the platform for Virtual Reality, I've seen SpatialOS change a lot and had a chance to help Improbable shape the on-boarding process, documentation and design of the platform. Originally, I designed and developed the experience known as MetaWorld but since the beginning of 2017, I shifted my focus to a project that was more realistic given the state of SpatialOS, Community Garden. Recently, people have been asking me about my experiences with Virtual Reality development on SpatialOS. Even though Community Garden is currently available on Steam Early Access, VR development on SpatialOS isn't easy so I decided to create a short write up about the main problems I've faced.
For those who develop VR games, we all know that making VR games requires a lot of play testing since the medium is so new. If you are developing a VR title for SpatialOS, it will probably be a multiplayer game. Having multiple people test in VR requires multiple computers. Unfortunately, there is no way to host a local instance of SpatialOS that can be shared between multiple computers. You must upload your project to the cloud, start a new deployment and start the client from the Improbable web launcher. This process can take 10-15 minutes depending on your internet connection which really slows down development. I found myself spending a lot of time waiting for builds to be sent to the cloud only to find I missed something. I would then have to make my change and wait again. I ended up needing to batch changes to maximize my time spend uploading.
Update: A member of the Improbable staff contacted me to inform me of the following guide that was made available for v12 of SpatialOS. I'm looking forward to testing this out once I upgrade to that version. Check out the guide here.
Compatibility with VR Libraries
The way SpatialOS handles entities doesn't play well with many existing VR frameworks. An entity, this includes the player game object, is streamed to the client after the scene loads. Other entities are enabled and disabled depending on the player's location. You will need to change your framework to handle this since many of them are built with the assumption that scenes are somewhat static and the player objects loaded with the scene.
Too many new versions
I started using SpatialOS at version 3 in early 2016. Since then there has been 9 new versions. That's a new version every 2 months or so. Some versions required complete rewrites of existing code (one update required me to port my scala code to C#). If Improbable supported these older versions, then this might not be a big deal but unfortunately this is not the case. At most Improbable will support 2 versions behind the current version. This means you will be force to upgrade every 6 months. For a small team like the one building Community Garden (which currently is myself and my friend part time) this can seriously limit progress.
Always behind on Unity Version
Unity is evolving very quickly. Each new version provides big improvements and new features that help improve VR performance. Also, plugins like Nvidia VRWorks require the latest version of Unity to work. Unfortunately, using SpatialOS means you won't be able to take advantage of those newer things. SpatialOS is often a major release or 2 behind Unity. This can also be problematic if you are thinking about using an asset from the Unity Asset store. If the asset requires a newer version of Unity then SpatialOS supports, you won't be able to use it.
Yes, SpatialOS is technically in Beta but the amount of bugs or inconsistencies makes working with it pretty challenging. I'm basing this on version 9 of SpatialOS so the newer versions (versions 10, 11, 12 at the time of writing this blog) may be better. The issues I've encountered range from errors when running spatial build to unexpected behavior when using the SpatialOS API. Simple bugs are normally fixed quickly but some are more difficult to prove and may take a long to get a fix. Even critical, show stopping bugs might take months to fix. When I was building MetaWorld, this often made any sort of progress impossible. With Community Garden, I still face many issues that sometimes take weeks to figure out.
Difficulty with Precise Interactions
VR requires very precise manipulation of the objects in the game world to create a fun experience. Picking up objects, throwing them and using them to interact with other objects is expected from any VR title. SpatialOS doesn't handle these type of interactions very well. Collision detection is finicky, collisions between fast moving objects causes problems and using the VR controllers to manipulate an object's position is not straight forward. If you plan to use an existing framework like VRTK or NewtonVR then you will need to make changes to source code significantly to work with SpatialOS.
Improbable Not Focusing on VR anymore (Bonus)
I'm hoping this will change in the future but Improbable's focus isn't on VR (or so I was informed) like it was in 2016. The company has decided to shift marketing focus to "Virtual Worlds" rather than "Virtual Reality". I'm not sure why the change since the potential for VR could be huge but this will make developing for VR very difficult. New versions of SpatialOS won't be tested for VR compatibility and the improvements required to create a platform that is easy to use with VR might not be addressed.
Even with all this I still believe that SpatialOS can be huge for VR. I will continue to work towards vast scale with Community Garden in hopes to build a place for players of the VR community to come back to over and over again. A place that feels alive and full of possibilities. If you have a Vive or a Rift you can try Community Garden now right Here . I'm always looking for feeback.