Jump to content

  • Log In with Google      Sign In   
  • Create Account


#Actualtb2009

Posted 27 December 2012 - 10:17 PM

As a personal project, I'm trying to make a terrain generator that will create terrain looking something like the Castle Story smooth terrain.
 
zFzVX.jpg
 
 
The terrain is essentially cubes, but the top layer is smoothed out.
 
What I've tried to do to emulate this look is to give each surface block a mini heightmap.  This generally works, but there are some issues, yielding a terrain like this:
 
7MIZT.png
 
 
 
The problem is that sometimes, the height is out of the bounds of the 1x1x1 cubes in my world, in which case I clip the heights to 0 or 1.:
y2uGf.png
 
Here's my terrain generation code:
 
noise2d(float x, float z); // uses simplex noise to determine the height of a column

genColumn(int x, int z)
{
    int highestBlockY = (int)noise2d(x, z);

    bool is_surface = true;

    for(int y = max_height - 1; y >= 0; y--)
    {
        Block b;

        if(is_surface)
        {
            b = Block.Grass;
            b.HasHeightMap = true;

            // generate heightmap
            for(int ix = 0; ix < 5; ix++)
            {
                for(int iz = 0; iz < 5; iz++)
                {
                    float heightHere = noise2d(x + ix / 4, z + iz / 4) - y;

                    // clip heights
                    if(heightHere > 1)
                        heightHere = 1;

                    if(heightHere < 0)
                        heightHere = 0;

                    b.HeightMap[ix][iz] = heightHere;
                }
            }

            is_surface = false;
        }
        else
        {
            b = Block.Dirt;
        }

        setBlock(x, y, z, b);
    }
}

 

 

 

 
Is my method incorrect in any way?  Is there any way I could make the noise function not as steep?

#2tb2009

Posted 27 December 2012 - 10:16 PM

As a personal project, I'm trying to make a terrain generator that will create terrain looking something like the Castle Story smooth terrain.
 
zFzVX.jpg
 
 
The terrain is essentially cubes, but the top layer is smoothed out.
 
What I've tried to do to emulate this look is to give each surface block a mini heightmap.  This generally works, but there are some issues, yielding a terrain like this:
 
7MIZT.png
 
4m4F6.png
 
 
The problem is that sometimes, the height is out of the bounds of the 1x1x1 cubes in my world, in which case I clip the heights to 0 or 1.:
y2uGf.png
 
Here's my terrain generation code:
 
noise2d(float x, float z); // uses simplex noise to determine the height of a column

genColumn(int x, int z)
{
    int highestBlockY = (int)noise2d(x, z);

    bool is_surface = true;

    for(int y = max_height - 1; y >= 0; y--)
    {
        Block b;

        if(is_surface)
        {
            b = Block.Grass;
            b.HasHeightMap = true;

            // generate heightmap
            for(int ix = 0; ix < 5; ix++)
            {
                for(int iz = 0; iz < 5; iz++)
                {
                    float heightHere = noise2d(x + ix / 4, z + iz / 4) - y;

                    // clip heights
                    if(heightHere > 1)
                        heightHere = 1;

                    if(heightHere < 0)
                        heightHere = 0;

                    b.HeightMap[ix][iz] = heightHere;
                }
            }

            is_surface = false;
        }
        else
        {
            b = Block.Dirt;
        }

        setBlock(x, y, z, b);
    }
}

 

 

 

 
Is my method incorrect in any way?  Is there any way I could make the noise function not as steep?

#1tb2009

Posted 27 December 2012 - 08:55 PM

As a personal project, I'm trying to make a terrain generator that will create terrain looking something like the Castle Story smooth terrain.
 
zFzVX.jpg
 
 
The terrain is essentially cubes, but the top layer is smoothed out.
 
What I've tried to do to emulate this look is to give each surface block a mini heightmap.  This generally works, but there are some issues, yielding a terrain like this:
 
7MIZT.png
 
 
The problem is that sometimes, the height is out of the bounds of the 1x1x1 cubes in my world, in which case I clip the heights to 0 or 1.:
y2uGf.png
 
Here's my terrain generation code:
 
noise2d(float x, float z); // uses simplex noise to determine the height of a column

genColumn(int x, int z)
{
    int highestBlockY = (int)noise2d(x, z);

    bool is_surface = true;

    for(int y = max_height - 1; y >= 0; y--)
    {
        Block b;

        if(is_surface)
        {
            b = Block.Grass;
            b.HasHeightMap = true;

            // generate heightmap
            for(int ix = 0; ix < 5; ix++)
            {
                for(int iz = 0; iz < 5; iz++)
                {
                    float heightHere = noise2d(x + ix / 4, z + iz / 4) - y;

                    // clip heights
                    if(heightHere > 1)
                        heightHere = 1;

                    if(heightHere < 0)
                        heightHere = 0;

                    b.HeightMap[ix][iz] = heightHere;
                }
            }

            is_surface = false;
        }
        else
        {
            b = Block.Dirt;
        }

        setBlock(x, y, z, b);
    }
}

 

 

 

 
Is my method incorrect in any way?  Is there any way I could make the noise function not as steep?

PARTNERS