public static Vector GetFacePoint(FaceBone faceBone) { Rotation orientation = GetFaceOrientationRaw(); int facePoint = faceBoneIndex[(int)faceBone]; Vector facePointPosition = Rotation.Inverse(orientation) * faceGeometry[facePoint] + faceBias[(int)faceBone]; return(facePointPosition); }
// 重置数据(初始化成其他脸型) public void ResetData(FaceBone initFaceBone, Transform bone, Transform preBone) { name = initFaceBone.name; this.bone = bone; _preBone = preBone; changeType = initFaceBone.changeType; _preChangeType = changeType; startValue = initFaceBone.startValue; endValue = initFaceBone.endValue; _isInit = true; }
private static void FaceBoneInspector(string name, FaceBone faceBone) { Transform faceBoneTransform = (Transform)EditorGUILayout.ObjectField(name, faceBone.bone.transform, typeof(Transform), true); if (faceBoneTransform != faceBone.bone.transform) { faceBone.bone.transform = faceBoneTransform; faceBone.CopyBonePositionToTarget(); faceBone.DoMeasurements(); } }
public static Rotation GetFacePointOrientation(FaceBone facePoint) { Rotation faceOrientation = GetFaceOrientation(); Vector facePosition = GetFacePosition(); Vector worldFacePoint = GetFaceWorldPoint(facePoint); Vector neckLocalFacePoint = worldFacePoint + facePosition; Rotation facePointOrientation = Rotation_.FromToRotation(Vector.forward, neckLocalFacePoint); facePointOrientation = Rotation.Inverse(faceOrientation) * facePointOrientation; return(facePointOrientation); }
public static Vector GetFacePointRaw(FaceBone faceBone) { int facePoint = facePoints[(int)faceBone]; if (facePoint < 0) { return(Vector.zero); } Vector facePointPosition = GetFacePoint(facePoint); return(facePointPosition); }
private static Vector GetFacePointRaw(FaceBone faceBone) { int facePoint = faceBoneIndex[(int)faceBone]; if (facePoint < 0) { return(Vector.zero); } Rotation orientation = GetFaceOrientationRaw(); Vector facePointPosition = Rotation.Inverse(orientation) * faceGeometry[facePoint]; return(facePointPosition); }
private void LerpMouthPoint(Mouth mouth, FaceBone mouthBone, FaceBone mouthBone1, FaceBone mouthBone2, float f) { if (mouthBone.bone.transform == null || mouthBone1.target.confidence.position < 0.1F || mouthBone2.target.confidence.position < 0.1F) { return; } Vector3 localPosition1 = mouthBone1.target.transform.localPosition - mouthBone1.startPosition; Vector3 localPosition2 = mouthBone2.target.transform.localPosition - mouthBone2.startPosition; Vector3 localPosition = Vector3.Lerp(localPosition1, localPosition2, f); mouthBone.target.transform.localPosition = mouthBone.startPosition + localPosition; UpdateFacePoint(faceTarget, mouthBone); }
private static void UpdateFacePoint(TargetData faceBone, FaceBone faceBoneId, Vector referencePoint) { Vector facePointPosition; if (RealsenseDevice.GetFacePoint(faceBoneId, out facePointPosition)) { facePointPosition = faceBone.startPosition + facePointPosition - referencePoint; faceBone.position = Filter(faceBone.position, facePointPosition); faceBone.confidence.position = 0.7F; } else { faceBone.confidence.position = 0; } }
public void CloneFace() { if (initFace == null) { Debug.Log("缺少初始化脸型"); return; } faceGroups.Clear(); FacePincher initFacePicher = initFace.GetComponent <FacePincher>(); foreach (FaceGroup faceGroup in initFacePicher.faceGroups) { // 初始化faceGroup数据 FaceGroup tempGroup = new FaceGroup(); faceGroups.Add(tempGroup); tempGroup.ResetData(tempGroup); foreach (FaceGroupPart faceGroupPart in faceGroup.faceGroupParts) { // 初始化faceGroupPart数据 FaceGroupPart tempFaceGroupPart = new FaceGroupPart(); tempGroup.faceGroupParts.Add(tempFaceGroupPart); tempFaceGroupPart.ResetData(faceGroupPart); foreach (FaceBone faceBone in faceGroupPart.faceBones) { // 初始化faceBone数据 FaceBone tempFaceBones = new FaceBone(); tempFaceGroupPart.faceBones.Add(tempFaceBones); string path = ""; Transform tempTrans = faceBone.bone; Transform root = faceBone.bone.root; while (tempTrans != root) { path = tempTrans.name + path; if (tempTrans.parent != root) { path = "/" + path; } tempTrans = tempTrans.parent; } Transform bone = transform.Find(path); tempFaceBones.ResetData(faceBone, bone, bone); } } } OnValidate(); }
public static Vector GetFaceWorldPoint(FaceBone facePoint) { return(ToWorldPosition(GetFacePoint(facePoint))); }
public static bool GetFacePoint(FaceBone faceBone, out Vector position) { position = GetFacePointRaw(faceBone) + faceBias[(int)faceBone]; return(true); }