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;