Esempio n. 1
0
        public AnimationClip CreateAnim(RName name, CGfxSkeletonPose pose)
        {
            var seq = AnimationClip.CreateSync(name);

            seq.Bind(pose);
            return(seq);
        }
Esempio n. 2
0
 //public static void MinusPoseMeshSpace(CGfxSkeletonPose outPose, CGfxSkeletonPose minusPose, CGfxSkeletonPose minuendPose)
 //{
 //    if (outPose == null || minusPose == null || minuendPose == null)
 //        return;
 //    SDK_GfxAnimationRuntime_MinusPoseMeshSpace(outPose.CoreObject, minusPose.CoreObject, minuendPose.CoreObject);
 //}
 public static bool IsZeroPose(CGfxSkeletonPose pose)
 {
     if (pose == null)
     {
         return(true);
     }
     return(SDK_GfxAnimationRuntime_IsZeroPose(pose.CoreObject));
 }
Esempio n. 3
0
 public static void ZeroPose(CGfxSkeletonPose pose)
 {
     if (pose == null)
     {
         return;
     }
     SDK_GfxAnimationRuntime_ZeroPose(pose.CoreObject);
 }
Esempio n. 4
0
 public static void ConvertRotationToLocalSpace(CGfxSkeletonPose pose)
 {
     if (pose == null)
     {
         return;
     }
     SDK_GfxAnimationRuntime_ConvertRotationToLocalSpace(pose.CoreObject);
 }
Esempio n. 5
0
 public static void FastCopyPose(CGfxSkeletonPose desPose, CGfxSkeletonPose srcPose)
 {
     if (desPose == null || srcPose == null)
     {
         return;
     }
     SDK_GfxAnimationRuntime_FastCopyPose(desPose.CoreObject, srcPose.CoreObject);
 }
Esempio n. 6
0
 public static void CopyPoseAndConvertRotationToLocalSpace(CGfxSkeletonPose desPose, CGfxSkeletonPose srcPose)
 {
     if (desPose == null || srcPose == null)
     {
         return;
     }
     CopyPose(desPose, srcPose);
     ConvertRotationToLocalSpace(desPose);
 }
Esempio n. 7
0
 public static void CopyPoseAndConvertMeshSpace(CGfxSkeletonPose desPose, CGfxSkeletonPose srcPose)
 {
     if (desPose == null || srcPose == null)
     {
         return;
     }
     CopyPose(desPose, srcPose);
     ConvertToMeshSpace(desPose);
 }
Esempio n. 8
0
        public override void Update(GPlacementComponent placement)
        {
            var mesh         = Host.GetComponent <GMeshComponent>();
            var skinModifier = mesh.SceneMesh.MdfQueue.FindModifier <EngineNS.Graphics.Mesh.CGfxSkinModifier>();

            if (curPose == null)
            {
                curPose = CEngine.Instance.SkeletonAssetManager.GetSkeleton(CEngine.Instance.RenderContext, RName.GetRName(skinModifier.SkeletonAsset)).CreateSkeletonPose();
            }
            var movement = Host.GetComponent <GMovementComponent>();

            mGoal.HostPlacement = Host.Placement;
            mGoal.Trajectory    = movement.FutureTrajectory;
            mGoal.CurrentPose   = curPose;
            var bestMotionPose = MotionMatchingSystem.Instance.GetBestMatchingPose(motionField, mGoal);

            if (bestMotionPose != null)
            {
                if (currentBestMotionPose != null && currentBestMotionPose.HashName == bestMotionPose.HashName)
                {
                    if (currentBestMotionPose.PlayTime - bestMotionPose.PlayTime < 5)
                    {
                        currentAnimTime += CEngine.Instance.EngineElapseTime;
                        var time = currentAnimTime % (motionField.Motions[currentAnimaHash].DurationInMilliSecond + 1);
                        curPose = motionField.Motions[currentAnimaHash].GetAnimationSkeletonPose(time * 0.001f);
                    }
                    else
                    {
                        currentBestMotionPose = bestMotionPose;
                        currentAnimaHash      = bestMotionPose.HashName;
                        currentAnimTime       = bestMotionPose.PlayTime;
                    }
                }
                else
                {
                    currentBestMotionPose = bestMotionPose;
                    currentAnimaHash      = bestMotionPose.HashName;
                    currentAnimTime       = bestMotionPose.PlayTime;
                }
            }
            //curPose.ExtractRootMotionPosition(true);
            //curPose.BlendWithTargetPose(skinModifier.AnimationPose, 0.5f);
            skinModifier.AnimationPose = curPose;
            if (!mIsDebug)
            {
                return;
            }
            DebugTick(placement);
        }
