
Incorporating diverse locomotion styles in virtual reality (VR) is crucial for creating an inclusive and accessible experience. By offering options such as teleportation, arm swinging, or free movement, VR developers can cater to different preferences, abilities, and comfort levels. People with mobility disabilities benefit from these options, as they can navigate VR environments effortlessly and without physical strain.
The availability of customizable settings further empowers users to optimize their VR experience based on their needs, reducing motion sickness and enhancing their sense of freedom and interaction in virtual worlds. Providing a diversity of locomotion styles creates more welcoming and enjoyable VR experiences for people with disabilities. It also fosters an inclusive virtual environment for all users.
There are many different styles of locomotion that are available in VR. For a list of styles and examples, refer to the Locomotion Vault. (Be aware the page has a lot of motion as it contains many active clips.)
Meta has a set of nine accessibility Virtual Reality Checks (VRC) to enhance accessibility in virtual reality (VR) experiences. Among these, VRC.Quest.Accessibility.8 states “Applications should support multiple locomotion styles when possible. This includes, but is not limited to, teleportation, free locomotion, and snap turning.”
While this VRC serves as a recommendation, it is strongly encouraged that all virtual reality applications incorporate these features. Although Meta’s VRC documentation provides the desired outcomes, it lacks specific implementation guidance.
Therefore, this article aims to provide insights into how developers can effectively implement multiple locomotion styles to improve the accessibility of their VR applications.
Potential Solutions for Locomotion Styles
Locomotion refers to the ways users can move around in a virtual environment. It can be done in different ways. Here are some common ways:
- Teleportation: This is a popular method for locomotion in VR as it helps reduce motion sickness. The user points to a location using the controller and then jumps to that location.
- Smooth locomotion: This is a continuous movement method where the user moves around in the VR environment using the controller’s thumb stick. However, it can cause motion sickness for some users.
- Snap turning: This is a technique that allows users to adjust their view within a virtual environment without physically turning their heads. Instead of physically rotating their bodies, users can simply press a button or interact with a control to instantly change their virtual orientation by a predefined angle, such as 30 or 45 degrees.
- Room-scale VR: This is where the user physically moves around in the real world and the move is replicated in the virtual reality environment. This method provides an immersive experience but requires enough space to move around.
- Hybrid methods: Some games or applications use a combination of the above methods, allowing the user to choose which method they prefer.
Virtual Reality Setup Guide
If you’re new to virtual reality development and want to dive into Unity, here are some resources to help. These guide you through learning about application programming interfaces (API) and setting up the development environment. Here are two useful software development kits (SDK) to get started.
- XR Integration Toolkit
- Installation of XR Interaction Toolkit: Official documentation by Unity
- Easy Unity VR Tutorial for Beginners: Unofficial documentation that is easier to follow.
- Oculus Integration Toolkit
- Get Started with Oculus in Unity: Official documentation by Meta.
How to Implement Multiple Locomotion Styles
The implementation process varies depending on the SDK you choose for building your virtual reality experience. This will guide you through the process using two specific SDKs: the XR Interaction Toolkit (XRIT) from Unity and the Oculus Integration Toolkit from Meta.
This guide uses First Hand to illustrate the steps. First Hand is an open-source project from Oculus Samples on GitHub from Meta.
To implement it on an existing project, download First Hand and follow these steps. Visit Equal Entry’s VRC8 – First Hand GitHub repository to see the fixed code. If you like to just try the experience, download Equal Entry’s and use SideQuest to load it into your Quest.
XR Interaction Toolkit (XRIT)

Here’s the description of First Hand from Meta’s page:
“First Hand is an official Hand Tracking demo built by Meta. Experience the magic of interacting with the virtual world directly with your hands. Use switches, levers, and virtual UIs as you solve puzzles to build robotic gloves, and then experience their superpowers.”
Steps for Locomotion (Snap Turning, Direct Motion, Teleportation)
Although it is designed to work without hand controllers, it also works with hand controllers. Follow the steps below to implement snap turning using this sample.
- Download First Hand on GitHub and open it in Unity Editor 2020.3.33f1.
- Make sure the “XR Interaction Toolkit” is imported into the project, along with the samples package “Starter Assets“.
- Select the GameObject “Player” and delete it.

