@@ -38,10 +38,17 @@ public void handleOSCMessage(OSCMessage message)
3838
3939 private void UpdateVRCFTEyeData ( ref UnifiedEyeData eyeData , ref UnifiedExpressionShape [ ] eyeShapes )
4040 {
41- HandleEyeOpenness ( ref eyeData , ref eyeShapes ) ;
4241 HandleEyeGaze ( ref eyeData ) ;
42+ HandleEyeOpenness ( ref eyeData , ref eyeShapes ) ;
43+ EmulateEyeBrows ( ref eyeShapes ) ;
4344 }
4445
46+ private void HandleEyeGaze ( ref UnifiedEyeData eyeData )
47+ {
48+ eyeData . Right . Gaze = new Vector2 ( _parameterValues [ "RightEyeX" ] , _parameterValues [ "EyesY" ] ) ;
49+ eyeData . Left . Gaze = new Vector2 ( _parameterValues [ "LeftEyeX" ] , _parameterValues [ "EyesY" ] ) ;
50+ }
51+
4552 private void HandleEyeOpenness ( ref UnifiedEyeData eyeData , ref UnifiedExpressionShape [ ] eyeShapes )
4653 {
4754 // so how it works, currently we cannot output values above 1.0 and below 0.0
@@ -91,9 +98,62 @@ float squeezeThreshold
9198 }
9299 }
93100
94- private void HandleEyeGaze ( ref UnifiedEyeData eyeData )
101+ private void EmulateEyeBrows ( ref UnifiedExpressionShape [ ] eyeShapes )
95102 {
96- eyeData . Right . Gaze = new Vector2 ( _parameterValues [ "RightEyeX" ] , _parameterValues [ "EyesY" ] ) ;
97- eyeData . Left . Gaze = new Vector2 ( _parameterValues [ "LeftEyeX" ] , _parameterValues [ "EyesY" ] ) ;
103+ var baseRightEyeOpenness = _parameterValues [ "RightEyeLidExpandedSqueeze" ] ;
104+ var baseLeftEyeOpenness = _parameterValues [ "LeftEyeLidExpandedSqueeze" ] ;
105+
106+ _emulateEyeBrow (
107+ ref eyeShapes ,
108+ UnifiedExpressions . BrowLowererRight ,
109+ UnifiedExpressions . BrowOuterUpRight ,
110+ baseRightEyeOpenness ,
111+ _config . WidenThreshold ,
112+ _config . SqueezeThreshold
113+ ) ;
114+
115+ _emulateEyeBrow (
116+ ref eyeShapes ,
117+ UnifiedExpressions . BrowLowererLeft ,
118+ UnifiedExpressions . BrowOuterUpLeft ,
119+ baseLeftEyeOpenness ,
120+ _config . WidenThreshold ,
121+ _config . SqueezeThreshold
122+ ) ;
123+ }
124+
125+ private void _emulateEyeBrow (
126+ ref UnifiedExpressionShape [ ] eyeShapes ,
127+ UnifiedExpressions eyebrowExpressionLowerrer ,
128+ UnifiedExpressions eyebrowExpressionUpper ,
129+ float baseEyeOpenness ,
130+ float widenThreshold ,
131+ float squeezeThreshold )
132+ {
133+ if ( ! _config . ShouldEmulateEyebrows )
134+ return ;
135+
136+ if ( baseEyeOpenness >= widenThreshold )
137+ {
138+ eyeShapes [ ( int ) eyebrowExpressionLowerrer ] . Weight = Utils . SmoothStep (
139+ widenThreshold ,
140+ 1 ,
141+ baseEyeOpenness
142+ ) ;
143+ }
144+
145+ if ( baseEyeOpenness <= squeezeThreshold )
146+ {
147+ eyeShapes [ ( int ) eyebrowExpressionUpper ] . Weight = Utils . SmoothStep (
148+ squeezeThreshold ,
149+ 1 ,
150+ baseEyeOpenness
151+ ) ;
152+ eyeShapes [ ( int ) UnifiedExpressions . BrowLowererLeft ] . Weight = Utils . SmoothStep (
153+ squeezeThreshold ,
154+ 1 ,
155+ baseEyeOpenness
156+ ) ;
157+ }
98158 }
99159}
0 commit comments