My project using using FastNoiseLite for the noise generation and this is the code for generating the densities:
public void SetVoxelDensities()
{
foreach (Voxel voxel in _voxels)
{
for (int i = 0; i < voxel.VoxelVertices.Length; i++)
{
if (!voxel.VoxelVertices[i].HasBeenTerraformed)
{
Vector3 position = voxel.VoxelVertices[i].Position;
float xSample = position.x + _parentPlanet.PlanetSettings.Offset.x;
float ySample = position.y + _parentPlanet.PlanetSettings.Offset.y;
float zSample = position.z + _parentPlanet.PlanetSettings.Offset.z;
float noise = _parentPlanet.FastNoiseLite.GetNoise(xSample, ySample, zSample);
voxel.VoxelVertices[i].Density = position.magnitude - _parentPlanet.PlanetSettings.RadiusInRealWorld + (_parentPlanet.PlanetSettings.NoiseScale * noise);
}
}
}
}
Here is the problem when I increase the iso level:
If I sort of “cap” off the edges by modifying the code like this, then it sort of works but without the smoothness:
public void SetVoxelDensities()
{
foreach (Voxel voxel in _voxels)
{
for (int i = 0; i < voxel.VoxelVertices.Length; i++)
{
if (!voxel.VoxelVertices[i].HasBeenTerraformed)
{
Vector3 position = voxel.VoxelVertices[i].Position;
float xSample = position.x + _parentPlanet.PlanetSettings.Offset.x;
float ySample = position.y + _parentPlanet.PlanetSettings.Offset.y;
float zSample = position.z + _parentPlanet.PlanetSettings.Offset.z;
float noise = _parentPlanet.FastNoiseLite.GetNoise(xSample, ySample, zSample);
if (position.magnitude >= _parentPlanet.PlanetSettings.RadiusInRealWorld)
{
voxel.VoxelVertices[i].Density = _parentPlanet.PlanetSettings.IsoLevel + 1; // Or whatever number to cause it to go over iso level.
} else
{
voxel.VoxelVertices[i].Density = position.magnitude - _parentPlanet.PlanetSettings.RadiusInRealWorld + (_parentPlanet.PlanetSettings.NoiseScale * noise);
}
}
}
}
}