- Search for “Complete XR origin setup” in the Project window. Drag and drop to add the prefab to the scene. Optional: Adjust the position of the object to your preference. Play and test the XR camera.

Snap Turning guide
- For Snap Turning, Select XR Origin > Pass “XR Origin” as a reference to the “System” field > Set “Turn Amount” by default it is set to “45” > Check the “Use Reference” checkbox for relevant input >Pass reference of “XRI Hand Name Locomotion/Turn,” which is in “Assets > Samples > XR Interaction Toolkit > “Toolkit Version” > Starter Assets.”

- Test the project and experiment with rotation by flicking the thumb stick left and right.Here is the XRIT code for Snap Turning as a reference
using UnityEngine.InputSystem; using UnityEngine.InputSystem.Controls; using UnityEngine.XR.Interaction.Toolkit.Inputs; namespace UnityEngine.XR.Interaction.Toolkit { /// <summary> /// A locomotion provider that allows the user to rotate their rig using a 2D axis input /// from an input system action. /// </summary> [AddComponentMenu("XR/Locomotion/Snap Turn Provider (Action-based)", 11)] [HelpURL(XRHelpURLConstants.k_ActionBasedSnapTurnProvider)] public class ActionBasedSnapTurnProvider : SnapTurnProviderBase { [SerializeField] [Tooltip("The Input System Action that will be used to read Snap Turn data from the left hand controller. Must be a Value Vector2 Control.")] InputActionProperty m_LeftHandSnapTurnAction; /// <summary> /// The Input System Action that Unity uses to read Snap Turn data sent from the left hand controller. Must be a <see cref="InputActionType.Value"/> <see cref="Vector2Control"/> Control. /// </summary> public InputActionProperty leftHandSnapTurnAction { get => m_LeftHandSnapTurnAction; set => SetInputActionProperty(ref m_LeftHandSnapTurnAction, value); } [SerializeField] [Tooltip("The Input System Action that will be used to read Snap Turn data from the right hand controller. Must be a Value Vector2 Control.")] InputActionProperty m_RightHandSnapTurnAction; /// <summary> /// The Input System Action that Unity uses to read Snap Turn data sent from the right hand controller. Must be a <see cref="InputActionType.Value"/> <see cref="Vector2Control"/> Control. /// </summary> public InputActionProperty rightHandSnapTurnAction { get => m_RightHandSnapTurnAction; set => SetInputActionProperty(ref m_RightHandSnapTurnAction, value); } /// <summary> /// See . /// </summary> protected void OnEnable() { m_LeftHandSnapTurnAction.EnableDirectAction(); m_RightHandSnapTurnAction.EnableDirectAction(); } /// <summary> /// See <see cref="MonoBehaviour"/>. /// </summary> protected void OnDisable() { m_LeftHandSnapTurnAction.DisableDirectAction(); m_RightHandSnapTurnAction.DisableDirectAction(); } /// <inheritdoc /> protected override Vector2 ReadInput() { var leftHandValue = m_LeftHandSnapTurnAction.action?.ReadValue<Vector2>() ?? Vector2.zero; var rightHandValue = m_RightHandSnapTurnAction.action?.ReadValue<Vector2>() ?? Vector2.zero; return leftHandValue + rightHandValue; } void SetInputActionProperty(ref InputActionProperty property, InputActionProperty value) { if (Application.isPlaying) property.DisableDirectAction(); property = value; if (Application.isPlaying && isActiveAndEnabled) property.EnableDirectAction(); } } }
Direct Motion guide
- For Direct Motion, make sure that the components of XR Origin — Locomotion System, Continuous Turn Provider, Dynamic Move Provider are added to the “XR Origin” with their respective properties..

- Test the project and try to move around the scene with direct motion using the left thumb stick.
Here is the XRIT code for Direct Motion as a reference
using Unity.XR.CoreUtils;
using UnityEngine.Assertions;
namespace UnityEngine.XR.Interaction.Toolkit.Samples.StarterAssets
{
/// <summary>
/// A version of action-based continuous movement that automatically controls the frame of reference that
/// determines the forward direction of movement based on user preference for each hand.
/// For example, can configure to use head relative movement for the left hand and controller relative movement for the right hand.
/// </summary>
public class DynamicMoveProvider : ActionBasedContinuousMoveProvider
{
/// <summary>
/// Defines which transform the XR Origin's movement direction is relative to.
/// </summary>
/// <seealso cref="leftHandMovementDirection"/>
/// <seealso cref="rightHandMovementDirection"/>
public enum MovementDirection
{
/// <summary>
/// Use the forward direction of the head (camera) as the forward direction of the XR Origin's movement.
/// </summary>
HeadRelative,
/// <summary>
/// Use the forward direction of the hand (controller) as the forward direction of the XR Origin's movement.
/// </summary>
HandRelative,
}
[Space, Header("Movement Direction")]
[SerializeField]
[Tooltip("Directs the XR Origin's movement when using the head-relative mode. If not set, will automatically find and use the XR Origin Camera.")]
Transform m_HeadTransform;
/// <summary>
/// Directs the XR Origin's movement when using the head-relative mode. If not set, will automatically find and use the XR Origin Camera.
/// </summary>
public Transform headTransform
{
get => m_HeadTransform;
set => m_HeadTransform = value;
}
[SerializeField]
[Tooltip("Directs the XR Origin's movement when using the hand-relative mode with the left hand.")]
Transform m_LeftControllerTransform;
/// <summary>
/// Directs the XR Origin's movement when using the hand-relative mode with the left hand.
/// </summary>
public Transform leftControllerTransform
{
get => m_LeftControllerTransform;
set => m_LeftControllerTransform = value;
}
[SerializeField]
[Tooltip("Directs the XR Origin's movement when using the hand-relative mode with the right hand.")]
Transform m_RightControllerTransform;
public Transform rightControllerTransform
{
get => m_RightControllerTransform;
set => m_RightControllerTransform = value;
}
[SerializeField]
[Tooltip("Whether to use the specified head transform or left controller transform to direct the XR Origin's movement for the left hand.")]
MovementDirection m_LeftHandMovementDirection;
/// <summary>
/// Whether to use the specified head transform or controller transform to direct the XR Origin's movement for the left hand.
/// </summary>
///
public MovementDirection leftHandMovementDirection
{
get => m_LeftHandMovementDirection;
set => m_LeftHandMovementDirection = value;
}
[SerializeField]
[Tooltip("Whether to use the specified head transform or right controller transform to direct the XR Origin's movement for the right hand.")]
MovementDirection m_RightHandMovementDirection;
/// <summary>
/// Whether to use the specified head transform or controller transform to direct the XR Origin's movement for the right hand.
/// </summary>
/// <seealso cref="MovementDirection"/>
public MovementDirection rightHandMovementDirection
{
get => m_RightHandMovementDirection;
set => m_RightHandMovementDirection = value;
}
Transform m_CombinedTransform;
Pose m_LeftMovementPose = Pose.identity;
Pose m_RightMovementPose = Pose.identity;
/// <inheritdoc />
protected override void Awake()
{
base.Awake();
m_CombinedTransform = new GameObject("[Dynamic Move Provider] Combined Forward Source").transform;
m_CombinedTransform.SetParent(transform, false);
m_CombinedTransform.localPosition = Vector3.zero;
m_CombinedTransform.localRotation = Quaternion.identity;
forwardSource = m_CombinedTransform;
}
/// <inheritdoc />
protected override Vector3 ComputeDesiredMove(Vector2 input)
{
// Don't need to do anything if the total input is zero.
// This is the same check as the base method.
if (input == Vector2.zero)
return Vector3.zero;
// Initialize the Head Transform if necessary, getting the Camera from XR Origin
if (m_HeadTransform == null)
{
var xrOrigin = system.xrOrigin;
if (xrOrigin != null)
{
var xrCamera = xrOrigin.Camera;
if (xrCamera != null)
m_HeadTransform = xrCamera.transform;
}
}
// Get the forward source for the left hand input
switch (m_LeftHandMovementDirection)
{
case MovementDirection.HeadRelative:
if (m_HeadTransform != null)
m_LeftMovementPose = m_HeadTransform.GetWorldPose();
break;
case MovementDirection.HandRelative:
if (m_LeftControllerTransform != null)
m_LeftMovementPose = m_LeftControllerTransform.GetWorldPose();
break;
default:
Assert.IsTrue(false, $"Unhandled {nameof(MovementDirection)}={m_LeftHandMovementDirection}");
break;
}
// Get the forward source for the right hand input
switch (m_RightHandMovementDirection)
{
case MovementDirection.HeadRelative:
if (m_HeadTransform != null)
m_RightMovementPose = m_HeadTransform.GetWorldPose();
break;
case MovementDirection.HandRelative:
if (m_RightControllerTransform != null)
m_RightMovementPose = m_RightControllerTransform.GetWorldPose();
break;
default:
Assert.IsTrue(false, $"Unhandled {nameof(MovementDirection)}={m_RightHandMovementDirection}");
break;
}
// Combine the two poses into the forward source based on the magnitude of input
var leftHandValue = leftHandMoveAction.action?.ReadValue() ?? Vector2.zero;
var rightHandValue = rightHandMoveAction.action?.ReadValue() ?? Vector2.zero;
var totalSqrMagnitude = leftHandValue.sqrMagnitude + rightHandValue.sqrMagnitude;
var leftHandBlend = 0.5f;
if (totalSqrMagnitude > Mathf.Epsilon)
leftHandBlend = leftHandValue.sqrMagnitude / totalSqrMagnitude;
var combinedPosition = Vector3.Lerp(m_RightMovementPose.position, m_LeftMovementPose.position, leftHandBlend);
var combinedRotation = Quaternion.Slerp(m_RightMovementPose.rotation, m_LeftMovementPose.rotation, leftHandBlend);
m_CombinedTransform.SetPositionAndRotation(combinedPosition, combinedRotation);
return base.ComputeDesiredMove(input);
}
}
}
Teleportation guide
- For Teleportation, Add the component “Teleportation Provider” to “XR Origin” > Pass “XR Origin” as a reference to the “System Field.”

- Search for “Teleport Anchor” in the Project window > Add the prefab to the scene.

- Duplicate the prefabs and place them around the scene. Set the name of the prefab as the assigned position and set the direction in which the camera will be facing after the teleportation.
- Test the teleportation mode by flicking the right hand thumb stick in the forward direction to aim and release the thumb stick to teleport.
Here is the XRIT code for Teleportation as a reference
using UnityEngine.Assertions;
namespace UnityEngine.XR.Interaction.Toolkit
{
/// <summary>
/// The <see cref="TeleportationProvider"/> is responsible for moving the XR Origin
/// to the desired location on the user's request.
/// </summary>
[AddComponentMenu("XR/Locomotion/Teleportation Provider", 11)]
[HelpURL(XRHelpURLConstants.k_TeleportationProvider)]
public class TeleportationProvider : LocomotionProvider
{
/// <summary>
/// The current teleportation request.
/// </summary>
protected TeleportRequest currentRequest { get; set; }
/// <summary>
/// Whether the current teleportation request is valid.
/// </summary>
protected bool validRequest { get; set; }
[SerializeField]
[Tooltip("The time (in seconds) to delay the teleportation once it is activated.")]
float m_DelayTime;
/// <summary>
/// The time (in seconds) to delay the teleportation once it is activated.
/// This delay can be used, for example, as time to set a tunneling vignette effect as a VR comfort option.
/// </summary>
public float delayTime
{
get => m_DelayTime;
set => m_DelayTime = value;
}
/// <summary>
/// This function will queue a teleportation request within the provider.
/// </summary>
///The teleportation request to queue.
/// Returns if successfully queued. Otherwise, returns .
public virtual bool QueueTeleportRequest(TeleportRequest teleportRequest)
{
currentRequest = teleportRequest;
validRequest = true;
return true;
}
bool m_HasExclusiveLocomotion;
float m_TimeStarted = -1f;
/// <inheritdoc />
protected override void Awake()
{
base.Awake();
if (system != null && m_DelayTime > 0f && m_DelayTime > system.timeout)
Debug.LogWarning($"Delay Time ({m_DelayTime}) is longer than the Locomotion System's Timeout ({system.timeout}).", this);
}
/// <summary>
/// See <see cref="MonoBehaviour"/>.
/// </summary>
protected virtual void Update()
{
if (!validRequest)
{
locomotionPhase = LocomotionPhase.Idle;
return;
}
if (!m_HasExclusiveLocomotion)
{
if (!BeginLocomotion())
return;
m_HasExclusiveLocomotion = true;
locomotionPhase = LocomotionPhase.Started;
m_TimeStarted = Time.time;
}
// Wait for configured Delay Time
if (m_DelayTime > 0f && Time.time - m_TimeStarted < m_DelayTime)
return;
locomotionPhase = LocomotionPhase.Moving;
var xrOrigin = system.xrOrigin;
if (xrOrigin != null)
{
switch (currentRequest.matchOrientation)
{
case MatchOrientation.WorldSpaceUp:
xrOrigin.MatchOriginUp(Vector3.up);
break;
case MatchOrientation.TargetUp:
xrOrigin.MatchOriginUp(currentRequest.destinationRotation * Vector3.up);
break;
case MatchOrientation.TargetUpAndForward:
xrOrigin.MatchOriginUpCameraForward(currentRequest.destinationRotation * Vector3.up, currentRequest.destinationRotation * Vector3.forward);
break;
case MatchOrientation.None:
// Change nothing. Maintain current origin rotation.
break;
default:
Assert.IsTrue(false, $"Unhandled {nameof(MatchOrientation)}={currentRequest.matchOrientation}.");
break;
}
var heightAdjustment = xrOrigin.Origin.transform.up * xrOrigin.CameraInOriginSpaceHeight;
var cameraDestination = currentRequest.destinationPosition + heightAdjustment;
xrOrigin.MoveCameraToWorldLocation(cameraDestination);
}
EndLocomotion();
m_HasExclusiveLocomotion = false;
validRequest = false;
locomotionPhase = LocomotionPhase.Done;
}
}
}
Oculus Integration Toolkit
Oculus Integration adds interactions like ray, poke, locomotion, and grab for controllers, hands, and controllers as hands. Each interaction is designed to be modular and work in simple and complex VR applications. The Oculus Interaction Toolkit also has features just for hands, including hand-specific interactions, pose and gesture detection, and debug visuals.
Steps for Oculus Integration Toolkit (Snap Turning and Direct Motion)
- Download First Hand on GitHub and open it in Unity Editor.

- Select “Player Rig” and “Add a component.”
- Select “OVRPlayerController”. It is inside Asset > Oculus > VR > Scripts > Util.

- Make sure that the required components (“Character Controller and “OVRPlayerController” script) are added to the “Player” with their respective properties.
- Test the project by moving move around the scene with direct motion using the left thumb stick and flicking the thumb stick to use snap turning.
Call to Action for Developers
To enhance accessibility in VR experiences, it’s important for developers to implement multiple locomotion styles. By offering options like teleportation, free locomotion, and snap turning, developers can accommodate users with different needs and preferences. Embracing these inclusive design principles not only promotes accessibility but also improves the overall user experience in virtual reality.
Additionally, be aware that users may not have access to one or both controllers. Therefore, developers may want to go beyond locomotion options and consider multiple ways to engage those methods.
Provide alternative input methods, such as gaze-based interactions or voice commands. These ensure that more people can fully participate and navigate within the virtual environment. Let’s create VR experiences that are welcoming, functional, and enjoyable for everyone.
Watch the Video Presentation
Transcript: Multiple Locomotion Styles in Virtual Reality for People with Disabilities - Shivam Sharma
SHIVAM SHARMA: So I work as an XR developer in research in India. I am also the co-founder of an XR based start-up, 6DOF Solutions, and under the XROS fellowship with XR Access and Equal Entry, I worked on Meta's VRC Quest 8. Which focuses on multiple locomotion styles in VR applications. So XR, that is extended reality, has great potential, and it can play a significant role in the accessibility space, by leveraging the power of augmented reality, virtual reality, and mixed reality, we can create an enhanced environment that can improve the quality of life of people with disabilities.
So for this, we are focusing on virtual reality. And how it can play a crucial role with its immersive and interactive nature and open new possibilities for accessibility, empowerment, and improved quality of life for individuals with diverse abilities. So virtual reality has great potential in creating accessible solutions. By leveraging this technology, developers and designers can address mobility challenges, which can empower the users and they can often improve their experiences.
For locomotion, that was my topic. Basically it refers to the ways in which users can move around in a virtual environment. So the popular use cases of locomotion are: Teleportation, smooth locomotion, and room scale movement. But let's discuss teleportation.
Suppose there's point A and point B and you want to move between them. Using teleportation, we can directly move from point A to point B using the point and teleport method. And it can be easily implemented. Next is smooth locomotion.
In this, if we are moving from point A to point B, we are moving smoothly and we are moving continuously. Like this. This is another method of locomotion. The last is room scale method.
In the last method, in this, we have to physically move. Suppose we are moving from point A to point B. We are physically moving in the real space in the physical world, and that is working in the virtual environment. In teleportation and smooth locomotion, we are not moving in the real world.
We are only moving in the virtual world. So these are the three basic locomotion techniques used in virtual reality. So by harnessing the power of this technology, we can create an inclusive space where individuals with mobility challenges can overcome barriers. And they can participate fully in various aspects of life.
So there are multiple advantages of VR locomotion. So we'll discuss three of them. First is remote work and collaboration. So VR collaboration tools can help people with disabilities to work remotely and participate in virtual meetings around the world, without the need of traveling to that space.
This reduces the need for physical travel and provides equal access to professional opportunities. So we are basically creating an equal ground for everyone with the help of virtual reality. Next is physical rehabilitation. Often in physical rehabilitation, we have to do mundane exercises daily, and we have a lack of motivation.
With the help of VR, there is gaming, game techniques, physical therapy exercises. We can create a motivational environment that can engage in rehabilitation activities in a fun and immersive manner. So they can be customized exercises that can cater to individual needs and abilities. Next is interactive accessibility training.
VR cannot only be useful for people with disabilities. It can also be useful for businesses and employees and service providers to better understand the needs of people with mobility disabilities. So they can understand what are their requirements and how it is to work with them, how they can create a better inclusive space for them to build virtual reality. We can create an interactive accessibility training module for demos.
Another point is accessible tourism and virtual travel. Our work can create various monuments, beautiful scenarios. So why should people with various disabilities restrict them from visiting those spaces? Using virtual reality, they can visit those spaces and foster a sense of exploration and cultural enrichment right at their place, right at their comfortable drawing room, with the help of virtual reality, they can visit any monument, any place in the world.
Maybe they can go to outer space, the moon, and travel the solar system. So virtual reality can have endless possibilities. Next is obviously gaming entertainment. So as we already mentioned, in gaming, virtual reality can be useful.
With the help of virtual reality locomotion, the player can move anywhere, they can fly, they can teleport, multiple locomotion techniques can be implemented for them, and they don't have any barriers, like they have in the real world. So they can create an inclusive accessible virtual world, where they can play with their friends and they can have achievements, participation, and they can create immersive gaming experiences. All this can happen with the virtual reality.
Next they can virtually attend events and gatherings. So if they have any social events, concerts, family gatherings, by using virtual reality, they can move around the event, they can experience that, and they can have a 360 immersive view. So it would be like completely -- they are experiencing that, only they are living there only, living in the moment, at that point, and they can be there with their family and friends. And the last is quite important.
Emergency preparedness. Using virtual reality, we can prepare evacuation tools. We can help them train with locomotion techniques. And they can understand accessible emergency routes.
So this can be quite useful during a disaster. And they can prepare themselves also. And help explore also how to help them during the disaster. So those are the advantages of VR locomotion.
So as I said, my VRC 8 MetaQuest -- it focused on multiple locomotion styles. This is not limited to teleportation, direct locomotion, and snap locomotion. So for this, we created an Open Source project that is available on GitHub, and we will also be posting the link for the implementation of VRC8 on the Equal Entry website shortly. And these are the minimum requirements that you'll be needing to implement the project.
So let's have a quick demo, how it works. So in this project, we'll be focusing on the direct motion, snap turning, and teleportation. So these are the three locomotion styles we'll be implementing in this project. We'll start with snap turning first.
For snap turning, basically turning around, left or right. Without rotating your head in real space. Using just a flick of a button, of your controller. You can move left and right.
Next is direct motion. By pointing in a direction and using the thumb stick, you can directly move from point A to point B. In this, you can notice you're moving continuously, in the direction you are facing. And the last one is teleportation.
In this, you can just point to a specific teleport angle and you can directly teleport to that point. For example, we are pointing toward a teleportation anchor, as you can see in the video, and we are getting teleported to that point. So this is how we can implement three locomotion styles in the virtual reality. And because this is Open Source, it can be implemented in any game.
You can download it via our GitHub project. It is quite easy to implement also. And you can see an article on it. We have all the steps listed, how to implement that.
So what will be the future scope of this project? We have implemented the basic Meta Quest VRC8 criteria. But how can we improve? I would like to motivate everyone seeing this video, how you can extend this locomotion technique.
And personally, I will also be working on these future techniques. The first is voice command locomotion. Imagine right now you're using a controller. But what if you don't want to or you can't use the controller?
You can't hold the controller? Using voice commands, you can create a completely controller-free experience. Suppose you're in a game. And you want to move.
You can just use your voice commands. You can say... Move 50 meters ahead. Turn right.
Turn left. You don't have to hold the controllers. You can just directly use your voice as a command and it can move in the game. Next is gaze-based locomotion.
In this, you can see at a specific point in a game. For X amount of time. And you'll be teleported or directly moved to that point. I have to move 180 degrees.
And I'll just say turn, turn, and after that, I'll just have to move 50 meters ahead. So a specific point, or a save point, I'll just look at that. And then there will be a loading buzzer, and after that is completed, for, say, five seconds of time, I'll be directly teleported to that point. And I don't have to even speak, also.
You just have to look at that point, and you'll be teleported or moved to that point. This is also an interesting locomotion technique. Tunneling vignette against motion sickness. When we're moving from point A to point B, in virtual reality we're moving but in reality we're not moving.
This can cause the effect of nausea and motion sickness. How can we reduce that? Providing that tunneling effect. Before teleporting, you'll just select the point and after teleporting -- in the in between time, there will be a tunnel produced.
That will be blocking all the external view. So you don't have motion sickness. You can also implement this in your locomotion style. And it will help reduce the motion sickness.
So this is also based on the observation of different users. And we should all work towards this. And we can implement the techniques and make an accessible gaming experience or virtual reality experiences with all the techniques listed here. Thank you, everyone.
If you have any feedback, observations, this is my email ID. Thank you so much.
THOMAS LOGAN: All right. Thank you so much. And yes, thank you. This is probably the teleportation/locomotion topic -- is one of the ones that feels very unique to VR, compared to the contrast and to captions, which we needed to do in other platforms.
With the teleportation and locomotion, it brings up a lot of other types of disabilities. Like vestibular disorders. Unfortunately for a lot of folks I've spoken to, who use VR, they get motion sickness, or they have problems with this implementation. So I do think it's a good example of the idea that a lot of times implementing something that will help people with disabilities benefits every user.
And the idea of, like, not making people have to move a certain way in VR is very similar to not forcing people to have to do another type of action. So let's take the first question. This is a comment, actually. But I'd like you to response to this.
Would love to see this expanded for wheelchair users who could explore the metaverse either without a wheelchair, or using a wheelchair, with smooth locomotion, which would require flat surfaces or ramps. Just an idea. What do you think of that?
SHIVAM SHARMA: Sure. So the goal of virtual reality can be to create a completely virtual environment, in which the user can be anyone. Or added to that, it can be a realistic environment that the user can identify with. If the user wants to be in a wheelchair in that experience, we can create a simulator for that.
So that the real world and virtual world matches the identity of the user. So we can have a simulator. So I worked on a driving simulator. In which we have the complete accelerator, brake, and steering wheel.
Similarly, we can create a virtual wheelchair simulator for virtual reality. This is quite beneficial of virtual reality. That you can be anyone or anything. So as I mentioned, you can be completely different from your real world persona, or you can be exactly the same person.
You can create your own room in virtual reality. So now there are technologies also that you can scan your phone and you can scan your room and it can create a 3D model, 3D environment of the room. So definitely... If you want to have a realistic experience in VR, you can create a simulator for that.
And you can experience the same world that you're experiencing with the help of that simulator.
THOMAS LOGAN: Yeah. I just love that idea. That in VR, there's really no limit, so what if you were like... Yeah.
I'm gonna re-render the environment to have a ramp. The fact that you can do all of that in VR is really cool. Here's another comment. And also something for you to comment on.
So this is around probably like a social VR example. But: Would love to see a way of being able to locate a specific user within a crowded VR environment. Think about a shared social environment. So what do you think about finding a user inside of a social VR?
SHIVAM SHARMA: Definitely. I think there are already some of the applications that are already working on social VR. But if you want to create an exclusive inclusive social VR, we can do that also. People can share their experiences, have support groups, so we can definitely have that application also.
And it can connect different users with various disabilities from around the world in a common space. So I think during our fellowship experiences with XR Access and Equal Entry, we collaborated in the virtual space, and it was quite interesting. We were sitting in different countries, but still in the virtual reality, we were sitting in a common conference room and we were presenting and having fun. So virtual reality can bring any type of group in a single room, and it's quite...
I think everyone should experience that meeting or conference. And they'll just see how close can we be, despite sitting in different parts of the world. So obviously we can have different social groups or applications for different types of users in virtual reality.
THOMAS LOGAN: All right. And then last question, before we wrap up today. Could voice control potentially be used to locate specific objects or users? And I'll just add onto that question, just to be -- you mentioned that future planning was voice control.
Did you have any ideas of how you thought the voice control should work?
SHIVAM SHARMA: Sure. So voice control -- it's not just a single use case. It can have -- it has basically diverse use cases. So basically what you are doing with a controller should be -- you should be able to do it with your voice.
To talk about the first question, we can use distance grabbing. So what we do in distance grabbing is we point towards the specific object in the game, and we can float it towards that hand or we can grab it without actually going towards that object. So using voice control, we can do that. We can say...
If we can have a tag, we can have different tags for different objects in the game. And suppose there is a water gun. So I'll say "Grab water gun". So my virtual hand in the game will automatically grab the water gun or switch to ballistic missile, rocket launcher -- automatically we can switch to different objects in that game, using voice command.
But that can be a feature of voice command. Basically voice command can be anything. Any command or anything that you can accomplish with the controller you must be able to do with voice command. So if I'm not a developer, I won't be able to cover all of the use cases, but we can create an Open Source project like with the locomotion.
We can create an object for voice command. So if you want to implement voice command for a particular feature, you can do that, depending on your requirements.
Acknowledgments
We would like to thank adXR for giving us feedback and improving this article. We also thank Thomas Logan, Dylan Fox, Meryl Evans, and Kenji Yanagawa for helping me with the article by improving it and making it more accessible.
Virtual Reality (VR) Accessibility Consulting Services
Our years of experience working with virtual reality and being speakers on the topic have given us a unique perspective when it comes to consulting on VR projects. If you’d like to innovate in the accessibility of VR please, please contact us to discuss how we can help you.