Getting Started with Wave for Unreal Developers
What will you learn ?
You will learn to use the VIVE Wave SDK to create immersive Wave content that runs on Android devices such as VIVE Focus 3 and VIVE Flow .
Note : In this tutorial we will use Unreal Engine 4.26 and Vive Focus 3 .
What is the VIVE Wave SDK ?
The Wave SDK is required for developers to build content for VIVE Standalone headset such Vive Focus, Vive Focus Plus and Vive Focus 3.
VIVE Wave is an API and runtime that enables developers to create VR content for Android and offers an open interface enabling interoperability between numerous mobile VR headsets and accessories, supporting mainstream game engines such as Unreal Engine and Unity Engine.
Setup Your Unreal Engine Project
- Download the VIVE Wave SDK for Unreal Engine. Link

- Unzip wave_<SDK_Version>_<UE_Version>.zip
Please note that wave_<SDK_Version>_<UE_Version>.zip is a sample project with the WaveSDK.
The plugin.uproject contains different VR samples that can help you get started with the VIVE Wave SDK.
You can find the Wave plugin under
wave_<SDK_Version>_<UE_Version>\plugin\Plugins
.
- Create a new Blank project.

- Once your project is created copy the Plugins folder wave_<SDK_Version>_<UE_Version> \plugin\Plugins to your newly created project root directory.

- Launch your new <Project_Name>.uproject and open the plugins window.

- Under project->Virtual Reality you will find Wave VR plugi n. If the plugin is not enabled by default please enable it and make sure that VIVE Wave™ is the only VR plugin enabled. Turn off all other VR plugins (especially OculusVR and SteamVR) to prevent conflicts. You can do this in <EditorMenu>->Edit ->Plugins->VirtualReality

Project Settings
Make sure the following options have been set in your project settings.
- Select “Start in VR”

- Set “Mobile MSAA” to 4x MSAA (Optional)

- Unselect “Support movable light CSM shader culling”

- Select “Forward Shading”

- Unselect “Separate Translucency”

- Set “Custom Depth-Stencil Pass” to Disabled

- Unselect “Custom Depth with TemporalAA Jitter”
- Unselect “Bloom”, “Ambient Occlusion”, “Ambient Occlusion Static Friction”, “Auto Exposure”

- Unselect “Motion Blur”

- Set “Anti-Aliasing Method” to MSAA

- Unselect “Mobile HDR” (We recommend you disable this option for better rendering performance) and Select “Mobile Multi-View”

- Refer to these Android build Settings. For more information, see Setup Android SDK and NDK . For JDK, it is recommended to install jdk1.8.0 .

- We recommend setting Minimum SDK Version as 25 and Target SDK Version as 29 . For more information, see Wave VR Version List .

- Wave SDK supports both armv7 and arm64 architectures .

Wave Settings
You can find and customize the
Wave VR Settings
under the
Plugins
section of the project settings page.
AMC Mode
supports 3 modes: Off, UMC and Auto. For more information, see
Adaptive Motion Compositor (AMC)
.
Enable Eye Tracking
: Select this option to enable eye tracking on a device that supports it.
Enable Render Mask
: Select this option to activate the RenderMask. For more information, see
Render Mask
.
Foveated Rendering Mode
supports 3 modes: Default, Disable and Enable. You can customize the peripheral FOV and quality options when
Foveated Rendering Mode
is set to
Enabled
. For more information, see
FoveatedRendering
.
Time Warp Stabilized Mode
: Select this option to reduce jitter under specific rendering conditions. For more information, see
WaveVR Time Warp Stabilization
.
Enable RenderDoc
: Select this option only when you need to do
In-App capture
with RenderDoc for analyzing the drawing process. For more information, see
RenderDoc
.
Direct Preview
: This section contains settings required by
Direct Preview
. For more information, see
DirectPreview
.
Enable Adaptive Quality
: Select this option to reduce power consumption and improve performance under different workloads. For more information, see
AdaptiveQuality
.
AQ Mode
supports 3 modes: Quality Oriented, Performance Oriented and Customization. Select a mode based on whether you prefer better quality, performance or customizability. For more information, see
AdaptiveQuality
.
Enable Hand Tracking
: Select this option to modify the AndroidManifest.xml for using the Wave Hand Tracking feature. For more information, see
Hand
.
Enable Tracker
: Select this option to modify the AndroidManifest.xml for using the Wave Tracker feature. For more information, see
Tracker
.
How to set up VRPawn
- Create a Blueprint Class of type Pawn and call it VRPawn

- Set your preferred Tracking Origin. (We will use Floor Level in this example)

- Select the VR_Pawn Blueprint, and in the Details panel under the Pawn setting, set the Auto Possess Player from Disabled to Player 0.

- Add left and right Motion Controller Component to your VRPawn DefaultSceneRoot

- In your Motion Controller Component Details panel assign the corresponding Motion Source for both left and right hands. (Example for right Motion Controller)

- Add WaveVRControllerModel Component to motion MotionControllerR and MotionControllerL. Your VRPawn should be similar to the image below.

- In your WaveVRControllerModel Component Details panel assign the corresponding Device Type for both left and right controllers. (Example below for the right controller model)

How to set up controller input
The VIVE Wave™ plugin provides a lot of ways to access the controller button events in C++ and Blueprint.
Button states:
Press: Press down, press up, pressed and released.
Touch: Touch down, touch up, touched and untouched.
Axis: When touching a button, the axis values of the touch point on the button.
Supported buttons :
- Menu
- Grip
- DPad Left
- DPad Up
- DPad Right
- DPad Down
- Volume Up
- Volume Down
- A
- B
- X
- Y
- Touchpad
- Trigger
- Thumbstick (Joystick)
- Parking
Wave Input Events :
In your VRPawn Blueprint Event Graph , right click and type “ wave input event ” and you will get a list of all the available Wave input events.

You can test it by choosing your desired input and print debug string.

Wave Input APIs :
Another way is to use APIs to get buttons’ press/touch states. In your VRPawn Blueprint Event Graph , right click and type “ WaveVR input ” to see APIs GetInputButtonAxis , IsInputButtonPressed and IsInputButtonTouched


Unreal Input :
Define your
Action
and
Axis Mapping
in your project settings under
Engine->Input
In your
VRPawn
Blueprint
Event Graph
, right click and type “
action event
” or
“axis event”
and you will get a list of all the available input events you created. You can use these events the same way as you would use the
Wave Input Events
.
Create a sample map
Create a new Level and place your VR Pawn in the level

How to build your project
- Go to Edit-> Project Settings-> Platforms-> Android, accept Android SDK License. You can skip this step if you already accepted the SDK License.

- Connect your VIVE Focus 3 via USB cable to your computer. Once connected you should select File Transfer as USB Mode from your device lobby.

- On your device Go to Advanced and enable Install unknown apps.

- Launch your project on your device

- Once the build is completed, wear your headset and enjoy your content.