private void BuildStaticMeshBatch()
        {
            if (GeometryState == EStateType.Dynamic)
            {
                return;
            }

            if (StaticMesh != null)
            {
                MeshBatchCacheID = new int[StaticMesh.subMeshCount];

                for (int Index = 0; Index < StaticMesh.subMeshCount; Index++)
                {
                    FMeshBatch MeshBatch;
                    MeshBatch.Visible             = Visible;
                    MeshBatch.BoundBox            = BoundBox;
                    MeshBatch.CastShadow          = (int)CastShadow;
                    MeshBatch.MotionType          = (int)MotionVector;
                    MeshBatch.RenderLayer         = RenderLayer;
                    MeshBatch.SubmeshIndex        = Index;
                    MeshBatch.Mesh                = GetWorld().WorldMeshList.Add(StaticMesh);
                    MeshBatch.Material            = GetWorld().WorldMaterialList.Add(Materials[Index]);
                    MeshBatch.Priority            = RenderPriority + Materials[Index].renderQueue;
                    MeshBatch.Matrix_LocalToWorld = Matrix_LocalToWorld;
                    //MeshBatch.CustomPrimitiveData = new float4x4(GetCustomPrimitiveData(0), GetCustomPrimitiveData(4), GetCustomPrimitiveData(8), GetCustomPrimitiveData(12));

                    MeshBatchCacheID[Index] = MeshBatch.GetHashCode(this.GetInstanceID() + this.transform.GetHashCode() + this.gameObject.name.GetHashCode());
                    GetWorld().GetMeshBatchColloctor().AddStaticMeshBatch(MeshBatch, MeshBatchCacheID[Index]);
                }
            }
        }