Esempio n. 9
0
 public static void MinusPose(CGfxSkeletonPose outPose, CGfxSkeletonPose minusPose, CGfxSkeletonPose minuendPose)
 {
     if (outPose == null || minusPose == null || minuendPose == null)
     {
         return;
     }
     if (outPose.HashSkeleton == minusPose.HashSkeleton && outPose.HashSkeleton == minuendPose.HashSkeleton)
     {
         SDK_GfxAnimationRuntime_FastMinusPose(outPose.CoreObject, minusPose.CoreObject, minuendPose.CoreObject);
     }
     else
     {
         SDK_GfxAnimationRuntime_MinusPose(outPose.CoreObject, minusPose.CoreObject, minuendPose.CoreObject);
     }
 }
Esempio n. 10
0
 public static void AddPose(CGfxSkeletonPose outPose, CGfxSkeletonPose basePose, CGfxSkeletonPose additivePose, float alpha)
 {
     if (outPose == null || basePose == null || additivePose == null)
     {
         return;
     }
     if (outPose.HashSkeleton == basePose.HashSkeleton && outPose.HashSkeleton == additivePose.HashSkeleton)
     {
         SDK_GfxAnimationRuntime_FastAddPose(outPose.CoreObject, basePose.CoreObject, additivePose.CoreObject, alpha);
     }
     else
     {
         SDK_GfxAnimationRuntime_AddPose(outPose.CoreObject, basePose.CoreObject, additivePose.CoreObject, alpha);
     }
 }
Esempio n. 11
0
 public static void BlendPose(CGfxSkeletonPose outPose, CGfxSkeletonPose aPose, CGfxSkeletonPose bPose, float weight)
 {
     if (outPose == null || aPose == null || bPose == null)
     {
         return;
     }
     if (outPose.HashSkeleton == aPose.HashSkeleton && outPose.HashSkeleton == bPose.HashSkeleton)
     {
         SDK_GfxAnimationRuntime_FastBlendPose(outPose.CoreObject, aPose.CoreObject, bPose.CoreObject, weight);
     }
     else
     {
         SDK_GfxAnimationRuntime_BlendPose(outPose.CoreObject, aPose.CoreObject, bPose.CoreObject, weight);
     }
 }
Esempio n. 12
0
 public static void CopyPose(CGfxSkeletonPose desPose, CGfxSkeletonPose srcPose)
 {
     if (desPose == null || srcPose == null)
     {
         return;
     }
     if (desPose.ReferenceSkeleton.GetHashCode() == srcPose.ReferenceSkeleton.GetHashCode())
     {
         SDK_GfxAnimationRuntime_FastCopyPose(desPose.CoreObject, srcPose.CoreObject);
     }
     else
     {
         SDK_GfxAnimationRuntime_CopyPose(desPose.CoreObject, srcPose.CoreObject);
     }
 }
Esempio n. 13
0
 public void GetAnimaPose(Int64 time, ref CGfxSkeletonPose pose, bool withMotionData = true)
 {
     SDK_GfxSkeletonAction_GetAnimaPose(CoreObject, time, pose.CoreObject, vBOOL.FromBoolean(withMotionData));
 }
