void GetProjParams(Camera c, out Vector3 wCamMinOnPlane, out Vector3 wCamMaxOnPlane)
        {
            if (c.orthographic)
            {
                var camPos = c.transform.position;
                var size   = (c.transform.up + c.transform.right * c.aspect) * c.orthographicSize;

                var   camMin = camPos - size;
                var   camMax = camPos + size;
                var   plane  = new Plane(transform.up, transform.position);
                float enter;
                var   r = new Ray(camMin, c.transform.forward);
                plane.Raycast(r, out enter);
                camMin = r.GetPoint(enter);
                r      = new Ray(camMax, c.transform.forward);
                plane.Raycast(r, out enter);
                camMax = r.GetPoint(enter);


                wCamMinOnPlane = new Vector3(
                    Mathf.Min(camMin.x, camMax.x),
                    Mathf.Min(camMin.y, camMax.y),
                    Mathf.Min(camMin.z, camMax.z));
                wCamMaxOnPlane = new Vector3(
                    Mathf.Max(camMin.x, camMax.x),
                    Mathf.Max(camMin.y, camMax.y),
                    Mathf.Max(camMin.z, camMax.z));
            }
            else
            {
                var   corners = c.ProjectFrustumOnXZPlane();
                float minX, maxX, minY, maxY, minZ, maxZ;
                MUtils.MinMax(out minX, out maxX, corners[0].x, corners[1].x, corners[2].x, corners[3].x);
                MUtils.MinMax(out minY, out maxY, corners[0].y, corners[1].y, corners[2].y, corners[3].y);
                MUtils.MinMax(out minZ, out maxZ, corners[0].z, corners[1].z, corners[2].z, corners[3].z);
                wCamMinOnPlane = new Vector3(minX, minY, minZ);
                wCamMaxOnPlane = new Vector3(maxX, maxY, maxZ);
            }
        }