// Model public static Result CreateLodModel(VoxelData data, float scale, int lodNum, LightMapSupportType supportLightMap, Vector3 pivot) { var result = new Result() { VoxelModels = new Result.VoxelModel[lodNum], }; for (int lodLevel = 0; lodLevel < lodNum; lodLevel++) { var res = CreateModel(data, scale, supportLightMap, false, pivot); if (res && res.VoxelModels.Length > 0) { result.VoxelModels[lodLevel] = res.VoxelModels[0]; } data.LodIteration(lodLevel); } return(result); }
public static Result CreateModel(VoxelData data, float scale, LightMapSupportType supportLightMap, bool supportRig, Vector3 pivot) { if (data == null) { return(null); } Data = data; ModelScale = scale; _SupportLightMap = supportLightMap; SupportRig = supportRig; Pivot = pivot; var result = new Result { VoxelModels = new Result.VoxelModel[1] { new Result.VoxelModel() { Meshs = new UnlimitiedMesh[data.Voxels.Count], Textures = new Texture2D[data.Voxels.Count], ModelSize = new Vector3[data.Voxels.Count], FootPoints = new Vector3[data.Voxels.Count], MaxModelBounds = new Int3(data.GetBounds()).Max, } } }; for (int index = 0; index < data.Voxels.Count; index++) { UnlimitiedMesh mesh; Texture2D texture; PointWeights = null; RootBones = null; Voxels = data.Voxels[index]; SizeX = Voxels.GetLength(0); SizeY = Voxels.GetLength(1); SizeZ = Voxels.GetLength(2); ModelIndex = index; GetFaces(); GetColors(); if (SupportRig) { var rootBoneList = GetChildBones(null); if (rootBoneList != null) { RootBones = rootBoneList.ToArray(); } GetWeights(); } GetAreas(); GetResultFromArea(out mesh, out texture); result.VoxelModels[0].Meshs[index] = mesh; result.VoxelModels[0].Textures[index] = texture; result.VoxelModels[0].ModelSize[index] = data.GetModelSize(index); result.VoxelModels[0].FootPoints[index] = data.GetFootPoint(index); result.VoxelModels[0].RootBones = RootBones; } result.VoxelModels[0].RootNode = GetTransformData(result.VoxelModels[0], result.VoxelModels[0].Textures, 0); Data = null; Voxels = null; Faces = null; PointWeights = null; RootBones = null; Colors = null; AreaList.Clear(); PackingList.Clear(); AreaPackingMap.Clear(); return(result); }