3D Game & Interactive Design

Works created with Unity, Maya, Zbrush etc. designed to be interactive.

User testing

Recently I began user testing on my prototype. I have been able to sample a variety of ages and levels of VR experience. A few things have surfaced repeatedly:

  • “Climbing the tree” (moving upwards via gaze teleportation to each sphere up and around the tree root) causes more than half the people to experience a feeling of vertigo and anxiety about heights. Users literally feel like they could fall.
    • To address this I plan to insert visual “platforms” in the shape of tree fungus that allows users to feel they are standing on something as they teleport
  • Some people prefer to stand, while three people age 60+ who also experience balance problems in real life prefer to sit
    • I will revise the Protocol research document to indicate that people will be asked if they prefer to sit or stand
  • Switching to the Oculus platform means that during development I need to be mindful there is now a cord coming from the headset, which could cause issues if users are expected to continuously turn around (spiral pattern moving upwards)
  • Almost everyone responded positively to the music used in the scene.
    • I plan to add additional musical elements, like bells or chimes as users interact with the scene
  • Most people seemed confused by the method of gaze navigation; it had to be verbally explained to them
    • I plan to add an introductory level that demonstrates gaze navigation, and also add animated assets that guide the user by drawing their gaze to the appropriate area
  • Not everyone is comfortable enough with VR to even want to try it. People who are uncomfortable with “video games” or those who have motion sickness concerns will most likely choose not to participate.

Teleportation navigation

This week I continued to develop the gaze navigation system. I created an Emissive (glowing) material for each of the seven spheres and place them in an upwards spiral pattern around the tree root. Near the base of the roots you can see the VR Pawn Actor which has a long “cursor” attached. When the player moves their head and the cursor encounters one of the spheres, the player teleports to that location.

I updated the tree to a more realistic looking bark texture, and tweaked some of the lighting settings from last time. I also added the mushrooms.

After tweaking the lighting, I used the Build Lighting feature, and received the error that I needed to set a “Lightmass Importance Volume,” which I did after looking up a brief tutorial. As you can see below, there are thousands of light calculations going on, which tends to slow down your game frame rate.

By placing a Lightmass Importance Volume, you can control where Unreal Engine puts most of its energy when calculating static lights, which improves performance. Below you can see much fewer instances of calculations.

Documentation for developing for Oculus, Gear VR and plugins for Unreal Engine

Unreal Engine has a section in their Gear VR documentation on how to build cameras, set up functions for Gear VR touchpad, and the motion controller. While these are helpful, it would be great if there was more support for Gear VR built into Unreal instead of developers having to custom-build things. Also, be aware that sometimes Unreal’s documentation is not up to date, and you may need to cross-reference against Oculus’s Developer documentation as well.

Note: if you are developing for Oculus, especially for Gear VR, there are certain plugins that need to be turned on in order to get the Blueprints you need.

Oculus has a section in their documentation on Blueprints, and how to turn on the plugin. So far the documentation is a bit vague and sketchy, but I hope to continue deciphering it.

The Input Blueprint provides a control interface for Touch, Oculus remote, and the Gear VR Controller….Gear VR Controller clickpad events are reported in the Input Blueprint as thumbstick events.

What would be really helpful, would be an Input option to use the Gear VR touchpad or motion controller built into the Inputs/action mapping. So far that does not seem to be an option. If you can use the Action and Axis bindings in the Input section, it works across the entire game and all levels, instead of having to custom build a blueprint each time.

Inputs
Inputs

With over 5 million Gear VR headsets sold world-wide, further support within Unreal Engine is a real need for the developer community.

Blueprints for gaze teleportation

In this section, we added to our Blueprint, replacing the PrintScreen value with a function that allows us to move the VR_Pawn (player point of view) to the trigger capsule location when the VR_Pawn pointer overlaps the trigger capsule. In other words, when you look at something, you instantly teleport to it. Below is a pic of the player standing on top of the cauldron after gazing at it.

Teleport to cauldron

Below is an extreme close-up on the salamander – once the player gazed at it, the player was teleported directly to the trigger capsule surrounding the salamander.

Obviously the placement of the capsules need to be fine-tuned so the player doesn’t land so closely upon the object, but the basic interactions are now functional.