Esempio n. 14
0
        public override void OnBeginPlay(GPlacementComponent placement)
        {
            var mesh              = Host.GetComponent <GMeshComponent>();
            var skinModifier      = mesh.SceneMesh.MdfQueue.FindModifier <EngineNS.Graphics.Mesh.CGfxSkinModifier>();
            var SkeletonAssetName = RName.GetRName(skinModifier.SkeletonAsset);

            pose = CEngine.Instance.SkeletonAssetManager.GetSkeleton(CEngine.Instance.RenderContext, SkeletonAssetName).CreateSkeletonPose();
            //var Goodrun = CreateAnim(RName.GetRName("TitanDemo/Character/test_girl/animation/goodrun.vanims"), pose);
            //motionField.Add(Goodrun);
            //var walk2jogneutral = CreateAnim(RName.GetRName("TitanDemo/Character/test_girl/animation/ntsc walk to jog neutral.vanims"), pose);
            //motionField.Add(walk2jogneutral);
            var animationFilePath = RName.GetRName("TitanDemo/Character/puppet_low_ue4/animation");
            //var files = CEngine.Instance.FileManager.GetFiles(animationFilePath.Address);
            //for (int i = 0; i < files.Length; ++i)
            //{

            //    if (CEngine.Instance.FileManager.GetFileExtension(files[i], true) == CEngineDesc.AnimationSequenceExtension)
            //    {
            //        var anim = CreateAnim(RName.EditorOnly_GetRNameFromAbsFile(files[i]), pose);
            //        motionField.Add(anim);
            //    }
            //}
            //var walktorun = CreateAnim(RName.GetRName("TitanDemo/Character/puppet_low_ue4/animation/ntsc_walk_to_run.anim"), pose);
            //motionField.Add(walktorun);
            //var walktorun2 = CreateAnim(RName.GetRName("TitanDemo/Character/puppet_low_ue4/animation/ntsc_walk_to_run2.anim"), pose);
            //motionField.Add(walktorun2);
            var RunLoop = CreateAnim(RName.GetRName("TitanDemo/Character/puppet_low_ue4/animation/runloop.anim"), pose);

            motionField.Add(RunLoop);
            //var RunLoopC = CreateAnim(RName.GetRName("TitanDemo/Character/puppet_low_ue4/animation/runloopc.anim"), pose);
            //motionField.Add(RunLoopC);
            var RunStart = CreateAnim(RName.GetRName("TitanDemo/Character/puppet_low_ue4/animation/runstart.anim"), pose);

            motionField.Add(RunStart);
            var RunStop = CreateAnim(RName.GetRName("TitanDemo/Character/puppet_low_ue4/animation/runstop.anim"), pose);

            motionField.Add(RunStop);
            var RunTurnL = CreateAnim(RName.GetRName("TitanDemo/Character/puppet_low_ue4/animation/runturnl.anim"), pose);

            motionField.Add(RunTurnL);
            var RunTurnR = CreateAnim(RName.GetRName("TitanDemo/Character/puppet_low_ue4/animation/runturnr.anim"), pose);

            motionField.Add(RunTurnR);
            //var Runx = CreateAnim(RName.GetRName("TitanDemo/Character/puppet_low_ue4/animation/runx.anim"), pose);
            //motionField.Add(Runx);
            var ntsc_ambeint2 = CreateAnim(RName.GetRName("TitanDemo/Character/puppet_low_ue4/animation/ntsc_ambeint2.anim"), pose);

            motionField.Add(ntsc_ambeint2);
            skinModifier.AnimationPose = pose;

            if (!mIsDebug)
            {
                return;
            }
            if (Host.Scene.World == null)
            {
                return;
            }
            Action action = async() =>
            {
                await InitDebug();
            };

            action.Invoke();
        }
Esempio n. 15
0
 public void GetAnimaPose(float time, ref CGfxSkeletonPose pose, bool evaluateMotionState = true)
 {
     SDK_GfxSkeletonAnimation_EvaluatePose(CoreObject, time, pose.CoreObject, vBOOL.FromBoolean(evaluateMotionState));
 }