Search code examples
noiseunreal-blueprintsimplex-noisenoise-generator

How to generate multiple 3D Coordinates with noise


I am currently trying to generate a 3D planetary map like No Man's Sky does using the simplex noise plugin in unreal engine blueprints. How can i generate coordinates for the individual planets?

I already tried to create 3 for loops and get the noise value on the specific coordinate. When the noise value exceeds a threshold a planet is spawned. This works fine, but is very recourse intensive and will group them in non-random patterns. Is there a better way to get one/multiple coordinates using noise? Like a reversed noise function where you enter a threshold and it outputs coordinates? Or maybe a different way?

Thanks a lot


Solution

  • There's no such thing to get vertices out of a noise function directly. A noise function produces a single noise value not vertices.

    No Man's Sky is using Voxels to generate levels.

    A voxel is basically a single point value in a uniform 3 dimensional grid.

    For example in minecraft each cube is a voxel. Voxels with a value 1 is surface and each voxel with a value 0 is air.

    They generate floating values between 0.0-1.0 using multiple layers of noise functions. Indeed it's a very complex system and is quite an achievement to have it perform fast enough for a game.

    There let's say 0.0 would mean no surface and 1.0 would mean solid surface.

    Then they extract the polygons and vertices from the voxel field with something like surface nets or marching cubes. I'd look into one of those algorithms. There are plentiful of resources on this topic.

    However you all current tech on this subject are pretty slow compared to the detail and scale in no man's sky.