Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
 // 重置数据(初始化成其他脸型)
 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;
 }
Ejemplo n.º 3
0
        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();
            }
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        public static Vector GetFacePointRaw(FaceBone faceBone)
        {
            int facePoint = facePoints[(int)faceBone];

            if (facePoint < 0)
            {
                return(Vector.zero);
            }

            Vector facePointPosition = GetFacePoint(facePoint);

            return(facePointPosition);
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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;
            }
        }
Ejemplo n.º 9
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();
    }
Ejemplo n.º 10
0
 public static Vector GetFaceWorldPoint(FaceBone facePoint)
 {
     return(ToWorldPosition(GetFacePoint(facePoint)));
 }
Ejemplo n.º 11
0
 public static bool GetFacePoint(FaceBone faceBone, out Vector position)
 {
     position = GetFacePointRaw(faceBone) + faceBias[(int)faceBone];
     return(true);
 }