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;