public void AddChunkToRender(ComputeBuffer vertices, ComputeBuffer normals, Vector3 worldPosition, int verticesCount)
    {
        MeshReadbackRequest req = new MeshReadbackRequest
        {
            verticesRequest = AsyncGPUReadback.Request(vertices),
            normalsRequest  = AsyncGPUReadback.Request(normals),
            worldPosition   = worldPosition,
            verticesCount   = verticesCount,
        };

        readBackMeshesRequests.Add(req);
    }
    void GenerateMesh(MeshReadbackRequest req)
    {
        var        chunk = Instantiate(chunkPrefab, req.worldPosition, Quaternion.identity, parent);
        MeshFilter mf    = chunk.GetComponent <MeshFilter>();

        Vector3[] vertices = req.verticesRequest.GetData <Vector3>().Take(req.verticesCount).ToArray();
        var       mesh     = new Mesh
        {
            vertices = vertices,
            normals  = req.normalsRequest.GetData <Vector3>().Take(req.verticesCount).ToArray(),
            // Generate a dummy triangle indicies buffer because mesh
            triangles = Enumerable.Range(0, req.verticesCount).ToArray(),
        };

        mf.sharedMesh = mesh;
    }