Lip Expression¶
VIVE Wave™ plugin supports the Lip Expression feature. By following this guide you can retrieve total 37 lip expression values representing as the illustrations below.
- 00.Jaw_Right
- 01.JAW_LEFT
- 02.JAW_FORWARD
- 03.JAW_OPEN
- 04.MOUTH_APE_SHAPE
- 05.MOUTH_UPPER_RIGHT
- 06.MOUTH_UPPER_LEFT
- 07.MOUTH_LOWER_RIGHT
- 08.MOUTH_LOWER_LEFT
- 09.MOUTH_UPPER_OVERTURN
- 10.MOUTH_LOWER_OVERTURN
- 11.MOUTH_POUT
- 12.MOUTH_RAISER_RIGHT
- 13.MOUTH_RAISER_LEFT
- 14.MOUTH_STRETCHER_RIGHT
- 15.MOUTH_STRETCHER_LEFT
- 16.CHEEK_PUFF_RIGHT
- 17.CHEEK_PUFF_LEFT
- 18.CHEEK_SUCK
- 19.MOUTH_UPPER_UPRIGHT
- 20.MOUTH_UPPER_UPLEFT
- 21.MOUTH_LOWER_DOWNRIGHT
- 22.MOUTH_LOWER_DOWNLEFT
- 23.MOUTH_UPPER_INSIDE
- 24.MOUTH_LOWER_INSIDE
- 25.MOUTH_LOWER_OVERLAY
- 26.TONGUE_LONGSTEP1
- 27.TONGUE_LEFT
- 28.TONGUE_RIGHT
- 29.TONGUE_UP
- 30.TONGUE_DOWN
- 31.TONGUE_ROLL
- 32.TONGUE_LONGSTEP2
- 33.TONGUE_UPRIGHT_MORPH
- 34.TONGUE_UPLEFT_MORPH
- 35.TONGUE_DOWNRIGHT_MORPH
- 36.TONGUE_DOWNLEFT_MORPH
Modify AndroidManifest.xml¶
To enable the Eye Tracking feature, you have to add below content to your AndroidManifest.xml.
<uses-feature android:name="wave.feature.lipexpression" android:required="true" />
Or you can go to Project Settings > Plugins > Wave VR > Lip and select the Enable Lip Expression option.
Lip Expression API¶
The Blueprint Function Library of Lip Expression is defined in Plugins > WaveVR > Source > WaveVR > Public > LipExpression > WaveVRLipExpBPLibrary.h.
#include "LipExpression/WaveVRLipExpBPLibrary.h"
UENUM(BlueprintType, Category = "WaveVR|Lip")
enum class EWaveVRLipExp : uint8
{
Jaw_Right = 0,//WVR_LipExpression.WVR_LipExpression_Jaw_Right,
Jaw_Left = 1,//WVR_LipExpression.WVR_LipExpression_Jaw_Left,
Jaw_Forward = 2,//WVR_LipExpression.WVR_LipExpression_Jaw_Forward,
Jaw_Open = 3,//WVR_LipExpression.WVR_LipExpression_Jaw_Open,
Mouth_Ape_Shape = 4,//WVR_LipExpression.WVR_LipExpression_Mouth_Ape_Shape,
Mouth_Upper_Right = 5,//WVR_LipExpression.WVR_LipExpression_Mouth_Upper_Right, // 5
Mouth_Upper_Left = 6,//WVR_LipExpression.WVR_LipExpression_Mouth_Upper_Left,
Mouth_Lower_Right = 7,//WVR_LipExpression.WVR_LipExpression_Mouth_Lower_Right,
Mouth_Lower_Left = 8,//WVR_LipExpression.WVR_LipExpression_Mouth_Lower_Left,
Mouth_Upper_Overturn = 9,//WVR_LipExpression.WVR_LipExpression_Mouth_Upper_Overturn,
Mouth_Lower_Overturn = 10,//WVR_LipExpression.WVR_LipExpression_Mouth_Lower_Overturn, // 10
Mouth_Pout = 11,//WVR_LipExpression.WVR_LipExpression_Mouth_Pout,
Mouth_Raiser_Right = 12,//WVR_LipExpression.WVR_LipExpression_Mouth_Raiser_Right,
Mouth_Raiser_Left = 13,//WVR_LipExpression.WVR_LipExpression_Mouth_Raiser_Left,
Mouth_Stretcher_Right = 14,//WVR_LipExpression.WVR_LipExpression_Mouth_Stretcher_Right,
Mouth_Stretcher_Left = 15,//WVR_LipExpression.WVR_LipExpression_Mouth_Stretcher_Left, // 15
Cheek_Puff_Right = 16,//WVR_LipExpression.WVR_LipExpression_Cheek_Puff_Right,
Cheek_Puff_Left = 17,//WVR_LipExpression.WVR_LipExpression_Cheek_Puff_Left,
Cheek_Suck = 18,//WVR_LipExpression.WVR_LipExpression_Cheek_Suck,
Mouth_Upper_UpRight = 19,//WVR_LipExpression.WVR_LipExpression_Mouth_Upper_Upright,
Mouth_Upper_UpLeft = 20,//WVR_LipExpression.WVR_LipExpression_Mouth_Upper_Upleft, // 20
Mouth_Lower_DownRight = 21,//WVR_LipExpression.WVR_LipExpression_Mouth_Lower_Downright,
Mouth_Lower_DownLeft = 22,//WVR_LipExpression.WVR_LipExpression_Mouth_Lower_Downleft,
Mouth_Upper_Inside = 23,//WVR_LipExpression.WVR_LipExpression_Mouth_Upper_Inside,
Mouth_Lower_Inside = 24,//WVR_LipExpression.WVR_LipExpression_Mouth_Lower_Inside,
Mouth_Lower_Overlay = 25,//WVR_LipExpression.WVR_LipExpression_Mouth_Lower_Overlay, // 25
Tongue_Longstep1 = 26,//WVR_LipExpression.WVR_LipExpression_Tongue_Longstep1,
Tongue_Left = 27,//WVR_LipExpression.WVR_LipExpression_Tongue_Left,
Tongue_Right = 28,//WVR_LipExpression.WVR_LipExpression_Tongue_Right,
Tongue_Up = 29,//WVR_LipExpression.WVR_LipExpression_Tongue_Up,
Tongue_Down = 30,//WVR_LipExpression.WVR_LipExpression_Tongue_Down, // 30
Tongue_Roll = 31,//WVR_LipExpression.WVR_LipExpression_Tongue_Roll,
Tongue_Longstep2 = 32,//WVR_LipExpression.WVR_LipExpression_Tongue_Longstep2,
Tongue_UpRight_Morph = 33,//WVR_LipExpression.WVR_LipExpression_Tongue_Upright_Morph,
Tongue_UpLeft_Morph = 34,//WVR_LipExpression.WVR_LipExpression_Tongue_Upleft_Morph,
Tongue_DownRight_Morph = 35,//WVR_LipExpression.WVR_LipExpression_Tongue_Downright_Morph, // 35
Tongue_DownLeft_Morph = 36,//WVR_LipExpression.WVR_LipExpression_Tongue_Downleft_Morph,
Max,//WVR_LipExpression.WVR_LipExpression_Max,
};
UENUM(BlueprintType, Category = "WaveVR|Lip")
enum class EWaveVRLipExpStatus : uint8
{
// Initial, can call Start API in this state.
NOT_START,
START_FAILURE,
// Processing, should NOT call API in this state.
STARTING,
STOPING,
// Running, can call Stop API in this state.
AVAILABLE,
// Do nothing.
NO_SUPPORT
};
void UWaveVRLipExpBPLibrary::StartLipExp()
void UWaveVRLipExpBPLibrary::StopLipExp()
EWaveVRLipExpStatus UWaveVRLipExpBPLibrary::GetLipExpStatus()
bool UWaveVRLipExpBPLibrary::IsLipExpAvailable()
// Specify a type of enum EWaveVRLipExp to retrieve the expression value as float.
float UWaveVRLipExpBPLibrary::GetLipExpValue(EWaveVRLipExp lipExp)
bool UWaveVRLipExpBPLibrary::GetLipExpData(TArray<float>& OutValue)