Virtual Worlds VR
-Unreal Engine 4
-C++ / Blueprints
Virtual Worlds is a virtual reality (VR) action/adventure game designed for the Oculus Rift. The game’s themes and mechanics take inspiration from the game: ‘The Legend of Zelda: Breath of the Wild’ and other titles from the series. The focus of Virtual Worlds is to determine what makes VR games immersive and how that level of immersion can be improved. It also aims to address VR sickness.
This will be achieved through the use of a number of 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.
Visual Effects & VR Sickness
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 video 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.
Dot Effect - Post-Process Visual Effect
Virtual Worlds aims to create an immersive experience for players. Therefore the game's locomotion system makes 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), have created a locomotion system that gives the player freedom of movement with reduced sickness.
Dynamic FOV - Post-Process Visual Effect
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.
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 UE4'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 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 magnitude of the distance between those two points created a scalar value that could be used later to offset the player to add turning.
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).