public static Ai.Scene ConvertAiSceneFromObjectSets(List <ObjectSet> objectSets, TextureDatabase textureDatabase = null) { var aiScene = new Ai.Scene(); aiScene.RootNode = new Ai.Node("RootNode"); foreach (var objectSet in objectSets.Where(x => x.TextureSet != null)) { TextureUtilities.RenameTextures(objectSet.TextureSet, textureDatabase); } foreach (var objectSet in objectSets) { foreach (var obj in objectSet.Objects) { ConvertAiMaterialsFromMaterials(aiScene, obj.Materials, objectSet.TextureSet); } } var bones = new List <BoneInfo>(); var boneParentMap = new Dictionary <string, string>(); foreach (var objectSet in objectSets) { foreach (var obj in objectSet.Objects.Where(x => x.Skin != null)) { foreach (var boneInfo in obj.Skin.Bones) { if (!boneParentMap.ContainsKey(boneInfo.Name)) { var parentBone = obj.Skin.Bones.FirstOrDefault(x => x.Id == boneInfo.ParentId); bones.Add(boneInfo); boneParentMap.Add(boneInfo.Name, parentBone?.Name); } } } } ConvertAiNodesFromBones(aiScene, bones, boneParentMap); foreach (var objectSet in objectSets) { ConvertAiNodesFromObjects(aiScene, objectSet.Objects); } return(aiScene); }
public static Ai.Scene ConvertAiSceneFromModels(List <Model> models, TextureDatabase textureDatabase = null) { var aiScene = new Ai.Scene(); aiScene.RootNode = new Ai.Node("RootNode"); foreach (var model in models.Where(x => x.TextureSet != null)) { TextureUtilities.RenameTextures(model.TextureSet, textureDatabase); } foreach (var model in models) { foreach (var mesh in model.Meshes) { ConvertAiMaterialsFromMaterials(aiScene, mesh.Materials, model.TextureSet); } } var bones = new List <Bone>(); var boneParentMap = new Dictionary <string, string>(); foreach (var model in models) { foreach (var mesh in model.Meshes.Where(x => x.Skin != null)) { foreach (var bone in mesh.Skin.Bones) { if (!boneParentMap.ContainsKey(bone.Name)) { var parentBone = mesh.Skin.Bones.FirstOrDefault(x => x.Id == bone.ParentId); bones.Add(bone); boneParentMap.Add(bone.Name, parentBone?.Name); } } } } ConvertAiNodesFromBones(aiScene, bones, boneParentMap); foreach (var model in models) { ConvertAiNodesFromMeshes(aiScene, model.Meshes); } return(aiScene); }