public async System.Threading.Tasks.Task SetObjectToEdit(ResourceEditorContext context) { await EngineNS.Thread.AsyncDummyClass.DummyFunc(); var info = context.ResInfo as EditorCommon.ResourceInfos.SkeletonResourceInfo; if (mCurrentResourceInfo == null || mCurrentResourceInfo.ResourceName != info.ResourceName) { mCurrentResourceInfo = info; SetBinding(TitleProperty, new Binding("ResourceName") { Source = context.ResInfo, Converter = new EditorCommon.Converter.RNameConverter_PureName() }); IconBrush = context.ResInfo.ResourceTypeBrush; mSkeletonTreeViewOperation = new SkeletonTreeViewOperation(); mSkeleton = EngineNS.CEngine.Instance.SkeletonAssetManager.GetSkeleton(EngineNS.CEngine.Instance.RenderContext, mCurrentResourceInfo.ResourceName); mSkeletonTreeViewOperation.Skeleton = mSkeleton; mSkeletonTreeViewOperation.SkeletonTreeView = TreeView_Skeleton; CreateSkeletonTreeView(); await CachingPreviewMeshOfSkeleton(); await mPreviewSceneControl.Initialize(mSceneName); ProGrid_PreviewScene.Instance = mPreviewSceneControl; await PreviewMeshChanged(); CEngine.Instance.TickManager.AddTickInfo(this); } }
public EditorBoneDetial(CGfxSkeleton skeleton, CGfxBone bone, CGfxBone parentBone) { mBone = bone; mParentBone = parentBone; if (bone.ChildNumber > 0) { for (uint i = 0; i < bone.ChildNumber; ++i) { var childIndex = bone.GetChild(i); var child = skeleton.GetBone(childIndex); mChildren.Add(new EditorBoneDetial(skeleton, child, bone)); } } }
public void SetObject(EditorAnimationClip animSequence, AnimationClipResourceInfo resourceInfo) { mEditorAnimationClip = animSequence; mCurrentResourceInfo = resourceInfo; mSkeletonAsset = EngineNS.CEngine.Instance.SkeletonAssetManager.GetSkeleton(EngineNS.CEngine.Instance.RenderContext, RName.GetRName(mCurrentResourceInfo.SkeletonAsset)); AnimationPlayingCtrl.AnimationName = mEditorAnimationClip.AnimationClip.Name.PureName(); AnimationPlayingCtrl.TotalFrame = mEditorAnimationClip.AnimationClip.KeyFrames; AnimationPlayingCtrl.Duration = mEditorAnimationClip.AnimationClip.Duration; AnimationPlayingCtrl.OnTickBarScaling += AnimationPlayingCtrl_OnTickBarScaling; if (mCurrentResourceInfo.NotifyTrackMap != null && mCurrentResourceInfo.NotifyTrackMap.Count != 0) { EngineNS.Thread.ASyncSemaphore smp = EngineNS.Thread.ASyncSemaphore.CreateSemaphore(mCurrentResourceInfo.TrackCount); for (int i = 0; i < mCurrentResourceInfo.TrackCount; ++i) { var notify = CreateNotifyTrack(i); AddNotifyTrack(i, notify, false); notify.OnLoaded += (sender, e) => { smp.Release(); }; } Action action = async() => { await smp.Await(); foreach (var notify in mEditorAnimationClip.AnimationClip.InstanceNotifies) { var trackId = GetTrackId(notify.ID); if (trackId >= 0) { var getter = mNotifyEditeControlList[trackId].AddNotify(notify.NotifyName, notify); mEditorAnimationClip.NofityPairs.Add(notify.ID, getter); } } foreach (var pair in mCurrentResourceInfo.NotifyTrackMap) { var trackId = GetTrackId(pair.NotifyID); if (trackId >= 0) { } } }; action.Invoke(); } else { AddNotifyTrack(0, CreateNotifyTrack(0)); } }
public CGfxSkeletonAction GetSkeletonAction(CGfxSkeleton skeleton, RName name, bool firstLoad = true) { CGfxSkeletonAction action; if (false == SkeletonActions.TryGetValue(name, out action)) { action = new CGfxSkeletonAction(); if (action.MakeTPoseActionFromSkeleton(skeleton, name, firstLoad) == false) { return(null); } SkeletonActions.Add(name, action); } return(action); }
public bool MakeTPoseActionFromSkeleton(CGfxSkeleton skeleton, RName name, bool firstLoad) { if (false == SDK_GfxSkeletonAction_MakeTPoseActionFromSkeleton(CoreObject, skeleton.CoreObject, name.Name, firstLoad)) { return(false); } var num = SDK_GfxSkeletonAction_GetBoneNumber(CoreObject); mAnimNodes = new CGfxBoneAnim[num]; for (UInt32 i = 0; i < num; i++) { var ptr = SDK_GfxSkeletonAction_GetBoneAnum(CoreObject, i); if (ptr.Pointer == IntPtr.Zero) { continue; } mAnimNodes[i] = new CGfxBoneAnim(ptr); } return(true); }
protected override async System.Threading.Tasks.Task CreateVmsAndGms(CRenderContext rc, uint meshIndex) { if (!mImportOption.ImportMesh) { return; } //导入不经过MeshPrimitivesManager //var meshPrimitive = CEngine.Instance.MeshPrimitivesManager.NewMeshPrimitives(rc,, 1); //meshPrimitive.Name var namePtr = SDK_AssetImporter_GetMeshNameByIndex(mCoreObject, meshIndex); var ansiString = Marshal.PtrToStringAnsi(namePtr); if (MeshPrimitives.ContainsKey(ansiString)) { ansiString += meshIndex.ToString(); } var atom = SDK_AssetImporter_GetMesAtomByIndex(mCoreObject, meshIndex); var meshPrimitive = new EngineNS.Graphics.Mesh.CGfxMeshPrimitives(); var fullPath = RName.EditorOnly_GetRNameFromAbsFile(mAbsSavePath + "/" + ansiString + CEngineDesc.MeshSourceExtension); CEngine.Instance.MeshPrimitivesManager.RemoveMeshPimitives(fullPath); if (Async) { await CEngine.Instance.EventPoster.Post(async() => { OnResourceImportCheck(this, AsseetImportType.AIT_Import, "CreateMeshPrimitive"); meshPrimitive.Init(rc, fullPath, atom); SDK_AssetImporter_GetMeshPrimitiveByIndex(mCoreObject, rc.CoreObject, meshIndex, meshPrimitive.CoreObject); var skinNativePointer = SDK_AssetImporter_BuildMeshPrimitiveSkinModifierByIndex(mCoreObject, rc.CoreObject, meshIndex, meshPrimitive.CoreObject); if (skinNativePointer.GetPointer() != IntPtr.Zero) { var skinModifier = new CGfxSkinModifier(skinNativePointer); var nativeSkeleton = CGfxSkinModifier.SDK_GfxSkinModifier_GetSkeleton(skinNativePointer); CGfxSkeleton skeleton = new CGfxSkeleton(nativeSkeleton); EngineNS.Bricks.Animation.Pose.CGfxSkeletonPose pose = new EngineNS.Bricks.Animation.Pose.CGfxSkeletonPose(); for (uint i = 0; i < skeleton.BoneTab.BoneNumberNative; ++i) { pose.NewBone(skeleton.BoneTab.GetBoneNative(i).BoneDescNative); } CGfxSkeleton csSkeleton = new CGfxSkeleton(); csSkeleton.BoneTab = pose; skinModifier.Skeleton = csSkeleton; meshPrimitive.MdfQueue.AddModifier(skinModifier); if (mImportOption.SkeletonAssetName != null && mImportOption.SkeletonAssetName != RName.EmptyName) { var skeletonAsset = EngineNS.CEngine.Instance.SkeletonAssetManager.GetSkeleton(rc, mImportOption.SkeletonAssetName, false); skinModifier.SkeletonAsset = mImportOption.SkeletonAssetName.Name; mSkeletonAsset = mImportOption.SkeletonAssetName.Name; } else { OnResourceImportCheck(this, AsseetImportType.AIT_Import, "CreateSkeleton"); var pureName = CEngine.Instance.FileManager.GetPureFileFromFullName(mAbsFileName, false); var path = mAbsSavePath + "/" + pureName + CEngineDesc.SkeletonExtension; var assetName = RName.EditorOnly_GetRNameFromAbsFile(path); var skeletonAsset = EngineNS.CEngine.Instance.SkeletonAssetManager.CreateSkeletonAsset(rc, assetName, skinModifier); skinModifier.SkeletonAsset = assetName.Name; mSkeletonAsset = assetName.Name; if (!mSkeletonNeedInfo.ContainsKey(pureName)) { mSkeletonNeedInfo.Add(pureName, assetName); } } } MeshPrimitives.Add(ansiString, meshPrimitive); if (mImportOption.AsPhyGemoConvex || mImportOption.AsPhyGemoTri) { foreach (var i in MeshPrimitives.Values) { CGfxMeshPrimitives meshprimitive = i as CGfxMeshPrimitives; if (mImportOption.AsPhyGemoConvex) { meshprimitive.CookAndSavePhyiscsGeomAsConvex(CEngine.Instance.RenderContext, EngineNS.CEngine.Instance.PhyContext); } else if (mImportOption.AsPhyGemoTri) { meshprimitive.CookAndSavePhyiscsGeomAsTriMesh(CEngine.Instance.RenderContext, EngineNS.CEngine.Instance.PhyContext); } } } else { await CEngine.Instance.EventPoster.Post(() => { meshPrimitive.SaveMesh(); return(true); }, EngineNS.Thread.Async.EAsyncTarget.Render); //gms if (mImportOption.CreatedGms) { OnResourceImportCheck(this, AsseetImportType.AIT_Import, "CreateMesh"); var meshRName = RName.EditorOnly_GetRNameFromAbsFile(mAbsSavePath + "/" + ansiString + CEngineDesc.MeshExtension); var mesh = CEngine.Instance.MeshManager.CreateMesh(rc, meshRName, meshPrimitive); CEngine.Instance.MeshManager.RemoveMesh(meshRName); mesh.Init(rc, meshRName, meshPrimitive); var mtl = await EngineNS.CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync(rc, RName.GetRName("Material/defaultmaterial.instmtl")); for (int i = 0; i < mesh.MtlMeshArray.Length; ++i) { await mesh.SetMaterialInstanceAsync(rc, (uint)i, mtl, CEngine.Instance.PrebuildPassData.DefaultShadingEnvs); } Meshes.Add(ansiString, mesh); mesh.SaveMesh(); } } return(true); }, EngineNS.Thread.Async.EAsyncTarget.AsyncEditor); } else { OnResourceImportCheck(this, AsseetImportType.AIT_Import, "CreateMeshPrimitive"); meshPrimitive.Init(rc, fullPath, atom); SDK_AssetImporter_GetMeshPrimitiveByIndex(mCoreObject, rc.CoreObject, meshIndex, meshPrimitive.CoreObject); var skinNativePointer = SDK_AssetImporter_BuildMeshPrimitiveSkinModifierByIndex(mCoreObject, rc.CoreObject, meshIndex, meshPrimitive.CoreObject); if (skinNativePointer.GetPointer() != IntPtr.Zero) { var skinModifier = new CGfxSkinModifier(skinNativePointer); meshPrimitive.MdfQueue.AddModifier(skinModifier); if (mImportOption.SkeletonAssetName != null) { var skeletonAsset = EngineNS.CEngine.Instance.SkeletonAssetManager.GetSkeleton(rc, mImportOption.SkeletonAssetName, false); skinModifier.SkeletonAsset = mImportOption.SkeletonAssetName.Name; } else { var pureName = CEngine.Instance.FileManager.GetPureFileFromFullName(mAbsFileName, false); var path = mAbsSavePath + "/" + pureName + CEngineDesc.SkeletonExtension; var assetName = RName.EditorOnly_GetRNameFromAbsFile(path); var skeletonAsset = EngineNS.CEngine.Instance.SkeletonAssetManager.CreateSkeletonAsset(rc, assetName, skinModifier); skinModifier.SkeletonAsset = assetName.Name; if (!mSkeletonNeedInfo.ContainsKey(pureName)) { mSkeletonNeedInfo.Add(pureName, assetName); } } } MeshPrimitives.Add(ansiString, meshPrimitive); meshPrimitive.SaveMesh(); //gms if (mImportOption.CreatedGms) { OnResourceImportCheck(this, AsseetImportType.AIT_Import, "CreateMes"); var meshRName = RName.EditorOnly_GetRNameFromAbsFile(mAbsSavePath + "/" + ansiString + CEngineDesc.MeshExtension); var mesh = CEngine.Instance.MeshManager.CreateMesh(rc, meshRName, meshPrimitive); CEngine.Instance.MeshManager.RemoveMesh(meshRName); mesh.Init(rc, meshRName, meshPrimitive); var mtl = await EngineNS.CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync(rc, RName.GetRName("Material/defaultmaterial.instmtl")); for (int i = 0; i < mesh.MtlMeshArray.Length; ++i) { await mesh.SetMaterialInstanceAsync(rc, (uint)i, mtl, CEngine.Instance.PrebuildPassData.DefaultShadingEnvs); } Meshes.Add(ansiString, mesh); mesh.SaveMesh(); } } //foreach(var mp in MeshPrimitives) //{ // mp.Value.SaveMesh(); //} //foreach(var mesh in Meshes) //{ // mesh.Value.SaveMesh(); //} //var info = await EditorCommon.Resources.ResourceInfoManager.Instance.CreateResourceInfoFromResource(fullPath.Address); //info.Save(); return; }
public void FixBoneAnimPose(CGfxSkeleton skeleton) { SDK_GfxSkeletonAction_FixBoneAnimPose(CoreObject, skeleton.CoreObject); }