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
../_images/00.JAW_RIGHT1.png
  • 01.JAW_LEFT
../_images/01.JAW_LEFT1.png
  • 02.JAW_FORWARD
../_images/02.JAW_FORWARD1.png
  • 03.JAW_OPEN
../_images/03.JAW_OPEN1.png
  • 04.MOUTH_APE_SHAPE
../_images/04.MOUTH_APE1.png
  • 05.MOUTH_UPPER_RIGHT
../_images/05.MOUTH_UPPER_RIGHT1.png
  • 06.MOUTH_UPPER_LEFT
../_images/06.MOUTH_UPPER_LEFT1.png
  • 07.MOUTH_LOWER_RIGHT
../_images/07.MOUTH_LOWER_RIGHT1.png
  • 08.MOUTH_LOWER_LEFT
../_images/08.MOUTH_LOWER_LEFT1.png
  • 09.MOUTH_UPPER_OVERTURN
../_images/09.MOUTH_UPPER_OVERTURN1.png
  • 10.MOUTH_LOWER_OVERTURN
../_images/10.MOUTH_LOWER_OVERTURN1.png
  • 11.MOUTH_POUT
../_images/11.MOUTH_POUT1.png
  • 12.MOUTH_RAISER_RIGHT
../_images/12.MOUTH_RAISER_RIGHT1.png
  • 13.MOUTH_RAISER_LEFT
../_images/13.MOUTH_RAISER_LEFT1.png
  • 14.MOUTH_STRETCHER_RIGHT
../_images/14.MOUTH_STRETCHER_RIGHT1.png
  • 15.MOUTH_STRETCHER_LEFT
../_images/15.MOUTH_STRETCHER_LEFT1.png
  • 16.CHEEK_PUFF_RIGHT
../_images/16.CHEEK_PUFF_RIGHT1.png
  • 17.CHEEK_PUFF_LEFT
../_images/17.CHEEK_PUFF_LEFT1.png
  • 18.CHEEK_SUCK
../_images/18.CHEEK_SUCK1.png
  • 19.MOUTH_UPPER_UPRIGHT
../_images/19.MOUTH_UPPER_UPRIGHT1.png
  • 20.MOUTH_UPPER_UPLEFT
../_images/20.MOUTH_UPPER_UPLEFT1.png
  • 21.MOUTH_LOWER_DOWNRIGHT
../_images/21.MOUTH_LOWER_DOWNRIGHT1.png
  • 22.MOUTH_LOWER_DOWNLEFT
../_images/22.MOUTH_LOWER_DOWNLEFT1.png
  • 23.MOUTH_UPPER_INSIDE
../_images/23.MOUTH_UPPER_INSIDE1.png
  • 24.MOUTH_LOWER_INSIDE
../_images/24.MOUTH_LOWER_INSIDE1.png
  • 25.MOUTH_LOWER_OVERLAY
../_images/25.MOUTH_LOWER_OVERLAY1.png
  • 26.TONGUE_LONGSTEP1
../_images/26.TONGUE_LONGSTEP11.png
  • 27.TONGUE_LEFT
../_images/27.TONGUE_LEFT1.png
  • 28.TONGUE_RIGHT
../_images/28.TONGUE_RIGHT1.png
  • 29.TONGUE_UP
../_images/29.TONGUE_UP1.png
  • 30.TONGUE_DOWN
../_images/30.TONGUE_DOWN1.png
  • 31.TONGUE_ROLL
../_images/31.TONGUE_ROLL1.png
  • 32.TONGUE_LONGSTEP2
../_images/32.TONGUE_LONGSTEP21.png
  • 33.TONGUE_UPRIGHT_MORPH
../_images/33.1.TONGUE_UPRIGHT_MORPH1.png ../_images/33.2.TONGUE_UPRIGHT_MORPH1.png
  • 34.TONGUE_UPLEFT_MORPH
../_images/34.1.TONGUE_UPLEFT_MORPH1.png ../_images/34.2.TONGUE_UPLEFT_MORPH1.png
  • 35.TONGUE_DOWNRIGHT_MORPH
../_images/35.1.TONGUE_DOWNRIGHT_MORPH1.png ../_images/35.2.TONGUE_DOWNRIGHT_MORPH1.png
  • 36.TONGUE_DOWNLEFT_MORPH
../_images/36.1.TONGUE_DOWNLEFT_MORPH1.png ../_images/36.2.TONGUE_DOWNLEFT_MORPH1.png

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.

../_images/UnrealLipExpression01.png

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)