Skip to content

Commit ba207fd

Browse files
committed
Rename Perlin noise classes to value noise
Fixes luanti-org#15775: Perlin noise is not Perlin noise, but fractal value noise. A simpler noise algorithm that does not put gradients but values on the corners of a grid, then interpolates inbetween. This does *not* change the noise, only the method and class names.
1 parent 0343ce4 commit ba207fd

20 files changed

+174
-172
lines changed

src/client/clouds.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,7 @@ void Clouds::readSettings()
454454
bool Clouds::gridFilled(int x, int y) const
455455
{
456456
float cloud_size_noise = cloud_size / (BS * 200.f);
457-
float noise = noise2d_perlin(
457+
float noise = noise2d_fractal(
458458
(float)x * cloud_size_noise,
459459
(float)y * cloud_size_noise,
460460
m_seed, 3, 0.5);

src/mapgen/cavegen.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ void CavesNoiseIntersection::generateCaves(MMVManip *vm,
6161
assert(vm);
6262
assert(biomemap);
6363

64-
noise_cave1->perlinMap3D(nmin.X, nmin.Y - 1, nmin.Z);
65-
noise_cave2->perlinMap3D(nmin.X, nmin.Y - 1, nmin.Z);
64+
noise_cave1->noiseMap3D(nmin.X, nmin.Y - 1, nmin.Z);
65+
noise_cave2->noiseMap3D(nmin.X, nmin.Y - 1, nmin.Z);
6666

6767
const v3s32 &em = vm->m_area.getExtent();
6868
u32 index2d = 0; // Biomemap index
@@ -218,7 +218,7 @@ bool CavernsNoise::generateCaverns(MMVManip *vm, v3s16 nmin, v3s16 nmax)
218218
assert(vm);
219219

220220
// Calculate noise
221-
noise_cavern->perlinMap3D(nmin.X, nmin.Y - 1, nmin.Z);
221+
noise_cavern->noiseMap3D(nmin.X, nmin.Y - 1, nmin.Z);
222222

223223
// Cache cavern_amp values
224224
float *cavern_amp = new float[m_csize.Y + 1];
@@ -532,7 +532,7 @@ void CavesRandomWalk::carveRoute(v3f vec, float f, bool randomize_xz)
532532
// If cave liquid not defined by biome, fallback to old hardcoded behavior.
533533
// TODO 'np_caveliquids' is deprecated and should eventually be removed.
534534
// Cave liquids are now defined and located using biome definitions.
535-
float nval = NoisePerlin3D(np_caveliquids, startp.X,
535+
float nval = NoiseFractal3D(np_caveliquids, startp.X,
536536
startp.Y, startp.Z, seed);
537537
liquidnode = (nval < 0.40f && node_max.Y < water_level - 256) ?
538538
lavanode : waternode;

src/mapgen/dungeongen.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ void DungeonGen::generate(MMVManip *vm, u32 bseed, v3s16 nmin, v3s16 nmax)
114114
u32 i = vm->m_area.index(nmin.X, y, z);
115115
for (s16 x = nmin.X; x <= nmax.X; x++) {
116116
if (vm->m_data[i].getContent() == dp.c_wall) {
117-
if (NoisePerlin3D(&dp.np_alt_wall, x, y, z, blockseed) > 0.0f)
117+
if (NoiseFractal3D(&dp.np_alt_wall, x, y, z, blockseed) > 0.0f)
118118
vm->m_data[i].setContent(dp.c_alt_wall);
119119
}
120120
i++;

src/mapgen/mapgen.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -632,7 +632,7 @@ void MapgenBasic::generateBiomes()
632632
const v3s32 &em = vm->m_area.getExtent();
633633
u32 index = 0;
634634

635-
noise_filler_depth->perlinMap2D(node_min.X, node_min.Z);
635+
noise_filler_depth->noiseMap2D(node_min.X, node_min.Z);
636636

637637
for (s16 z = node_min.Z; z <= node_max.Z; z++)
638638
for (s16 x = node_min.X; x <= node_max.X; x++, index++) {
@@ -897,7 +897,7 @@ void MapgenBasic::generateDungeons(s16 max_stone_y)
897897
return;
898898

899899
u16 num_dungeons = std::fmax(std::floor(
900-
NoisePerlin3D(&np_dungeons, node_min.X, node_min.Y, node_min.Z, seed)), 0.0f);
900+
NoiseFractal3D(&np_dungeons, node_min.X, node_min.Y, node_min.Z, seed)), 0.0f);
901901
if (num_dungeons == 0)
902902
return;
903903

src/mapgen/mapgen_carpathian.cpp

+25-25
Original file line numberDiff line numberDiff line change
@@ -329,34 +329,34 @@ int MapgenCarpathian::getSpawnLevelAtPoint(v2s16 p)
329329
{
330330
// If rivers are enabled, first check if in a river channel
331331
if (spflags & MGCARPATHIAN_RIVERS) {
332-
float river = std::fabs(NoisePerlin2D(&noise_rivers->np, p.X, p.Y, seed)) -
332+
float river = std::fabs(NoiseFractal2D(&noise_rivers->np, p.X, p.Y, seed)) -
333333
river_width;
334334
if (river < 0.0f)
335335
return MAX_MAP_GENERATION_LIMIT; // Unsuitable spawn point
336336
}
337337

338-
float height1 = NoisePerlin2D(&noise_height1->np, p.X, p.Y, seed);
339-
float height2 = NoisePerlin2D(&noise_height2->np, p.X, p.Y, seed);
340-
float height3 = NoisePerlin2D(&noise_height3->np, p.X, p.Y, seed);
341-
float height4 = NoisePerlin2D(&noise_height4->np, p.X, p.Y, seed);
338+
float height1 = NoiseFractal2D(&noise_height1->np, p.X, p.Y, seed);
339+
float height2 = NoiseFractal2D(&noise_height2->np, p.X, p.Y, seed);
340+
float height3 = NoiseFractal2D(&noise_height3->np, p.X, p.Y, seed);
341+
float height4 = NoiseFractal2D(&noise_height4->np, p.X, p.Y, seed);
342342

343-
float hterabs = std::fabs(NoisePerlin2D(&noise_hills_terrain->np, p.X, p.Y, seed));
344-
float n_hills = NoisePerlin2D(&noise_hills->np, p.X, p.Y, seed);
343+
float hterabs = std::fabs(NoiseFractal2D(&noise_hills_terrain->np, p.X, p.Y, seed));
344+
float n_hills = NoiseFractal2D(&noise_hills->np, p.X, p.Y, seed);
345345
float hill_mnt = hterabs * hterabs * hterabs * n_hills * n_hills;
346346

347-
float rterabs = std::fabs(NoisePerlin2D(&noise_ridge_terrain->np, p.X, p.Y, seed));
348-
float n_ridge_mnt = NoisePerlin2D(&noise_ridge_mnt->np, p.X, p.Y, seed);
347+
float rterabs = std::fabs(NoiseFractal2D(&noise_ridge_terrain->np, p.X, p.Y, seed));
348+
float n_ridge_mnt = NoiseFractal2D(&noise_ridge_mnt->np, p.X, p.Y, seed);
349349
float ridge_mnt = rterabs * rterabs * rterabs * (1.0f - std::fabs(n_ridge_mnt));
350350

351-
float sterabs = std::fabs(NoisePerlin2D(&noise_step_terrain->np, p.X, p.Y, seed));
352-
float n_step_mnt = NoisePerlin2D(&noise_step_mnt->np, p.X, p.Y, seed);
351+
float sterabs = std::fabs(NoiseFractal2D(&noise_step_terrain->np, p.X, p.Y, seed));
352+
float n_step_mnt = NoiseFractal2D(&noise_step_mnt->np, p.X, p.Y, seed);
353353
float step_mnt = sterabs * sterabs * sterabs * getSteps(n_step_mnt);
354354

355355
float valley = 1.0f;
356356
float river = 0.0f;
357357

358358
if ((spflags & MGCARPATHIAN_RIVERS) && node_max.Y >= water_level - 16) {
359-
river = std::fabs(NoisePerlin2D(&noise_rivers->np, p.X, p.Y, seed)) - river_width;
359+
river = std::fabs(NoiseFractal2D(&noise_rivers->np, p.X, p.Y, seed)) - river_width;
360360
if (river <= valley_width) {
361361
// Within river valley
362362
if (river < 0.0f) {
@@ -376,7 +376,7 @@ int MapgenCarpathian::getSpawnLevelAtPoint(v2s16 p)
376376
u8 cons_non_solid = 0; // consecutive non-solid nodes
377377

378378
for (s16 y = water_level; y <= water_level + 32; y++) {
379-
float mnt_var = NoisePerlin3D(&noise_mnt_var->np, p.X, y, p.Y, seed);
379+
float mnt_var = NoiseFractal3D(&noise_mnt_var->np, p.X, y, p.Y, seed);
380380
float hill1 = getLerp(height1, height2, mnt_var);
381381
float hill2 = getLerp(height3, height4, mnt_var);
382382
float hill3 = getLerp(height3, height2, mnt_var);
@@ -429,20 +429,20 @@ int MapgenCarpathian::generateTerrain()
429429
MapNode mn_water(c_water_source);
430430

431431
// Calculate noise for terrain generation
432-
noise_height1->perlinMap2D(node_min.X, node_min.Z);
433-
noise_height2->perlinMap2D(node_min.X, node_min.Z);
434-
noise_height3->perlinMap2D(node_min.X, node_min.Z);
435-
noise_height4->perlinMap2D(node_min.X, node_min.Z);
436-
noise_hills_terrain->perlinMap2D(node_min.X, node_min.Z);
437-
noise_ridge_terrain->perlinMap2D(node_min.X, node_min.Z);
438-
noise_step_terrain->perlinMap2D(node_min.X, node_min.Z);
439-
noise_hills->perlinMap2D(node_min.X, node_min.Z);
440-
noise_ridge_mnt->perlinMap2D(node_min.X, node_min.Z);
441-
noise_step_mnt->perlinMap2D(node_min.X, node_min.Z);
442-
noise_mnt_var->perlinMap3D(node_min.X, node_min.Y - 1, node_min.Z);
432+
noise_height1->noiseMap2D(node_min.X, node_min.Z);
433+
noise_height2->noiseMap2D(node_min.X, node_min.Z);
434+
noise_height3->noiseMap2D(node_min.X, node_min.Z);
435+
noise_height4->noiseMap2D(node_min.X, node_min.Z);
436+
noise_hills_terrain->noiseMap2D(node_min.X, node_min.Z);
437+
noise_ridge_terrain->noiseMap2D(node_min.X, node_min.Z);
438+
noise_step_terrain->noiseMap2D(node_min.X, node_min.Z);
439+
noise_hills->noiseMap2D(node_min.X, node_min.Z);
440+
noise_ridge_mnt->noiseMap2D(node_min.X, node_min.Z);
441+
noise_step_mnt->noiseMap2D(node_min.X, node_min.Z);
442+
noise_mnt_var->noiseMap3D(node_min.X, node_min.Y - 1, node_min.Z);
443443

444444
if (spflags & MGCARPATHIAN_RIVERS)
445-
noise_rivers->perlinMap2D(node_min.X, node_min.Z);
445+
noise_rivers->noiseMap2D(node_min.X, node_min.Z);
446446

447447
//// Place nodes
448448
const v3s32 &em = vm->m_area.getExtent();

src/mapgen/mapgen_flat.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ int MapgenFlat::getSpawnLevelAtPoint(v2s16 p)
164164
s16 stone_level = ground_level;
165165
float n_terrain =
166166
((spflags & MGFLAT_LAKES) || (spflags & MGFLAT_HILLS)) ?
167-
NoisePerlin2D(&noise_terrain->np, p.X, p.Y, seed) :
167+
NoiseFractal2D(&noise_terrain->np, p.X, p.Y, seed) :
168168
0.0f;
169169

170170
if ((spflags & MGFLAT_LAKES) && n_terrain < lake_threshold) {
@@ -284,7 +284,7 @@ s16 MapgenFlat::generateTerrain()
284284

285285
bool use_noise = (spflags & MGFLAT_LAKES) || (spflags & MGFLAT_HILLS);
286286
if (use_noise)
287-
noise_terrain->perlinMap2D(node_min.X, node_min.Z);
287+
noise_terrain->noiseMap2D(node_min.X, node_min.Z);
288288

289289
for (s16 z = node_min.Z; z <= node_max.Z; z++)
290290
for (s16 x = node_min.X; x <= node_max.X; x++, ni2d++) {

src/mapgen/mapgen_fractal.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ int MapgenFractal::getSpawnLevelAtPoint(v2s16 p)
177177

178178
// If terrain present, don't start search below terrain or water level
179179
if (noise_seabed) {
180-
s16 seabed_level = NoisePerlin2D(&noise_seabed->np, p.X, p.Y, seed);
180+
s16 seabed_level = NoiseFractal2D(&noise_seabed->np, p.X, p.Y, seed);
181181
search_start = MYMAX(search_start, MYMAX(seabed_level, water_level));
182182
}
183183

@@ -409,7 +409,7 @@ s16 MapgenFractal::generateTerrain()
409409
u32 index2d = 0;
410410

411411
if (noise_seabed)
412-
noise_seabed->perlinMap2D(node_min.X, node_min.Z);
412+
noise_seabed->noiseMap2D(node_min.X, node_min.Z);
413413

414414
for (s16 z = node_min.Z; z <= node_max.Z; z++) {
415415
for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) {

src/mapgen/mapgen_v5.cpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -150,12 +150,12 @@ void MapgenV5Params::setDefaultSettings(Settings *settings)
150150
int MapgenV5::getSpawnLevelAtPoint(v2s16 p)
151151
{
152152

153-
float f = 0.55 + NoisePerlin2D(&noise_factor->np, p.X, p.Y, seed);
153+
float f = 0.55 + NoiseFractal2D(&noise_factor->np, p.X, p.Y, seed);
154154
if (f < 0.01)
155155
f = 0.01;
156156
else if (f >= 1.0)
157157
f *= 1.6;
158-
float h = NoisePerlin2D(&noise_height->np, p.X, p.Y, seed);
158+
float h = NoiseFractal2D(&noise_height->np, p.X, p.Y, seed);
159159

160160
// noise_height 'offset' is the average level of terrain. At least 50% of
161161
// terrain will be below this.
@@ -166,7 +166,7 @@ int MapgenV5::getSpawnLevelAtPoint(v2s16 p)
166166
// Starting spawn search at max_spawn_y + 128 ensures 128 nodes of open
167167
// space above spawn position. Avoids spawning in possibly sealed voids.
168168
for (s16 y = max_spawn_y + 128; y >= water_level; y--) {
169-
float n_ground = NoisePerlin3D(&noise_ground->np, p.X, y, p.Y, seed);
169+
float n_ground = NoiseFractal3D(&noise_ground->np, p.X, y, p.Y, seed);
170170

171171
if (n_ground * f > y - h) { // If solid
172172
if (y < water_level || y > max_spawn_y)
@@ -272,9 +272,9 @@ int MapgenV5::generateBaseTerrain()
272272
u32 index2d = 0;
273273
int stone_surface_max_y = -MAX_MAP_GENERATION_LIMIT;
274274

275-
noise_factor->perlinMap2D(node_min.X, node_min.Z);
276-
noise_height->perlinMap2D(node_min.X, node_min.Z);
277-
noise_ground->perlinMap3D(node_min.X, node_min.Y - 1, node_min.Z);
275+
noise_factor->noiseMap2D(node_min.X, node_min.Z);
276+
noise_height->noiseMap2D(node_min.X, node_min.Z);
277+
noise_ground->noiseMap3D(node_min.X, node_min.Y - 1, node_min.Z);
278278

279279
for (s16 z=node_min.Z; z<=node_max.Z; z++) {
280280
for (s16 y=node_min.Y - 1; y<=node_max.Y + 1; y++) {

src/mapgen/mapgen_v6.cpp

+22-22
Original file line numberDiff line numberDiff line change
@@ -289,13 +289,13 @@ float MapgenV6::baseTerrainLevelFromNoise(v2s16 p)
289289
if (spflags & MGV6_FLAT)
290290
return water_level;
291291

292-
float terrain_base = NoisePerlin2D_PO(&noise_terrain_base->np,
292+
float terrain_base = NoiseFractal2D_PO(&noise_terrain_base->np,
293293
p.X, 0.5, p.Y, 0.5, seed);
294-
float terrain_higher = NoisePerlin2D_PO(&noise_terrain_higher->np,
294+
float terrain_higher = NoiseFractal2D_PO(&noise_terrain_higher->np,
295295
p.X, 0.5, p.Y, 0.5, seed);
296-
float steepness = NoisePerlin2D_PO(&noise_steepness->np,
296+
float steepness = NoiseFractal2D_PO(&noise_steepness->np,
297297
p.X, 0.5, p.Y, 0.5, seed);
298-
float height_select = NoisePerlin2D_PO(&noise_height_select->np,
298+
float height_select = NoiseFractal2D_PO(&noise_height_select->np,
299299
p.X, 0.5, p.Y, 0.5, seed);
300300

301301
return baseTerrainLevel(terrain_base, terrain_higher,
@@ -355,7 +355,7 @@ BiomeV6Type MapgenV6::getBiome(v2s16 p)
355355

356356
float MapgenV6::getHumidity(v2s16 p)
357357
{
358-
/*double noise = noise2d_perlin(
358+
/*double noise = noise2d_fractal(
359359
0.5+(float)p.X/500, 0.5+(float)p.Y/500,
360360
seed+72384, 4, 0.66);
361361
noise = (noise + 1.0)/2.0;*/
@@ -374,11 +374,11 @@ float MapgenV6::getHumidity(v2s16 p)
374374

375375
float MapgenV6::getTreeAmount(v2s16 p)
376376
{
377-
/*double noise = noise2d_perlin(
377+
/*double noise = noise2d_fractal(
378378
0.5+(float)p.X/125, 0.5+(float)p.Y/125,
379379
seed+2, 4, 0.66);*/
380380

381-
float noise = NoisePerlin2D(np_trees, p.X, p.Y, seed);
381+
float noise = NoiseFractal2D(np_trees, p.X, p.Y, seed);
382382
float zeroval = -0.39;
383383
if (noise < zeroval)
384384
return 0;
@@ -389,11 +389,11 @@ float MapgenV6::getTreeAmount(v2s16 p)
389389

390390
bool MapgenV6::getHaveAppleTree(v2s16 p)
391391
{
392-
/*is_apple_tree = noise2d_perlin(
392+
/*is_apple_tree = noise2d_fractal(
393393
0.5+(float)p.X/100, 0.5+(float)p.Z/100,
394394
data->seed+342902, 3, 0.45) > 0.2;*/
395395

396-
float noise = NoisePerlin2D(np_apple_trees, p.X, p.Y, seed);
396+
float noise = NoiseFractal2D(np_apple_trees, p.X, p.Y, seed);
397397

398398
return noise > 0.2;
399399
}
@@ -404,7 +404,7 @@ float MapgenV6::getMudAmount(int index)
404404
if (spflags & MGV6_FLAT)
405405
return MGV6_AVERAGE_MUD_AMOUNT;
406406

407-
/*return ((float)AVERAGE_MUD_AMOUNT + 2.0 * noise2d_perlin(
407+
/*return ((float)AVERAGE_MUD_AMOUNT + 2.0 * noise2d_fractal(
408408
0.5+(float)p.X/200, 0.5+(float)p.Y/200,
409409
seed+91013, 3, 0.55));*/
410410

@@ -415,7 +415,7 @@ float MapgenV6::getMudAmount(int index)
415415
bool MapgenV6::getHaveBeach(int index)
416416
{
417417
// Determine whether to have sand here
418-
/*double sandnoise = noise2d_perlin(
418+
/*double sandnoise = noise2d_fractal(
419419
0.2+(float)p2d.X/250, 0.7+(float)p2d.Y/250,
420420
seed+59420, 3, 0.50);*/
421421

@@ -427,7 +427,7 @@ bool MapgenV6::getHaveBeach(int index)
427427
BiomeV6Type MapgenV6::getBiome(int index, v2s16 p)
428428
{
429429
// Just do something very simple as for now
430-
/*double d = noise2d_perlin(
430+
/*double d = noise2d_fractal(
431431
0.6+(float)p2d.X/250, 0.2+(float)p2d.Y/250,
432432
seed+9130, 3, 0.50);*/
433433

@@ -547,7 +547,7 @@ void MapgenV6::makeChunk(BlockMakeData *data)
547547
if ((flags & MG_DUNGEONS) && stone_surface_max_y >= node_min.Y &&
548548
full_node_min.Y >= dungeon_ymin && full_node_max.Y <= dungeon_ymax) {
549549
u16 num_dungeons = std::fmax(std::floor(
550-
NoisePerlin3D(&np_dungeons, node_min.X, node_min.Y, node_min.Z, seed)), 0.0f);
550+
NoiseFractal3D(&np_dungeons, node_min.X, node_min.Y, node_min.Z, seed)), 0.0f);
551551

552552
if (num_dungeons >= 1) {
553553
PseudoRandom ps(blockseed + 4713);
@@ -633,17 +633,17 @@ void MapgenV6::calculateNoise()
633633
int fz = full_node_min.Z;
634634

635635
if (!(spflags & MGV6_FLAT)) {
636-
noise_terrain_base->perlinMap2D_PO(x, 0.5, z, 0.5);
637-
noise_terrain_higher->perlinMap2D_PO(x, 0.5, z, 0.5);
638-
noise_steepness->perlinMap2D_PO(x, 0.5, z, 0.5);
639-
noise_height_select->perlinMap2D_PO(x, 0.5, z, 0.5);
640-
noise_mud->perlinMap2D_PO(x, 0.5, z, 0.5);
636+
noise_terrain_base->noiseMap2D_PO(x, 0.5, z, 0.5);
637+
noise_terrain_higher->noiseMap2D_PO(x, 0.5, z, 0.5);
638+
noise_steepness->noiseMap2D_PO(x, 0.5, z, 0.5);
639+
noise_height_select->noiseMap2D_PO(x, 0.5, z, 0.5);
640+
noise_mud->noiseMap2D_PO(x, 0.5, z, 0.5);
641641
}
642642

643-
noise_beach->perlinMap2D_PO(x, 0.2, z, 0.7);
643+
noise_beach->noiseMap2D_PO(x, 0.2, z, 0.7);
644644

645-
noise_biome->perlinMap2D_PO(fx, 0.6, fz, 0.2);
646-
noise_humidity->perlinMap2D_PO(fx, 0.0, fz, 0.0);
645+
noise_biome->noiseMap2D_PO(fx, 0.6, fz, 0.2);
646+
noise_humidity->noiseMap2D_PO(fx, 0.0, fz, 0.0);
647647
// Humidity map does not need range limiting 0 to 1,
648648
// only humidity at point does
649649
}
@@ -1075,7 +1075,7 @@ void MapgenV6::growGrass() // Add surface nodes
10751075

10761076
void MapgenV6::generateCaves(int max_stone_y)
10771077
{
1078-
float cave_amount = NoisePerlin2D(np_cave, node_min.X, node_min.Y, seed);
1078+
float cave_amount = NoiseFractal2D(np_cave, node_min.X, node_min.Y, seed);
10791079
int volume_nodes = (node_max.X - node_min.X + 1) *
10801080
(node_max.Y - node_min.Y + 1) * MAP_BLOCKSIZE;
10811081
cave_amount = MYMAX(0.0, cave_amount);

0 commit comments

Comments
 (0)