public static void IterateMinMax(Vector3 min, Vector3 max, bool subdivided, FoliageIterationAction action)
        {
            FoliageCell cMin = new FoliageCell(min, subdivided);
            FoliageCell cMax = new FoliageCell(max, subdivided);

            for (int x = cMin.x; x <= cMax.x; x++)
            {
                for (int y = cMin.y; y <= cMax.y; y++)
                {
                    for (int z = cMin.z; z <= cMax.z; z++)
                    {
                        action(MakeHash(x, y, z));
                    }
                }
            }
        }
        /**
         * The depth should be around 1 or maximum 2 at runtime.
         */
        public static void IterateNeighboring(FoliageCell cell, int depth, FoliageIterationAction action)
        {
            int minX = cell.x - depth;
            int maxX = cell.x + depth;

            int minY = cell.y - depth;
            int maxY = cell.y + depth;

            int minZ = cell.z - depth;
            int maxZ = cell.z + depth;

            for (int x = minX; x <= maxX; x++)
            {
                for (int y = minY; y <= maxY; y++)
                {
                    for (int z = minZ; z <= maxZ; z++)
                    {
                        action(MakeHash(x, y, z));
                    }
                }
            }
        }