Skip to content

Commit 4f250ef

Browse files
authored
feat: Add support for pupil dilation
1 parent bf1dc19 commit 4f250ef

2 files changed

Lines changed: 29 additions & 15 deletions

File tree

ExpressionStrategies/V1Mapper.cs

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public class V1Mapper : BaseParamMapper
1515
{ "LeftEyeLidExpandedSqueeze", 1f },
1616
{ "LeftEyeX", 0f },
1717
{ "RightEyeX", 0f },
18+
{ "EyesDilation", 0f },
1819
{ "EyesY", 0f },
1920
};
2021

@@ -23,33 +24,38 @@ public V1Mapper(ILogger logger, Config config) : base(logger, config) {}
2324
public override void HandleOSCMessage(OSCMessage message)
2425
{
2526
var paramToMap = GetParamToMap(message.address);
26-
if (_parameterValues.ContainsKey(paramToMap))
27+
if (!_parameterValues.ContainsKey(paramToMap))
28+
return;
29+
30+
if (message.value is not OSCFloat oscF)
2731
{
28-
if (message.value is not OSCFloat oscF)
29-
{
30-
_logger.LogInformation("ParamMapper got passed a wrong type of message: {}", message.value.Type);
31-
return;
32-
}
33-
else
34-
{
35-
_parameterValues[paramToMap] = oscF.value;
36-
}
32+
_logger.LogInformation("ParamMapper got passed a wrong type of message: {}", message.value.Type);
33+
return;
3734
}
35+
36+
_parameterValues[paramToMap] = oscF.value;
3837
}
3938

4039
public override void UpdateVRCFTEyeData(ref UnifiedEyeData eyeData, ref UnifiedExpressionShape[] eyeShapes)
4140
{
4241
HandleEyeGaze(ref eyeData);
42+
HandleEyeDilation(ref eyeData);
4343
HandleEyeOpenness(ref eyeData, ref eyeShapes);
4444
EmulateEyeBrows(ref eyeShapes);
4545
}
46-
46+
4747
private void HandleEyeGaze(ref UnifiedEyeData eyeData)
4848
{
4949
eyeData.Right.Gaze = new Vector2(_parameterValues["RightEyeX"], _parameterValues["EyesY"]);
5050
eyeData.Left.Gaze = new Vector2(_parameterValues["LeftEyeX"], _parameterValues["EyesY"]);
5151
}
5252

53+
private void HandleEyeDilation(ref UnifiedEyeData eyeData)
54+
{
55+
eyeData.Left.PupilDiameter_MM = _parameterValues["EyesDilation"];
56+
eyeData.Right.PupilDiameter_MM = _parameterValues["EyesDilation"];
57+
}
58+
5359
private void HandleEyeOpenness(ref UnifiedEyeData eyeData, ref UnifiedExpressionShape[] eyeShapes)
5460
{
5561
// so how it works, currently we cannot output values above 1.0 and below 0.0

ExpressionStrategies/V2Mapper.cs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public class V2Mapper : BaseParamMapper
2727
{ "EyeRightY", 0f },
2828
{ "EyeLidLeft", 1f },
2929
{ "EyeLidRight", 1f },
30+
{ "PupilDilation", 0f },
3031
};
3132

3233
private readonly string[] _gazeParameters =
@@ -52,7 +53,7 @@ public V2Mapper(ILogger logger, Config config) : base(logger, config) {}
5253

5354
public override void HandleOSCMessage(OSCMessage message)
5455
{
55-
string paramToMap = GetParamToMap(message.address);
56+
var paramToMap = GetParamToMap(message.address);
5657
if (!_parameterValues.ContainsKey(paramToMap))
5758
return;
5859

@@ -61,15 +62,16 @@ public override void HandleOSCMessage(OSCMessage message)
6162
_logger.LogInformation("ParamMapper got passed a wrong type of message: {}", message.value.Type);
6263
return;
6364
}
64-
else
65-
_parameterValues[paramToMap] = oscF.value;
65+
66+
_parameterValues[paramToMap] = oscF.value;
6667

6768
_isSingleEye = _singleEyeParamNames.Contains(paramToMap);
6869
}
6970

7071
public override void UpdateVRCFTEyeData(ref UnifiedEyeData eyeData, ref UnifiedExpressionShape[] eyeShapes)
7172
{
7273
HandleEyeGaze(ref eyeData, _isSingleEye);
74+
HandleEyeDilation(ref eyeData);
7375
HandleEyeOpenness(ref eyeData, ref eyeShapes, _isSingleEye);
7476
EmulateEyebrows(ref eyeShapes, _isSingleEye);
7577
}
@@ -87,7 +89,13 @@ private void HandleEyeGaze(ref UnifiedEyeData eyeData, bool isSingleEyeMode)
8789
eyeData.Left.Gaze = new Vector2(_parameterValues["EyeLeftX"], _parameterValues["EyeLeftY"]);
8890
eyeData.Right.Gaze = new Vector2(_parameterValues["EyeRightX"], _parameterValues["EyeRightY"]);
8991
}
90-
92+
93+
private void HandleEyeDilation(ref UnifiedEyeData eyeData)
94+
{
95+
eyeData.Left.PupilDiameter_MM = _parameterValues["PupilDilation"];
96+
eyeData.Right.PupilDiameter_MM = _parameterValues["PupilDilation"];
97+
}
98+
9199
private void HandleEyeOpenness(ref UnifiedEyeData eyeData, ref UnifiedExpressionShape[] eyeShapes,
92100
bool isSingleEyeMode = false)
93101
{

0 commit comments

Comments
 (0)