Hi Elliott, This is a great breakdown and very generous in sharing your process and insights, you came a long way from the vending machine days!
Are you planning on releasing the UE4 project to the public? Or only builds? I'd love to play around with it in the editor if possible!
We’ve talked with the wonderful people from Radial Games about the way they approach game production for VR platforms.
Radial Games currently has 5 full time employees. Most of us are in Vancouver Canada, but Andy currently lives in Los Angeles, and another employee lives in Seattle. We don’t have a centralized office right now and all just connect online.
Andy and I are both native to British Columbia, Canada. I started out in games working for Bioware in Edmonton, and worked for a couple other larger studios in a variety of art roles before joining with Andy as an indie dev.
Radial Games was started by Andy Moore. He initially focusing on browser based games, such as Steambirds but then went on to making PC games like Monster Loves you with Dejobaan games, And Rockets Rockets Rockets.
I (Lindsay Jorgensen) joined Andy in 2014. He was looking for someone that complemented his skillset, and it turned out that we have pretty similar values and work together pretty effectively.
We teamed up with Northway Games who are old friends of Andy’s to make Fantastic Contraption for a variety of VR platforms.
Fantastic Contraption has been successful enough that we’ve been able to take on some additional employees each of whom are incredible in their own right.
I think we initially found VR so interesting in that there was so much unexplored potential. Pretty much a brand new medium to explore. 6dof controllers with the ability to move around a room is a huge shift in how to make games.
All the rules were basically out the window and there wasn’t anything to compare to as a right or wrong way to do things. I find that very compelling, and still think there’s so much that needs to be figured out for making great VR games.
With VR projects, it is incredibly important to get something up and running to look at because so much initial intuition as to what and how things will work is wrong.
It is super important to get something that you can put your hands on and try at some level because there have been so many cases where the second you stand and try what you’ve planned only to be faced with it totally not working like you imagined.
A lot of times thought a better way to do what you were trying for will become more obvious once you try a couple things.
Prototypes can usually get off the ground pretty quickly.
We use Unity and when we have a solid chunk of time together Andy and I can get things cobbled together pretty quick. Depending on what we’re trying to prove out it can be pretty rough or not very interactive, but seeing it in engine is invaluable.
Even as we progress in making a full game in production it feels like many components are little prototypes in and of themselves and we’re very keen on having toggles to enable or disable features until they are in an actual useable form.
While we’re getting a bit better VR intuition as we try more things, the best way to vet an idea is to get it basically functional as fast as possible. We’ve been getting better at figuring out how to generalize our technology so that we can more effectively pivot and get a good initial implementation for things. While not perfect for everything, there are some great script packages available for getting started like which I think has maintained the set of scripts Valve initially released.
Taking Fantastic Contraption as an example, it was really important for the levels to be able to be constructed very quickly and easily as we knew that we would need to iterate a bunch and we had a very short timeline in which to complete the project.
The original Fantastic Contraption was a Flash browser game with very simple geometric primitives used to create the levels. I used this as inspiration, and while not trivial to implement in 3d, I think it was a successful approach for this project.
It very much let the level designer create and test levels almost instantly, and then I could go and use the shapes to decorate and give the levels an interesting look.
For a future project we’re developing, the environment is much more fixed, so there a lot of other interesting considerations, such as what kind of things to place and how to meet user expectations and not break immersion.
Basically in VR if you put something in that looks like the user should be able to interact with it, you have to make that thing intractable or risk breaking the experience. For us at least, the feeling of actually being immersed in the experience presented is one of the most important things.
For our games I’m more a fan of using fixed spaces as opposed to free roaming motion and teleportation. While requiring playspace to actually move around, I find it much more interesting and a really fun use of the technology.
It does present a challenge though if you need to resize playspaces, and not restrict some users unfairly. With Contraption we left the space quite as open as possible with as few static obstructions as possible which led to some cool solutions like fitting another world inside a helmet. Providing different use modes also helps widen the potential audience as some people prefer a mode like we added after the initial release which allows you to use the space more as if a table in front of you, rather than a stage that you stand on.
We also try and be aware of accessibility by making the game playable with a single controller, and having shortcuts and functionality to do things without having to move.
For the most part we’ve kept the animations quite simple. Fantastic Contraption added some more fully animated characters later on, but for the most part we’ve done things programmatically.
I’ve written a Tween system that allows me to add simple animations to objects with some variables and randomness somewhat akin to settings a particle system would provide.
It’s a bit much at first glance, but it’s getting pretty stable.
I have it public here but I need to get some documentation on how to use it written at some point before I see many people having much success with it.
There are other scripts we use to have characters focus on things in the scene such as the player or what the player is using. This is actually really effective in ‘acknowledging’ the player in the place which makes one feel a lot more like they are experiencing something real.
What is the fastest and the most efficient way to create a beautiful and neat looking animation for VR?
Being able to freely mix systems like Unity’s Mechanim animation trees, tween libraries like GoTween which are great from a scripting level, the tween system I made which works well at an in Editor level, and a bunch of custom scripting all need to work with each other as needed. ‘Animation’ needs to tie in a lot to the player and how they interact with the world. Adding reactions to material for when the user grabs or touches or hits, or sometimes just looks at something are all important for weaving the illusion of a real place.
Being able to work a flexible and efficient system of hooking all those things up and making them function in a satisfying fashion can be pretty tricky.
As an example I’m quite proud of the effect I accomplished when you try and throw the pink goal ball. It ‘stretches’ out and bounces back in place variable upon how hard you throw it. It’s really just playing a tween according to some mapping on a curve I set up on a script, but the result is really very satisfying.
How would you suggest approaching art for VR projects?
I’m very technically minded and tend to be sometimes overly frugal on art specifications. VR can be quite intimidating because there’s no real way to limit a user within the playspace.
My tendency is to spend spend spend when it comes to beveling on any surface the player can get very near, and as such, plan your surfaces carefully with that in mind.
Respect real world proportions on familiar objects.
Cut as many corners as possible on anything in the background.
I’m a big fan of doing wild and improper things with lighting calculations, so get into shader coding and use Unity’s standard shader, or the Lab renderer or whatever as a starting point, but add your own twist to them.
Should we craft more realistic spaces?
I don’t think ‘photorealism’ is necessarily a goal I at least have any desire to strive for. One of the great things about VR is the ability to send the user to an impossible and amazing place. I would strive for a sense of convincing the user they are in a ‘real’ place no matter how stylized and fantastic, but that has a lot more to do with implementing interesting interactions and allowing the player to connect with the world around them.
Low poly approach
One thing that keeps people from getting sick in VR is to maintain a minimum 90fps framerate. And that’s rendered twice as you need to render for each eye. There are a lot of hardware and software improvements that have come along even in the last year or two since VR became a real ‘thing’ but even then we’re going to see hardware pushing for increases in resolution and FOV which are going to be pushing the demands on graphics even further. Beyond that, depending on your project it may be necessary to render more cameras for things like a spectator camera to show on an external monitor what is going on in game, or for Mixed Reality filming which may require rendering out the view even more times.
All in all, the demands of VR pretty much require some heavily optimized graphics.
Keeping all that in mind as an artist you really need to sell what you’re showing to a player, so going too ‘low poly’ in the wrong places can really fail. For Fantastic Contraption most everything is really really basic geometry because when we started I had no idea on what our target hardware even looked like, and with us ending up in some situations needing to render so many different views at once, it really saved us. For PSVR we were actually able to hit 120fps fairly easily on the graphics side,and it was more a need to handle cases where heavy physics calculations were hanging us up.
For what we’ve been working on next, my approach involves keeping distant objects a lot more simple and stylized while spending vertices on areas of high visual importance.
What way can you distribute modern VR games?
Steam and the Oculus store, and now I think the Microsoft App store are I think the main distributer portals for Desktop VR games. PSVR is of course through Sony, and I’m sure there are more and more avenues for sale coming along as new headsets are introduced.
Putting a game up is fairly easy and I know at least Steam now is open and anyone could put up their content with only a little work. Finding recognition and marketing is another question entirely.
I don’t think that relying on a single store is a good bet. Get the best most fun part of your project in front of someone from Valve, Oculus, Sony, HTC, Microsoft, Google, whoever. Andy’s way better at that kind of people interaction, so I can’t say how to do so, but if you’ve really got something cool working in VR, there’s a lot of people interested in helping you get eyes on your project.
The Mixed Reality trailer for Fantastic Contraption was really well put together by Kert Gardner.
He has a bunch of blog posts on a few of the VR game trailers he’s made and each is impressive in it’s own right and contain a variety of great tips on how to present your game in a compelling fashion.