for (int i = 0; i < TotalObjects; i++)
            {
                CurrentObject = ChildObjects[i];
                mesh = new Mesh();
                if (CurrentObject.GetComponent<MeshFilter>() != null)
                    mesh = CurrentObject.GetComponent<MeshFilter>().sharedMesh;
                else
                    CurrentObject.GetComponent<SkinnedMeshRenderer>().BakeMesh(mesh, true);

                submeshcount = mesh.subMeshCount;
                int VertexCount = mesh.vertexCount;
                int IndexCount = (int)mesh.GetIndexCount(0);
                for(int i2 = 1; i2 < submeshcount; i2++) {
                    IndexCount += (int)mesh.GetIndexCount(i2);
                }
                ComputeBuffer Vector4Buffer = new ComputeBuffer(VertexCount, 16);
                ComputeBuffer Vector3Buffer = new ComputeBuffer(VertexCount, 12);
                ComputeBuffer Vector2Buffer = new ComputeBuffer(VertexCount, 8);
                ComputeBuffer Vector1Buffer = new ComputeBuffer(IndexCount, 4);
                Vector4[] Vector4Array = new Vector4[VertexCount];
                Vector3[] Vector3Array = new Vector3[VertexCount];
                Vector2[] Vector2Array = new Vector2[VertexCount];
                int[] Vector1Array = new int[IndexCount];
                mesh.vertexBufferTarget |= GraphicsBuffer.Target.Raw;
                mesh.indexBufferTarget |= GraphicsBuffer.Target.Raw;
                UnityEngine.Rendering.VertexAttributeDescriptor[] Attributes = mesh.GetVertexAttributes();
                int VertexAttributeCount = Attributes.Length;
                GetVertData.SetInt("Count", VertexCount);
                int IndexOffset = CurMeshData.Verticies.Count;
                for(int i2 = 0; i2 < VertexAttributeCount; i2++) {
                    GraphicsBuffer MeshBuffer = mesh.GetVertexBuffer(Attributes[i2].stream);
                    GetVertData.SetBuffer(Attributes[i2].dimension - 1, "GraphicsBuffer", MeshBuffer);
                    GetVertData.SetInt("Stride", mesh.GetVertexBufferStride(Attributes[i2].stream));
                    GetVertData.SetInt("AttributeOffset", mesh.GetVertexAttributeOffset(Attributes[i2].attribute));
                    switch(Attributes[i2].attribute) {
                        case UnityEngine.Rendering.VertexAttribute.Position:
                            GetVertData.SetBool("Is16Bit", false);
                            if(Attributes[i2].format != UnityEngine.Rendering.VertexAttributeFormat.Float32) {
                                Debug.Log("Wrong Vertex Attribute Format, needs to be Float32");
                                return;
                            }
                            GetVertData.SetBuffer(2, "Output3", Vector3Buffer);
                            GetVertData.Dispatch(2, (int)Mathf.CeilToInt(VertexCount / 1023.0f), 1, 1);
                            Vector3Buffer.GetData(Vector3Array);
                            CurMeshData.Verticies.AddRange(Vector3Array);
                        break;
                        case UnityEngine.Rendering.VertexAttribute.Normal:
                            GetVertData.SetBool("Is16Bit", Attributes[i2].format == UnityEngine.Rendering.VertexAttributeFormat.Float16);
                            GetVertData.SetBuffer(2, "Output3", Vector3Buffer);
                            GetVertData.Dispatch(2, (int)Mathf.CeilToInt(VertexCount / 1023.0f), 1, 1);
                            Vector3Buffer.GetData(Vector3Array);
                            CurMeshData.Normals.AddRange(Vector3Array);
                        break;
                        case UnityEngine.Rendering.VertexAttribute.Tangent:
                        GetVertData.SetBool("Is16Bit", false);
                            if(Attributes[i2].format != UnityEngine.Rendering.VertexAttributeFormat.Float32) {
                                Debug.Log("Wrong Vertex Attribute Format, needs to be Float32");
                                return;
                            }
                            GetVertData.SetBuffer(3, "Output4", Vector4Buffer);
                            GetVertData.Dispatch(3, (int)Mathf.CeilToInt(VertexCount / 1023.0f), 1, 1);
                            Vector4Buffer.GetData(Vector4Array);
                            CurMeshData.Tangents.AddRange(Vector4Array);
                        break;
                        case UnityEngine.Rendering.VertexAttribute.TexCoord0:
                            GetVertData.SetBool("Is16Bit", Attributes[i2].format == UnityEngine.Rendering.VertexAttributeFormat.Float16);
                            GetVertData.SetBuffer(1, "Output2", Vector2Buffer);
                            GetVertData.Dispatch(1, (int)Mathf.CeilToInt(VertexCount / 1023.0f), 1, 1);
                            Vector2Buffer.GetData(Vector2Array);
                            CurMeshData.UVs.AddRange(Vector2Array);
                        break;
                        case UnityEngine.Rendering.VertexAttribute.TexCoord1:
                            GetVertData.SetBool("Is16Bit", Attributes[i2].format == UnityEngine.Rendering.VertexAttributeFormat.Float16);
                            GetVertData.SetBuffer(1, "Output2", Vector2Buffer);
                            GetVertData.Dispatch(1, (int)Mathf.CeilToInt(VertexCount / 1023.0f), 1, 1);
                            Vector2Buffer.GetData(Vector2Array);
                            if(CurrentObject.GetComponent<MeshRenderer>() != null) CurMeshData.FillMapUVsScaled(Vector2Array, CurrentObject.GetComponent<MeshRenderer>().lightmapScaleOffset);
                            break;
                    }
                    MeshBuffer.Dispose();
                }
                GraphicsBuffer IndexBuffer = mesh.GetIndexBuffer();
                GetVertData.SetBuffer(0, "GraphicsBuffer", IndexBuffer);

                int PreIndexLength = CurMeshData.Indices.Count;
                GetVertData.SetInt("Count", IndexCount);
                GetVertData.SetBool("Is16Bit", mesh.indexFormat == UnityEngine.Rendering.IndexFormat.UInt16);
                GetVertData.SetBuffer(0, "Output1", Vector1Buffer);
                GetVertData.Dispatch(0, (int)Mathf.CeilToInt(IndexCount / 1023.0f), 1, 1);
                Vector1Buffer.GetData(Vector1Array);
                CurMeshData.Indices.AddRange(Vector1Array);

                if (!mesh.HasVertexAttribute(UnityEngine.Rendering.VertexAttribute.TexCoord0)) CurMeshData.SetUvZero(VertexCount);
                if(!mesh.HasVertexAttribute(UnityEngine.Rendering.VertexAttribute.Tangent)) CurMeshData.SetTansZero(VertexCount);

                #if DoLightMapping
                    CurMeshData.FillMapIndexes(VertexCount, CurrentObject.GetComponent<MeshRenderer>().lightmapIndex);
                #else
                    CurMeshData.SetLightMapUvZero(VertexCount);
                    CurMeshData.FillMapIndexes(VertexCount, -1);
                #endif
                IndexBuffer.Dispose();
                Vector4Buffer.Dispose();
                Vector3Buffer.Dispose();
                Vector2Buffer.Dispose();
                Vector1Buffer.Dispose();

                int TotalIndexLength = 0;
                for (int i2 = 0; i2 < submeshcount; ++i2)
                {//Add together all the submeshes in the mesh to consider it as one object
                    int IndiceLength = (int)mesh.GetIndexCount(i2) / 3;
                    MatIndex = i2 + RepCount;
                    TotalIndexLength += IndiceLength;
                    var SubMesh = new int[IndiceLength];
                    System.Array.Fill(SubMesh, MatIndex);
                    CurMeshData.MatDat.AddRange(SubMesh);
                }
                if (IsSkinnedGroup)
                {
                    IndexCounts[i] = TotalIndexLength;
                    SkinnedMeshes[i] = ChildObjects[i].GetComponent<SkinnedMeshRenderer>();
                    SkinnedMeshes[i].updateWhenOffscreen = true;
                    TotalTriangles += TotalIndexLength;
                }
                TransformIndexes.Add(new MeshTransformVertexs()
                {
                    VertexStart = PreIndexLength,
                    VertexCount = CurMeshData.Indices.Count - PreIndexLength,
                    IndexOffset = IndexOffset
                });
                RepCount += submeshcount;
            }
        }