public AnimationClip CreateAnim(RName name, CGfxSkeletonPose pose) { var seq = AnimationClip.CreateSync(name); seq.Bind(pose); return(seq); }
//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)); }
public static void ZeroPose(CGfxSkeletonPose pose) { if (pose == null) { return; } SDK_GfxAnimationRuntime_ZeroPose(pose.CoreObject); }
public static void ConvertRotationToLocalSpace(CGfxSkeletonPose pose) { if (pose == null) { return; } SDK_GfxAnimationRuntime_ConvertRotationToLocalSpace(pose.CoreObject); }
public static void FastCopyPose(CGfxSkeletonPose desPose, CGfxSkeletonPose srcPose) { if (desPose == null || srcPose == null) { return; } SDK_GfxAnimationRuntime_FastCopyPose(desPose.CoreObject, srcPose.CoreObject); }
public static void CopyPoseAndConvertRotationToLocalSpace(CGfxSkeletonPose desPose, CGfxSkeletonPose srcPose) { if (desPose == null || srcPose == null) { return; } CopyPose(desPose, srcPose); ConvertRotationToLocalSpace(desPose); }
public static void CopyPoseAndConvertMeshSpace(CGfxSkeletonPose desPose, CGfxSkeletonPose srcPose) { if (desPose == null || srcPose == null) { return; } CopyPose(desPose, srcPose); ConvertToMeshSpace(desPose); }
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); }
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); } }
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); } }
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); } }
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); } }
public void GetAnimaPose(Int64 time, ref CGfxSkeletonPose pose, bool withMotionData = true) { SDK_GfxSkeletonAction_GetAnimaPose(CoreObject, time, pose.CoreObject, vBOOL.FromBoolean(withMotionData)); }
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(); }
public void GetAnimaPose(float time, ref CGfxSkeletonPose pose, bool evaluateMotionState = true) { SDK_GfxSkeletonAnimation_EvaluatePose(CoreObject, time, pose.CoreObject, vBOOL.FromBoolean(evaluateMotionState)); }