void Awake()
        {
            current       = this;
            clusterBuffer = new ComputeBuffer(allRenderers.Count, sizeof(float3x4));
            NativeArray <float3x4> clusterArray = new NativeArray <float3x4>(allRenderers.Count, Allocator.Temp, NativeArrayOptions.UninitializedMemory);

            for (int i = 0; i < clusterArray.Length; ++i)
            {
                Matrix4x4 mat = allRenderers[i].localToWorldMatrix;
                clusterArray[i] = float3x4((Vector3)mat.GetColumn(0), (Vector3)mat.GetColumn(1), (Vector3)mat.GetColumn(2), (Vector3)mat.GetColumn(3));
            }
            clusterBuffer.SetData(clusterArray);
            clusterArray.Dispose();
            resultBuffer        = new ComputeBuffer(allRenderers.Count, sizeof(int));
            instanceCountBuffer = new ComputeBuffer(5, sizeof(int), ComputeBufferType.IndirectArguments);
            Vector3[] vertices = occluderMesh.vertices;
            int[]     tris     = occluderMesh.triangles;
            verticesBuffer = new ComputeBuffer(tris.Length, sizeof(float3));
            NativeArray <float3> verts = new NativeArray <float3>(tris.Length, Allocator.Temp, NativeArrayOptions.UninitializedMemory);

            for (int i = 0; i < verts.Length; ++i)
            {
                verts[i] = vertices[tris[i]];
            }
            NativeArray <uint> args = new NativeArray <uint>(5, Allocator.Temp, NativeArrayOptions.ClearMemory);

            args[0] = (uint)verts.Length;
            instanceCountBuffer.SetData(args);
            verticesBuffer.SetData(verts);
            args.Dispose();
            verts.Dispose();
        }
 private void OnDestroy()
 {
     current = null;
 }