Пример #1
0
        // 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);
        }
Пример #2
0
        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);
        }