Here is the Blueprint that creates this action. Notice the Get Actor Location and Set Actor Location functions.

Blueprints for trigger actions

In this part of the Pluralsight tutorial “Making a VR Experience in Unreal Engine” we get into setting up a trigger capsule for our objects, then using Blueprints to create a PrintString when our gaze encounters the capsule surrounding the object.

Trigger Capsules
Trigger Capsules surrounding objects

We went into the Blueprint for the VR_Pawn and clicked on the Viewport tab at the top of the Blueprint to see the actual object in order to create a very long Cube that was parented to the camera. This allows us to touch or “Overlap” objects in the scene when the camera points at them.

VR Pawn Gaze
VR Pawn Gaze
Gaze misses trigger capsule
Gaze misses trigger capsule

When the gaze/pointer encounters the object, the PrintString prints the word “Hit” instead of “Miss”.

Next, we built the Blueprints to make the program print different words on the screen depending on which object it overlaps.

blueprint print screen
blueprint print screen

WAIT – there is a problem. When the gaze encounters the trigger, it prints the wrong description.

This is not the salamander!

I literally had my wires crossed. I corrected the PrintString outputs.

Corrected Blueprint
Corrected Blueprint

Now the Cauldron string is connected to the Cauldron trigger, same for salamander.

We have successfully demonstrated creating an event (PrintString) when the VR_Pawn camera pointer overlaps a Trigger Capsule.

Exploding tree

One of the main assets in my scene is a giant tree root. I modeled it in Maya and Zbrush, then imported it into Unreal, where it looks pretty good.

Tree in Unreal

The problem is, when I export the packaged file from Unreal to my phone to view in Gear RV, the tree explodes. Below is a screenshot from Gear VR. The salamander and other elements are OK, but the tree is whacked.

Thinking that the file was too big, I created a tree with fewer polys.

This one is 43MB, 321k triangles, apprx size 1455x2098x1424.

I packaged the file for VR, and still got an exploding tree.

I simplified the tree a bit more, leaving off any of the polypainted texture, and still got an exploding tree.

This one is 41MB, 430k trianglesize 762.1307×841.

My last ditch attempt will be to create an extremely simplified version in Maya and take it straight into Unreal Engine (skipping Zbrush) and see if it works.

Low poly tree

This low poly tree did work in the VR headset. It showed up black because it has not had any materials assigned to it.

low poly tree

I would like to find the “happy medium” of a tree that looks good, but does not explode.

Mushrooms

First, I began in Maya by creating a low-poly basic mushroom shape.

I then imported it into Zbrush and began shaping it with the Move tool, added some texture to it and polypainted it. I then saved that mushroom as a Tool (ZLTool) and used the Append button to add it as another mushroom into my scene on a sub-layer. I repeated this process to add a third mushroom and used the move tool to bend and shape them a bit so each was unique.

Lastly I used the polynormals tool to assist with UV unwrapping, exported the texture map (colors) and the normal map (bump), then exported the mushroom meshes back into Maya so I could re-wrap the texture and bump on them and export as an FBX to Unreal.

Mushrooms

Finishing salamander

I applied final polypainting and texturing of  the salamander in Zbrush and exported it as an OBJ to be brought into Maya.

Below is the happy little salamander in Maya. 🙂

I turned on Xray view to create a skeleton and position the bones correctly into the mesh.

Salamander with bones

The final mesh with skeleton was exported as an FBX to be brought into Unreal.

Modeling the Roots

I began modeling the tree roots in Maya. I began with a polygon primitive cube and began subdividing the bottom faces, extruding them downwards, and continuing to subdivide and extrude each new face in a branching method, using scaling and twisting/rotating at times to organically shape them. Here is a pic of the beginning, with Smoothing turned on. (I cannot get smoothing to work once it is exported as and FBX, even with Smoothing Groups turned on.)

Roots low poly
Roots low poly

Once I felt I had enough branching roots, I imported it into Zbrush, and began shaping it more organically with the move tool.

Zbrush-root
Zbrush-root

I continued to shape the roots by pulling with the Move tool and applying some texture with Clay Buildup and Clay Tubes tools.

Zbrush-root3
Zbrush-root3