public static void CreateLandscape(Chunk chunk)
    {
        int chunkX = chunk.chunkPosWorld.x;
        int chunkZ = chunk.chunkPosWorld.z;
        Block[, ,] blocks = chunk.blocks;

        ChunkNoise noise = new ChunkNoise(seed: 54321);

        // Calculate heightmap
        float[,] heightmap = new float[chunkSizeX, chunkSizeZ];
        noise.FillMap2D(heightmap, chunkX, chunkZ, octaves: 5, startFrequency: .03f, startAmplitude: 5);

        // Fill chunk with blocks
        for (int localX = 0; localX < CONST.chunkSize.x; localX++)
        {
            for (int localZ = 0; localZ < CONST.chunkSize.z; localZ++)
            {

                // Create ground
                int height = Mathf.RoundToInt((CONST.worldDepthBlocks / 4) + heightmap[localX, localZ]);
                for (int y = 0; y < chunkSizeY; y++)
                {

                    int blockWorldY = (int)chunk.blockOffset.y + y;
                    if (blockWorldY < height)
                    {
                        blocks[localX, y, localZ].blockType = BlockType.Stone;
                    }
                }

                // Create mountains
                int worldX = (int)chunk.blockOffset.x + localX;
                int worldZ = (int)chunk.blockOffset.z + localZ;

                for (int y = 0; y < chunkSizeY; y++)
                {
                    int blockWorldY = (int)chunk.blockOffset.y + y;

                    //if (blockWorldY >= height && blockWorldY < WorldGameObject.worldDepthBlocks)
                    if (blockWorldY >= height)
                    {
                        float noiseValue3D = noise.GetValue3D(worldX, blockWorldY, worldZ, octaves: 6, startFrequency: .05f, startAmplitude: 1);
                        if (noiseValue3D < -0.3)
                        {
                            blocks[localX, y, localZ].blockType = BlockType.Dirt;
                        }
                        else
                        {
                            blocks[localX, y, localZ].blockType = BlockType.Air;
                        }
                    }
                }

            }
        }

        chunk.blocks = blocks;
    }
    public static void CreateLandscape(Chunk chunk)
    {
        int chunkX = chunk.chunkPosWorld.x;
        int chunkZ = chunk.chunkPosWorld.z;

        Block[, ,] blocks = chunk.blocks;

        ChunkNoise noise = new ChunkNoise(seed: 54321);

        // Calculate heightmap
        float[,] heightmap = new float[chunkSizeX, chunkSizeZ];
        noise.FillMap2D(heightmap, chunkX, chunkZ, octaves: 5, startFrequency: .03f, startAmplitude: 5);

        // Fill chunk with blocks
        for (int localX = 0; localX < CONST.chunkSize.x; localX++)
        {
            for (int localZ = 0; localZ < CONST.chunkSize.z; localZ++)
            {
                // Create ground
                int height = Mathf.RoundToInt((CONST.worldDepthBlocks / 4) + heightmap[localX, localZ]);
                for (int y = 0; y < chunkSizeY; y++)
                {
                    int blockWorldY = (int)chunk.blockOffset.y + y;
                    if (blockWorldY < height)
                    {
                        blocks[localX, y, localZ].blockType = BlockType.Stone;
                    }
                }

                // Create mountains
                int worldX = (int)chunk.blockOffset.x + localX;
                int worldZ = (int)chunk.blockOffset.z + localZ;

                for (int y = 0; y < chunkSizeY; y++)
                {
                    int blockWorldY = (int)chunk.blockOffset.y + y;

                    //if (blockWorldY >= height && blockWorldY < WorldGameObject.worldDepthBlocks)
                    if (blockWorldY >= height)
                    {
                        float noiseValue3D = noise.GetValue3D(worldX, blockWorldY, worldZ, octaves: 6, startFrequency: .05f, startAmplitude: 1);
                        if (noiseValue3D < -0.3)
                        {
                            blocks[localX, y, localZ].blockType = BlockType.Dirt;
                        }
                        else
                        {
                            blocks[localX, y, localZ].blockType = BlockType.Air;
                        }
                    }
                }
            }
        }

        chunk.blocks = blocks;
    }
    public static void CreateLandscape(Chunk chunk)
    {
        int chunkX = chunk.chunkPosWorld.x;
        int chunkZ = chunk.chunkPosWorld.z;
        //Block[, ,] blocks = chunk.blocks;

        ChunkNoise noise = new ChunkNoise(seed: CONST.worldSeed);

        // Calculate heightmap
        float[,] heightmap = new float[chunkSizeX, chunkSizeZ];
        noise.FillMap2D(heightmap, chunkX, chunkZ, octaves: 6, startFrequency: .03f, startAmplitude: 5);

        // Fill chunk with blocks
        for (int localX = 0; localX < CONST.chunkSize.x; localX++)
        {
            for (int localZ = 0; localZ < CONST.chunkSize.z; localZ++)
            {
                // Create ground
                int height = Mathf.RoundToInt((CONST.worldDepthBlocks / 4) + heightmap[localX, localZ]);

                /*
                 * for (int y = 0; y < chunkSizeY; y++)
                 * {
                 *
                 *  int blockWorldY = (int)chunk.blockOffset.y + y;
                 *
                 * }
                 */

                // Create mountains
                int worldX = (int)chunk.blockOffset.x + localX;
                int worldZ = (int)chunk.blockOffset.z + localZ;

                for (int y = 0; y < chunkSizeY; y++)
                {
                    int blockWorldY = (int)chunk.blockOffset.y + y;

                    if (blockWorldY < height - 3)
                    {
                        //blocks[localX, y, localZ].blockType = BlockType.Air;
                        chunk.setBlock(localX, y, localZ, BlockType.Air);
                    }
                    else if (blockWorldY < height)
                    {
                        //blocks[localX, y, localZ].blockType = BlockType.Stone;
                        chunk.setBlock(localX, y, localZ, BlockType.Stone);
                    }
                    //if (blockWorldY >= height && blockWorldY < WorldGameObject.worldDepthBlocks)
                    else if (blockWorldY >= height)
                    {
                        float noiseValue3D = noise.GetValue3D(worldX, blockWorldY, worldZ, octaves: 6, startFrequency: .05f, startAmplitude: 1);
                        if (noiseValue3D < -0.3)
                        {
                            //blocks[localX, y, localZ].blockType = BlockType.Dirt;
                            chunk.setBlock(localX, y, localZ, BlockType.Dirt);
                        }
                        else
                        {
                            chunk.setBlock(localX, y, localZ, BlockType.Air);

                            //blocks[localX, y, localZ].blockType = BlockType.Air;
                        }
                    }
                }
            }
        }

        //chunk.blocks = blocks;

        /*
         * for(int x = 0; x < chunkSizeX; x++)
         * {
         *  for (int y = 0; y < chunkSizeY; y++)
         *  {
         *      for (int z = 0; z < chunkSizeZ; z++)
         *      {
         *          if(chunk.getBlock(x,y,z) != BlockType.Air)
         *          {
         *              chunk.anyNonAir = true;
         *          }
         *      }
         *  }
         * }
         */
    }
    public static void CreateLandscape(Chunk chunk)
    {
        int chunkX = chunk.chunkPosWorld.x;
        int chunkZ = chunk.chunkPosWorld.z;
        //Block[, ,] blocks = chunk.blocks;

        ChunkNoise noise = new ChunkNoise(seed: CONST.worldSeed);

        // Calculate heightmap
        float[,] heightmap = new float[chunkSizeX, chunkSizeZ];
        noise.FillMap2D(heightmap, chunkX, chunkZ, octaves: 6, startFrequency: .03f, startAmplitude: 5);

        // Fill chunk with blocks
        for (int localX = 0; localX < CONST.chunkSize.x; localX++)
        {
            for (int localZ = 0; localZ < CONST.chunkSize.z; localZ++)
            {

                // Create ground
                int height = Mathf.RoundToInt((CONST.worldDepthBlocks / 4) + heightmap[localX, localZ]);
                /*
                for (int y = 0; y < chunkSizeY; y++)
                {

                    int blockWorldY = (int)chunk.blockOffset.y + y;

                }
                */

                // Create mountains
                int worldX = (int)chunk.blockOffset.x + localX;
                int worldZ = (int)chunk.blockOffset.z + localZ;

                for (int y = 0; y < chunkSizeY; y++)
                {
                    int blockWorldY = (int)chunk.blockOffset.y + y;

                    if (blockWorldY < height - 3)
                    {
                        //blocks[localX, y, localZ].blockType = BlockType.Air;
                        chunk.setBlock(localX, y, localZ, BlockType.Air);
                    }
                    else if (blockWorldY < height)
                    {
                        //blocks[localX, y, localZ].blockType = BlockType.Stone;
                        chunk.setBlock(localX, y, localZ, BlockType.Stone);
                    }
                    //if (blockWorldY >= height && blockWorldY < WorldGameObject.worldDepthBlocks)
                    else if (blockWorldY >= height)
                    {
                        float noiseValue3D = noise.GetValue3D(worldX, blockWorldY, worldZ, octaves: 6, startFrequency: .05f, startAmplitude: 1);
                        if (noiseValue3D < -0.3)
                        {
                            //blocks[localX, y, localZ].blockType = BlockType.Dirt;
                            chunk.setBlock(localX, y, localZ, BlockType.Dirt);

                        }
                        else
                        {
                            chunk.setBlock(localX, y, localZ, BlockType.Air);

                            //blocks[localX, y, localZ].blockType = BlockType.Air;
                        }
                    }
                }

            }
        }

        //chunk.blocks = blocks;
        /*
        for(int x = 0; x < chunkSizeX; x++)
        {
            for (int y = 0; y < chunkSizeY; y++)
            {
                for (int z = 0; z < chunkSizeZ; z++)
                {
                    if(chunk.getBlock(x,y,z) != BlockType.Air)
                    {
                        chunk.anyNonAir = true;
                    }
                }
            }
        }
        */
    }