Skip to content

Commit 735db87

Browse files
committed
head rot and pos separated from inputs
1 parent 1d0d47b commit 735db87

4 files changed

Lines changed: 19 additions & 9 deletions

File tree

Basis/Packages/com.basis.mediapipe/Runtime/Application/BasisMediaPipeManagement.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ private void LoadSettingsIntoConfig()
5151
CameraDeviceName = BasisMediaPipeSettings.Camera.RawValue;
5252
Config.EnableFace = BasisMediaPipeSettings.EnableFace.RawValue;
5353
Config.EnableHands = BasisMediaPipeSettings.EnableHands.RawValue;
54-
Config.EnableHead = BasisMediaPipeSettings.EnableHead.RawValue;
54+
Config.EnableHeadPosition = BasisMediaPipeSettings.EnableHeadPosition.RawValue;
55+
Config.EnableHeadRotation = BasisMediaPipeSettings.EnableHeadRotation.RawValue;
5556
Config.EnableHandTracking = BasisMediaPipeSettings.EnableHandTracking.RawValue;
5657
Config.SwapHands = BasisMediaPipeSettings.SwapHands.RawValue;
5758
Config.MirrorHorizontally = BasisMediaPipeSettings.Mirror.RawValue;
@@ -219,12 +220,14 @@ private void ApplyResult(in BasisMediaPipeResult result)
219220
_handConverter.Apply(in result);
220221
}
221222

222-
if (Config.EnableHead)
223+
if (Config.EnableHeadPosition || Config.EnableHeadRotation)
223224
{
224225
if (result.HasFace && BasisLocalBoneDriver.EyeControl != null && _headConverter.TryGetHeadOffset(in result, out Quaternion headOffset, out Vector3 headPositionOffset))
225226
{
226227
BasisLocalBoneControl eye = BasisLocalBoneDriver.EyeControl;
227-
EnsureTracker(BasisBoneTrackedRole.Head).FollowMovement.SetLocalPositionAndRotation(eye.OutGoingData.position + headPositionOffset, eye.OutGoingData.rotation * headOffset);
228+
Vector3 headPosition = Config.EnableHeadPosition ? eye.OutGoingData.position + headPositionOffset : eye.OutGoingData.position;
229+
Quaternion headRotation = Config.EnableHeadRotation ? eye.OutGoingData.rotation * headOffset : eye.OutGoingData.rotation;
230+
EnsureTracker(BasisBoneTrackedRole.Head).FollowMovement.SetLocalPositionAndRotation(headPosition, headRotation);
228231
}
229232
}
230233
else

Basis/Packages/com.basis.mediapipe/Runtime/BasisMediaPipeConfig.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ public struct BasisMediaPipeConfig
66
public bool EnableFace;
77
public bool EnableHands;
88
public bool EnablePose;
9-
public bool EnableHead;
9+
public bool EnableHeadPosition;
10+
public bool EnableHeadRotation;
1011
public bool EnableHandTracking;
1112
public bool SwapHands;
1213
public bool MirrorHorizontally;
@@ -19,7 +20,8 @@ public struct BasisMediaPipeConfig
1920
EnableFace = true,
2021
EnableHands = true,
2122
EnablePose = false,
22-
EnableHead = false,
23+
EnableHeadPosition = true,
24+
EnableHeadRotation = true,
2325
EnableHandTracking = false,
2426
SwapHands = false,
2527
MirrorHorizontally = true,

Basis/Packages/com.basis.mediapipe/Runtime/Settings/BasisMediaPipeSettings.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,11 @@ public static class BasisMediaPipeSettings
2020
public static readonly BasisSettingsBinding<bool> Mirror =
2121
new BasisSettingsBinding<bool>("mediapipe_mirror", new BasisPlatformDefault<bool>(true));
2222

23-
public static readonly BasisSettingsBinding<bool> EnableHead =
24-
new BasisSettingsBinding<bool>("mediapipe_head", new BasisPlatformDefault<bool>(false));
23+
public static readonly BasisSettingsBinding<bool> EnableHeadPosition =
24+
new BasisSettingsBinding<bool>("mediapipe_headposition", new BasisPlatformDefault<bool>(true));
25+
26+
public static readonly BasisSettingsBinding<bool> EnableHeadRotation =
27+
new BasisSettingsBinding<bool>("mediapipe_headrotation", new BasisPlatformDefault<bool>(true));
2528

2629
public static readonly BasisSettingsBinding<bool> EnableHandTracking =
2730
new BasisSettingsBinding<bool>("mediapipe_handtracking_v2", new BasisPlatformDefault<bool>(false));
@@ -91,7 +94,8 @@ public static void LoadAll()
9194
Camera.LoadBindingValue();
9295
EnableFace.LoadBindingValue();
9396
EnableHands.LoadBindingValue();
94-
EnableHead.LoadBindingValue();
97+
EnableHeadPosition.LoadBindingValue();
98+
EnableHeadRotation.LoadBindingValue();
9599
EnableHandTracking.LoadBindingValue();
96100
EnableBody.LoadBindingValue();
97101
SwapHands.LoadBindingValue();

Basis/Packages/com.basis.mediapipe/Runtime/Settings/SettingsProviderMediaPipe.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,8 @@ void AddTuningToggle(string title, string description, BasisSettingsBinding<bool
120120

121121
AddFeatureToggle("Face & Eyes", "Track facial expressions, blink and gaze.", BasisMediaPipeSettings.EnableFace);
122122
AddFeatureToggle("Hands & Fingers", "Track finger curl and splay.", BasisMediaPipeSettings.EnableHands);
123-
AddFeatureToggle("Head Tracking", "Your avatar's head follows your real head. The camera stays on the mouse.", BasisMediaPipeSettings.EnableHead);
123+
AddFeatureToggle("Head Rotation", "Your avatar's head turns, nods and tilts to follow your real head. The camera stays on the mouse.", BasisMediaPipeSettings.EnableHeadRotation);
124+
AddFeatureToggle("Head Position", "Your avatar's head shifts to follow your real head movement.", BasisMediaPipeSettings.EnableHeadPosition);
124125
AddFeatureToggle("Hand Position (experimental)", "Move your avatar's hands to match your real hands (in addition to finger curl).", BasisMediaPipeSettings.EnableHandTracking);
125126
AddTuningToggle("Hand Rotation", "Off keeps a neutral wrist (position only) to avoid noisy webcam wrist rotation.", BasisMediaPipeSettings.HandRotation);
126127
AddFeatureToggle("Body Lean/Twist (experimental)", "Lean and twist your torso. Uses the pose model (extra CPU); monocular, so approximate.", BasisMediaPipeSettings.EnableBody);

0 commit comments

Comments
 (0)