top of page

Virtual Worlds VR

Virtual Worlds is a VR action/adventure game created for a study I did on VR sickness and immersion.

The game’s themes and mechanics take inspiration from ‘The Legend of Zelda: Breath of the Wild’ and other titles from the Zelda series.

The focus of Virtual Worlds was to determine what makes VR games immersive and how that level of immersion can be improved. It also aimed to identify methods for reducing VR sickness.

T
his was achieved through the use of multiple visual effects, locomotion systems, and mechanics designed to reduce VR sickness and enhance the level of immersion felt by the player.

Below you can find a video showcasing some of the games mechanics and more information on the projects development.

Engine:

  • Unreal Engine


Language:

  • C++ / Blueprints


Role:

  • Game Design

  • Code

  • Art/Animation

Virtual Worlds Screenshot.PNG

Mechanics Demo

image_2024-02-06_145027612.png

Playthrough

Visual Effects & VR Sickness

Dynamic Dots.png

Dot Effect - Post-Process Visual Effect

One of the challenges faced during development was to create a VR experience that gave the user freedom of movement without inducing VR sickness. Various studies were referenced and a number of visual effects designed to reduced the effects of VR sickness were developed.

One such effect is the 'Dot Effect', which is present in the videos above.

The dot effect was designed to add artificial motion to a user’s peripheral vision to counteract the virtual motion of the environment when moving.

When the user moves forwards in a virtual world, the environment moves backwards. This optical flow makes object in a user’s peripheral appear to be moving outwards away from the centre of vision. This leads our brains to assume motion in the desired forward direction, this is called vection.

The user’s vestibular system contradicts this perception of motion because the user isn’t actually moving. This creates VR sickness.

To remove this vection, dots are placed in the users peripheral. These dots move at double the velocity of the player. The dots move at velocity V while the environment is perceived to move at velocity -V. The result is that the motion of the environment and dots in the user’s peripheral cancel out.

VR Locomotion

Virtual Worlds aimed to create an immersive experience for players. Therefore the game's locomotion systems make no use of teleportation, as this was discovered to create a disconnect between a player and the virtual environment.

Instead the game makes use of analogue and arm swing locomotion. These methods of movement combined with the designed visual effects (Dot Effect/Dynamic FOV), created a locomotion system that gave the player freedom of movement with reduced sickness.

Dynamic Vignette.png

Dynamic FOV - Post-Process Visual Effect

Mechanics

Cut apples.PNG

Procedural Mesh - Apples

Glider Collision.png

Paraglider mesh/collision  Positioning

Virtual Worlds has a number of mechanics designed to take advantage of the VR platforms interactivity. Taking inspiration from Zelda: Breath of the Wild, Virtual Worlds has climbing, paragliding and sword mechanics that make use of one-to-one motion.

Climbing:

Using the player's hands as pivot points for world transform offsets, a climbing mechanic was set up that allows the player grab and pull their virtual avatar up and over objects realistically.

Sword and procedural mesh slices:

Making use of Unreal Engine's procedural meshes, slice-able meshes were created that could be cut by a sword when held by the player and swung above a variable velocity threshold. Using the position and normal of the sword, the appropriate angle and position of the slice could be determined.

Paragliding:

Players are able to raise both arms and paraglide from heights, also allowing them to tilt their arms to turn while gliding.

Paragliding presented a new challenge when determining the appropriate offset for controller tilt turning motion.

 

The first step was to calculate the centre of both of the player’s hands. This was as simple as adding together both hand’s positions and dividing the result by two. The paraglider was set to always remain in this centre position so that it followed the average position of both hands. After calculating the hand’s centre, the box collision centre was needed (the box collision that detected if both hands were raised). The magnitude of the distance between those two points created a scalar value that could be used later to offset the player to add turning.

Fun Gliding Maths!

The equation for working out the turning velocity was:

  • V1 = box collision centre.

  • V2 = hands centre.

  • V2-V1 = distance between two points (V3).

  • √ (V3x ² + V3y ² +V3z ²) = magnitude (V4).

  • (V4) = Turning Velocity Scalar.

The turning velocity scalar was then used in this equation to add turning to the gliding:

  • V1 = box collision centre.

  • V2 = hands centre.

  • V3 = Turning Velocity Scalar.

  • V4 = Glide Direction (Forward Vector).

  • ---

  • V2-V1 = distance between two points (V4).

  • √ (V4x ² + V4y ² +V4z ²) = magnitude (V5).

  • (V4)/(V5) = Normalised distance (V6).

  • V6 * (V4*V3) = Position Offset (V7).

Joseph Calabro © 2024

bottom of page