/Voxel-Terrain

Unity C# procedural terrain using noise and marching cubes

Primary LanguageC#MIT LicenseMIT

Low Poly Terrain

C# Unity project that generates a procedural terrain from a noise texture using an MIT Licensed implementation of Marching Cubes.

Demo scene

  • WASD to move around

  • Left Shift to move up

  • Left Ctrl to move down

  • Right click to delete voxel

  • Left click to create voxel

Algorithm

Width/Length must be the same as the number of pixels in the noise texture. Noise is expected to be clamped between 0 and 1.

All three dimensions are packed into a single float array to represent voxels, using the formula

  • [x + y * width + z * width * height]

To check whether a voxel is full:

  • Sample noise texture at (width, length); noise.sample(x, z):
  • Multiply above value by height heightVal = noise.sample(x.z) * height
  • if(currentVoxel.y < (int)heightVal) voxelValue = 1;
  • If the height is between the floored heightVal and heightVal, set the voxel to the difference between the two instead of 1. float diff = heightVal - (int)heightVal; if(diff < 1 && height > (int)heightVal && height < heightVal) voxelValue = diff;

Images

test test

Donate (click image)

Foo