mirror of
https://github.com/hanetzer/sdraw_mods_cvr.git
synced 2025-09-05 03:19:23 +00:00
Return of DesktopHeadTracking
This commit is contained in:
parent
c8743158ac
commit
b05447c4df
24 changed files with 812 additions and 888 deletions
70
ml_dht/TrackingModule.cs
Normal file
70
ml_dht/TrackingModule.cs
Normal file
|
@ -0,0 +1,70 @@
|
|||
using ABI_RC.Systems.FaceTracking;
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using ViveSR.anipal.Lip;
|
||||
|
||||
namespace ml_dht
|
||||
{
|
||||
class TrackingModule : ITrackingModule
|
||||
{
|
||||
bool m_registered = false;
|
||||
bool m_activeAsModule = false;
|
||||
MemoryMapReader m_mapReader = null;
|
||||
byte[] m_buffer = null;
|
||||
TrackingData m_trackingData;
|
||||
LipData_v2 m_lipData;
|
||||
|
||||
public TrackingModule()
|
||||
{
|
||||
m_lipData = new LipData_v2();
|
||||
m_lipData.frame = 0;
|
||||
m_lipData.time = 0;
|
||||
m_lipData.image = IntPtr.Zero;
|
||||
m_lipData.prediction_data = new PredictionData_v2();
|
||||
m_lipData.prediction_data.blend_shape_weight = new float[(int)LipShape_v2.Max];
|
||||
|
||||
m_buffer = new byte[1024];
|
||||
m_mapReader = new MemoryMapReader();
|
||||
m_mapReader.Open("head/data");
|
||||
}
|
||||
~TrackingModule()
|
||||
{
|
||||
m_mapReader.Close();
|
||||
m_mapReader = null;
|
||||
}
|
||||
|
||||
public (bool, bool) Initialize(bool useEye, bool useLip)
|
||||
{
|
||||
m_registered = true;
|
||||
m_activeAsModule = true;
|
||||
return (false, true);
|
||||
}
|
||||
|
||||
public void Shutdown()
|
||||
{
|
||||
m_activeAsModule = false;
|
||||
}
|
||||
|
||||
public bool IsEyeDataAvailable() => false;
|
||||
public bool IsLipDataAvailable() => true;
|
||||
|
||||
internal void Update()
|
||||
{
|
||||
if(m_mapReader.Read(ref m_buffer))
|
||||
{
|
||||
m_trackingData = TrackingData.ToObject(m_buffer);
|
||||
|
||||
float l_weight = Mathf.Clamp01(Mathf.InverseLerp(0.25f, 1f, Mathf.Abs(m_trackingData.m_mouthShape)));
|
||||
m_lipData.prediction_data.blend_shape_weight[(int)LipShape_v2.Jaw_Open] = m_trackingData.m_mouthOpen;
|
||||
m_lipData.prediction_data.blend_shape_weight[(int)LipShape_v2.Mouth_Pout] = ((m_trackingData.m_mouthShape > 0f) ? l_weight : 0f);
|
||||
m_lipData.prediction_data.blend_shape_weight[(int)LipShape_v2.Mouth_Smile_Left] = ((m_trackingData.m_mouthShape < 0f) ? l_weight : 0f);
|
||||
m_lipData.prediction_data.blend_shape_weight[(int)LipShape_v2.Mouth_Smile_Right] = ((m_trackingData.m_mouthShape < 0f) ? l_weight : 0f);
|
||||
|
||||
if(m_registered && m_activeAsModule && Settings.FaceTracking)
|
||||
FaceTrackingManager.Instance.SubmitNewFacialData(m_lipData);
|
||||
}
|
||||
}
|
||||
|
||||
internal ref TrackingData GetLatestTrackingData() => ref m_trackingData;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue