Chakra Garden VR

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.

Blueprints for player view

Blueprints

Today I’m following a Pluralsight tutorial on creating a first person camera and teleportation system using Blueprints in Unreal Engine. In this Blueprint, we are creating a way for the player to “teleport” from VR_Pawn to VR_Pawn1 when the number 1 key is pressed on the keyboard, and VR_Pawn2 when the number 2 key is pressed, allowing the player to move around the scene.

VR_Pawn controller

Here are the views as I click between the original, 1 and 2 keys. (Also, I updated the tree a bit from the previous image, but have not tested it in VR yet to see if the geometry “explodes.”)

Press 2

The Blueprint allowed me to successfully move around the scene using keyboard keys while experimenting in the VR Preview.

This was helpful for understanding the concept, but in order for it to work in the Gear VR headset, I will need to understand how to map inputs from Gear VR instead of keyboard keys.

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.

Adding sound & color

In Unreal Engine, I was able to tweak the BP_Sky_Sphere colors to give my scene a red glow. I then created a Material by importing a PNG image of the root chakra symbol, and applied that Material to a flattened Cylinder to form the disc that appears below the tree roots.

Unreal -  Root chakra
Unreal – Root chakra

For the music, I wanted to insert some placeholder music for now, so I selected this “Relaxing Traditional Music of West Java” that I converted to a WAV file from this Youtube video. Soon I hope to work with a local musician to use original gamalan (traditional Javanese) music instead. I watched this tutorial on how to insert background music.

Now when you hit Play, the background music plays in the scene.

Importing Assets into Unreal

Here is the root of the tree inserted into a scene in Unreal Engine, with the salamander imported and positioned as well.

Note: One of the first things I did was carefully create folders and subfolders for all the meshes I would be importing, because I think scenes and materials can get complicated quickly!

Here is another view, where you can see the mushrooms, and also a cauldron I modeled.