public override bool CheckIfNeedImport() { mAnimAbsFilePath = RName.EditorOnly_GetRNameFromAbsFile(AssetImportOption.AbsSavePath + "/" + AssetImportOption.Name + CEngineDesc.AnimationClipExtension); var operationResult = AssetImportMessageType.AMT_UnKnown; if (EngineNS.CEngine.Instance.FileManager.FileExists(mAnimAbsFilePath.Address)) { var userDesire = _OnCreaterAssetImportMessageDumping(this, AssetImportMessageType.AMT_FileExist, 0, "FileExist", ImportPercent); operationResult = FileOperation(userDesire, mAnimAbsFilePath); } if (operationResult == AssetImportMessageType.AMT_IgnoreFile) { ImportPercent = 1.0f; _OnCreaterAssetImportMessageDumping(this, AssetImportMessageType.AMT_Import, 0, "Skip", ImportPercent); return(false); } if (operationResult == AssetImportMessageType.AMT_RenameFile) { var validName = GetValidFileName(AssetImportOption.AbsSavePath, AssetImportOption.Name, CEngineDesc.AnimationClipExtension); mAnimAbsFilePath = RName.EditorOnly_GetRNameFromAbsFile(validName); return(true); } if (operationResult == AssetImportMessageType.AMT_DeleteOriginFile) { return(true); } return(true); }
bool CheckPhyGeomIfNeedImport(CGfxMeshImportOption option, string phyGeomType) { mPhyAbsFilePath = RName.EditorOnly_GetRNameFromAbsFile(CEngine.Instance.FileManager.RemoveExtension(MeshPrimitives.Name.Address) + phyGeomType); if (EngineNS.CEngine.Instance.FileManager.FileExists(mPhyAbsFilePath.Address)) { var userDesire = _OnCreaterAssetImportMessageDumping(this, AssetImportMessageType.AMT_FileExist, 0, "Save", ImportPercent); mOperationResult = FileOperation(userDesire, mPhyAbsFilePath); } if (mOperationResult == AssetImportMessageType.AMT_IgnoreFile) { ImportPercent = 1.0f; _OnCreaterAssetImportMessageDumping(this, AssetImportMessageType.AMT_Import, 0, "Skip", ImportPercent); return(false); } if (mOperationResult == AssetImportMessageType.AMT_RenameFile) { int index = GetValidFileNameSuffix(AssetImportOption.AbsSavePath, option.Name, phyGeomType); mVmsAbsFilePath = RName.EditorOnly_GetRNameFromAbsFile(AssetImportOption.AbsSavePath + "/" + option.Name + index.ToString() + phyGeomType); mGmsAbsFilePath = RName.EditorOnly_GetRNameFromAbsFile(AssetImportOption.AbsSavePath + "/" + option.Name + index.ToString() + phyGeomType); return(true); } if (mOperationResult == AssetImportMessageType.AMT_DeleteOriginFile) { return(true); } return(true); }
public override void Init() { var option = AssetImportOption as CGfxMeshImportOption; var name = option.Name; MeshPrimitives = new EngineNS.Graphics.Mesh.CGfxMeshPrimitives(); var fullPath = RName.EditorOnly_GetRNameFromAbsFile(AssetImportOption.AbsSavePath + "/" + name + CEngineDesc.MeshSourceExtension); MeshPrimitives.Init(CEngine.Instance.RenderContext, fullPath, option.RenderAtom); }
protected override async System.Threading.Tasks.Task CreateAnimationSequence(CRenderContext rc, uint actionIndex) { if (!mImportOption.ImportAnimation) { return; } var namePtr = SDK_AssetImporter_GetActionNameByIndex(mCoreObject, actionIndex); var ansiString = Marshal.PtrToStringAnsi(namePtr); ansiString = CEngine.Instance.FileManager.GetPureFileFromFullName(mAbsFileName, false); //var skeletonAction = new EngineNS.Graphics.Mesh.Skeleton.CGfxSkeletonAction(); //skeletonAction.Init(rc, RName.GetRName(savePath.Name + "/" + ansiString + CEngineDesc.AnimationSegementExtension)); //SDK_AssetImporter_GetSkeletonActionByIndex(mCoreObject, rc.CoreObject, i, skeletonAction.CoreObject); var animSegement = new CGfxAnimationSequence(); if (mImportOption.SkeletonAssetName != null && mImportOption.SkeletonAssetName != RName.EmptyName) { mSkeletonAsset = mImportOption.SkeletonAssetName.Name; } if (Async) { await CEngine.Instance.EventPoster.Post(() => { OnResourceImportCheck(this, AsseetImportType.AIT_Import, "CreateAnimationSequence"); animSegement.SkeletonAction = new CGfxSkeletonAction(); SDK_AssetImporter_GetSkeletonActionByIndex(mCoreObject, rc.CoreObject, actionIndex, animSegement.SkeletonAction.CoreObject); var name = RName.EditorOnly_GetRNameFromAbsFile(mAbsSavePath + "/" + ansiString + CEngineDesc.AnimationSequenceExtension); animSegement.SkeletonAssetName = mImportOption.SkeletonAssetName; var skeleton = EngineNS.CEngine.Instance.SkeletonAssetManager.GetSkeleton(rc, animSegement.SkeletonAssetName); //animSegement.SkeletonAction.FixBoneTree(skeleton); //animSegement.SkeletonAction.FixBoneAnimPose(skeleton); SDK_AssetImporter_CaculateSkeletonActionMotionData(mCoreObject, rc.CoreObject, animSegement.SkeletonAction.CoreObject, skeleton.BoneTab.Clone().CoreObject); animSegement.SaveAs(name); Actions.Add(ansiString, animSegement); return(true); }, EngineNS.Thread.Async.EAsyncTarget.AsyncEditor); } else { OnResourceImportCheck(this, AsseetImportType.AIT_Import, "CreateAnimationSequence"); animSegement.SkeletonAction = new CGfxSkeletonAction(); SDK_AssetImporter_GetSkeletonActionByIndex(mCoreObject, rc.CoreObject, actionIndex, animSegement.SkeletonAction.CoreObject); var name = RName.EditorOnly_GetRNameFromAbsFile(mAbsSavePath + "/" + ansiString + CEngineDesc.AnimationSequenceExtension); animSegement.SkeletonAssetName = mImportOption.SkeletonAssetName; var skeleton = EngineNS.CEngine.Instance.SkeletonAssetManager.GetSkeleton(rc, animSegement.SkeletonAssetName); SDK_AssetImporter_CaculateSkeletonActionMotionData(mCoreObject, rc.CoreObject, animSegement.SkeletonAction.CoreObject, skeleton.BoneTab.Clone().CoreObject); animSegement.SkeletonAction.FixBoneTree(skeleton); animSegement.SkeletonAction.FixBoneAnimPose(skeleton); animSegement.SaveAs(name); Actions.Add(ansiString, animSegement); } return; }
public override bool CheckIfNeedImport() { var option = AssetImportOption as CGfxMeshImportOption; if (option.AsPhyGemoConvex || option.AsPhyGemoTri) { if (option.AsPhyGemoConvex) { return(CheckPhyGeomIfNeedImport(option, CEngineDesc.PhyConvexGeom)); } else if (option.AsPhyGemoTri) { return(CheckPhyGeomIfNeedImport(option, CEngineDesc.PhyTriangleMeshGeom)); } else if (option.AsPhyGemoHeightField) { return(CheckPhyGeomIfNeedImport(option, CEngineDesc.PhyHeightFieldGeom)); } } else { mVmsAbsFilePath = MeshPrimitives.Name; mGmsAbsFilePath = RName.EditorOnly_GetRNameFromAbsFile(AssetImportOption.AbsSavePath + "/" + option.Name + CEngineDesc.MeshExtension); if (EngineNS.CEngine.Instance.FileManager.FileExists(mVmsAbsFilePath.Address)) { var userDesire = _OnCreaterAssetImportMessageDumping(this, AssetImportMessageType.AMT_FileExist, 0, "Save", ImportPercent); mOperationResult = FileOperation(userDesire, mVmsAbsFilePath); if (option.CreateGms) { FileOperation(userDesire, mGmsAbsFilePath); } } if (mOperationResult == AssetImportMessageType.AMT_IgnoreFile) { ImportPercent = 1.0f; _OnCreaterAssetImportMessageDumping(this, AssetImportMessageType.AMT_Import, 0, "Skip", ImportPercent); return(false); } if (mOperationResult == AssetImportMessageType.AMT_RenameFile) { int index = GetValidFileNameSuffix(AssetImportOption.AbsSavePath, option.Name, CEngineDesc.MeshSourceExtension); mVmsAbsFilePath = RName.EditorOnly_GetRNameFromAbsFile(AssetImportOption.AbsSavePath + "/" + option.Name + index.ToString() + CEngineDesc.MeshSourceExtension); mGmsAbsFilePath = RName.EditorOnly_GetRNameFromAbsFile(AssetImportOption.AbsSavePath + "/" + option.Name + index.ToString() + CEngineDesc.MeshExtension); return(true); } if (mOperationResult == AssetImportMessageType.AMT_DeleteOriginFile) { return(true); } } 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 override async System.Threading.Tasks.Task SaveAsset() { var option = AssetImportOption as CGfxMeshImportOption; var rc = CEngine.Instance.RenderContext; if (option.AsPhyGemoConvex || option.AsPhyGemoTri || option.AsPhyGemoHeightField) { if (option.AsPhyGemoConvex) { await SavePhyConvexAsset(); } else if (option.AsPhyGemoTri) { await SavePhyTriMeshAsset(); } else if (option.AsPhyGemoHeightField) { await SavePhyHeightFieldAsset(); } } else { MeshPrimitives.MdfQueue.SyncNativeModifiers(); string skeletonAssetName = ""; if (option.HaveSkin) { var skinModifier = MeshPrimitives.MdfQueue.FindModifier <CGfxSkinModifier>(); if (skinModifier != null) { if (option.Skeleton != RName.EmptyName) { skinModifier.SkeletonAsset = option.Skeleton.Name; skeletonAssetName = option.Skeleton.Name; } else { var pureName = CEngine.Instance.FileManager.GetPureFileFromFullName(mVmsAbsFilePath.Name, false); var path = AssetImportOption.AbsSavePath + "/" + pureName + CEngineDesc.SkeletonExtension; var assetName = RName.EditorOnly_GetRNameFromAbsFile(path); EngineNS.CEngine.Instance.SkeletonAssetManager.Remove(assetName); var skeletonAsset = new Animation.Skeleton.CGfxSkeleton(SDK_GfxAsset_MeshCreater_GetFullSkeleton(CoreObject)); CEngine.Instance.SkeletonAssetManager.CreateSkeletonAsset(CEngine.Instance.RenderContext, assetName, skeletonAsset); skinModifier.SkeletonAsset = assetName.Name; skeletonAssetName = assetName.Name; var skeletonRInfo = await EditorCommon.Resources.ResourceInfoManager.Instance.CreateResourceInfoFromResource(assetName.Address); var skeInfo = skeletonRInfo as SkeletonResourceInfo; skeInfo.PreViewMesh = mGmsAbsFilePath.Name; await skeletonRInfo.Save(); } } } CEngine.Instance.MeshPrimitivesManager.RemoveMeshPimitives(mVmsAbsFilePath); MeshPrimitives.SaveMesh(mVmsAbsFilePath.Address); var info = await EditorCommon.Resources.ResourceInfoManager.Instance.CreateResourceInfoFromResource(mVmsAbsFilePath.Address); var msRInfo = info as EditorCommon.ResourceInfos.MeshSourceResourceInfo; msRInfo.SkeletonAsset = skeletonAssetName; await info.Save(); if (option.CreateGms) { //OnResourceImportCheck(this, AsseetImportType.AIT_Import, "CreateMesh"); var mesh = CEngine.Instance.MeshManager.CreateMesh(rc, mGmsAbsFilePath, MeshPrimitives); CEngine.Instance.MeshManager.RemoveMesh(mGmsAbsFilePath); mesh.Init(rc, mGmsAbsFilePath, MeshPrimitives); 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); } mesh.SaveMesh(); info = await EditorCommon.Resources.ResourceInfoManager.Instance.CreateResourceInfoFromResource(mGmsAbsFilePath.Address); var meshRInfo = info as EditorCommon.ResourceInfos.MeshResourceInfo; meshRInfo.SkeletonAsset = skeletonAssetName; await info.Save(); } ImportPercent = 1.0f; _OnCreaterAssetImportMessageDumping(this, AssetImportMessageType.AMT_Import, 0, "Save", ImportPercent); _OnCreaterAssetImportMessageDumping(this, AssetImportMessageType.AMT_Save, 0, "Save", 0); } }