cvr-props/Assets/ABI.CCK/Components/CVRFaceTracking.cs

64 lines
No EOL
2.9 KiB
C#
Executable file

using System.Collections.Generic;
using UnityEngine;
namespace ABI.CCK.Components
{
[AddComponentMenu("ChilloutVR/CVR Face Tracking")]
[HelpURL("https://developers.abinteractive.net/cck/components/face-tracking/")]
public class CVRFaceTracking : MonoBehaviour, ICCK_Component
{
public bool UseFacialTracking = true;
public float BlendShapeStrength = 100f;
public SkinnedMeshRenderer FaceMesh;
public string[] FaceBlendShapes = new string[37];
public Mesh OriginalMesh = null;
[HideInInspector]
public List<string> BlendShapeNames = null;
[HideInInspector]
public static string[] FaceBlendShapeNames = new[] {"Jaw_Right", "Jaw_Left", "Jaw_Forward", "Jaw_Open",
"Mouth_Ape_Shape", "Mouth_Upper_Right", "Mouth_Upper_Left", "Mouth_Lower_Right", "Mouth_Lower_Left",
"Mouth_Upper_Overturn", "Mouth_Lower_Overturn", "Mouth_Pout", "Mouth_Smile_Right", "Mouth_Smile_Left",
"Mouth_Sad_Right", "Mouth_Sad_Left", "Cheek_Puff_Right", "Cheek_Puff_Left", "Cheek_Suck",
"Mouth_Upper_UpRight", "Mouth_Upper_UpLeft", "Mouth_Lower_DownRight", "Mouth_Lower_DownLeft",
"Mouth_Upper_Inside", "Mouth_Lower_Inside", "Mouth_Lower_Overlay", "Tongue_LongStep1", "Tongue_LongStep2",
"Tongue_Down", "Tongue_Up", "Tongue_Right", "Tongue_Left", "Tongue_Roll", "Tongue_UpLeft_Morph",
"Tongue_UpRight_Morph", "Tongue_DownLeft_Morph", "Tongue_DownRight_Morph"};
public bool enableOverdriveBlendShapes = false;
public void GetBlendShapeNames()
{
if (FaceMesh != null)
{
BlendShapeNames = new List<string>();
BlendShapeNames.Add("-none-");
for (int i = 0; i < FaceMesh.sharedMesh.blendShapeCount; ++i)
BlendShapeNames.Add(FaceMesh.sharedMesh.GetBlendShapeName(i));
}
else
{
BlendShapeNames = new List<string>();
BlendShapeNames.Add("-none-");
}
}
public void AutoSelectFaceTrackingShapes()
{
#if UNITY_EDITOR
UnityEditor.Undo.RecordObject(this, "CVR Auto Select Face Tracking");
#endif
for (int i = 0; i < FaceBlendShapeNames.Length; i++)
{
for (int j = 0; j < BlendShapeNames.Count; ++j)
{
if (BlendShapeNames[j].ToLower().Contains(FaceBlendShapeNames[i].ToLower()) ||
BlendShapeNames[j].ToLower().Contains(FaceBlendShapeNames[i].ToLower().Replace("_", "")))
{
FaceBlendShapes[i] = BlendShapeNames[j];
}
}
}
}
}
}