Notes from Oculus Connect 2: VR Games Lessons Learned

Oculus Connect 2 is the second annual conference where engineers, developers, designers and artists come together to learn about building VR games and applications for various platforms and also share their project works at the developers lounge.

This year, Oculus Connect was held at Loews Hotel at Hollywood, Los Angeles and there were around 1500 participants from all over the world.

The trending news all over the Internet is about Samsung’s $99 Gear VR and the Oculus Medium. Apart from all these really exciting takeaways there are plenty of other lessons learned from the leaders of the industry. One of which is ‘Game Unrules’ by Jason Rubin, Head of Studios, Oculus.

I started developing VR games this year and I’m still learning as I develop. One of the most challenging tasks in developing a VR game is to get the GUI right. Creating a GUI with buttons and sliders and other elements is quite easy using Unity’s Canvas but getting them to work on Oculus’s screen is tricky because: Unity’s GUI elements respond only to your PC/Mac cursor and Oculus does not show your PC/Mac cursor. You can only aim through a distorted cursor that your game renders for Oculus which will result in faulty interaction. There are some solutions found online such as simulating a cursor in world-space or to aim using Ray-casting which is probably a better solution since it avoids the need for a joystick/keyboard.

Here are a few things learned from the past:

Targeting: This is relevant for Aim & Shoot games

Mistake: Different targets for each eye and a single point indicator.

Best Practice: Use concentric circles or holographic tubes as indicators around the target

Controls: Another interaction design element that is very important in handling VR games

Mistake: When players have to look down at the controller to see the buttons.

Best Practice: Provide an image/mock-up of the joystick controller explaining the controls and positions of each key. 3D model of the joystick is another option

Heads Up Displays:

Mistake: This works well for games that aren’t VR. Using the same mechanics for a VR game doesn’t necessarily work. It is found that we do not use our peripheral vision as much as we do without a headmount display. So making use of the corners in the screen is a big mistake in VR.

Best Practice: Eg: during cool down shots, instead of indicating the progress in a HUD, use the aiming circles to indicate percentage or progress. Using bottom screen to display the mission objective.

hud

Learning Rate:

Mistake: Expecting the player to dive into the game and learn as they play.

Best Practice: Use time freeze to explain the functions and environment so that the player gets used to the VR world. Use trackers to highlight objects in the game so that the player looks in the direction that you want them to.

Attention:

Mistake: Forcing the player to a certain direction or object in the game space.

Best Practice: The player may not look at all the objects/elements in the virtual world and some of them are treated as background. To get the player’s attention, tie a game-play to the object that you want the players to see.

Voronoi fracture using Houdini

So, looks like I’m in love with Houdini, as I am spending a lot of effort on Houdini projects. I took up some tutorials on digital tutors and learnt the art of fracturing in Houdini.

Off the shelf tools are so handy to use if you want to create a scene with a simple breakable object but there’s a lot more for us to learn about the fracture dynamics building blocks.

untitled1

So I used a box geometry with wood material. The fracture parts are amde to looks long and sharp by adding a transform node after the fracture node. So the pieces are scaled along the y axis to look more realistic as like wooden shards.

Here’s the screenshot of my Box SOP network

Houdini file

The voronoi fracture points node is especially useful to create desired fracture points input from the scatter node.

For the rendering I have used environment light and a sampling quality of 20.

How to add texture in Houdini

One of my school assignments was to model sea shells in Houdini and then apply realistic textures to them. So I hadn’t decided on the procedure to go ahead with (Not that I knew how to do it then). I searched around the internet a lot for weeks trying to find out how to import an image to a material in Houdini. There were many tutorials on building your own custom Shaders (which I will be covering in my next post) but I had a tough time finding how to import an image.

I poked around Houdini and found out it wasn’t all that bad. So all you need is:

1. Image editor (Photoshop preferably) to create a .TIFF image.

2. Houdini (I have the apprentice version)

You can download my files from here

1. To create the .tiff file

Step 1:

In Photoshop create a new canvas. I have used 7×5 inch document size.

Step 2:

Set your background color to the preferred shell color and foreground color to white. I have used #eab963. Next step we will render clouds.

Step 3:

Go to Filters->Render->Clouds (Use the default settings). You should get something like this.

Step4:

Go to Filter->Distort->Wave and use these settings

Step 5: Save the image as .tiff file.

We are going to use this .tiff file format to import into Houdini’s Mplay and then export the image as as .rat file (Random Access Texture) to be used as a material.

2. To do that

Step 1:

Open Houdini and under the Render menu choose Mplay->Load Disk Files. Load your .tiff file (the one that you created using photoshop)

Step 2:

Choose File->Save Frame As.

Under the File format choose Random Access Texture and save your file as a .rat file.

3. To apply the texture to your model 

Step 1: Open your .hip file with the desired model or you can use my seashell file.

This is how my geometry looks like in object level.

Step 2:

Add a UV Texture node from the tab menu and connect to the last node of your model.

Houdini reads image coordinates as UV coordinates like xyz for the geometries. So the UV Texture node assigns UV coordinates for your model so that you can apply the .rat file as your material.

Step 4:

Add a Primitive sop to the UV Texture. This node converts each polygon into a separate primitive.

Under the Primitive Parameters go to the Attributes tab and upload the .rat file that we created earlier.

Step 5:

Now go to the SHOP network and create a decal node. This node is used to apply texture on a model.

On the parameters section of the decal node, import the .rat file as your material and copy this parameter.

Go to the OGL Tab and paste copied reference parameter value.

Step 6:

Now drag the decal material to the model

Choose ->  Assign Surface Shader SHOP to Material for *your model*

This is the final output!

Add other geometries and try applying new textures, even existing images from the internet.