Mgv7: Speed optimise calculateNoise and generateRidgeTerrain
authorparamat <mat.gregory@virginmedia.com>
Sun, 18 Jan 2015 12:35:38 +0000 (12:35 +0000)
committerkwolekr <kwolekr@minetest.net>
Thu, 22 Jan 2015 07:10:07 +0000 (02:10 -0500)
Remove unnecessary range limiting of persistmap
Skip calculation of filler, mountain, ridge, heat and humidity perlinmaps in underground mapchunks
Skip generateRidgeTerrain in underground mapchunks

src/mapgen_v7.cpp

index 2515408805ecf9bb1d6f2c43fab1aefc53a377ed..f13eee82950f7720f8a34efb3f84c7de224960ba 100644 (file)
@@ -285,33 +285,33 @@ void MapgenV7::calculateNoise()
        int y = node_min.Y;
        int z = node_min.Z;
 
-       noise_height_select->perlinMap2D(x, z);
        noise_terrain_persist->perlinMap2D(x, z);
        float *persistmap = noise_terrain_persist->result;
-       for (int i = 0; i != csize.X * csize.Z; i++)
-               persistmap[i] = rangelim(persistmap[i], 0.4, 0.9);
 
        noise_terrain_base->perlinMap2D(x, z, persistmap);
        noise_terrain_alt->perlinMap2D(x, z, persistmap);
-       noise_filler_depth->perlinMap2D(x, z);
-
-       if (spflags & MGV7_MOUNTAINS) {
-               noise_mountain->perlinMap3D(x, y, z);
-               noise_mount_height->perlinMap2D(x, z);
-       }
-
-       if (spflags & MGV7_RIDGES) {
-               noise_ridge->perlinMap3D(x, y, z);
-               noise_ridge_uwater->perlinMap2D(x, z);
-       }
+       noise_height_select->perlinMap2D(x, z);
 
        if (flags & MG_CAVES) {
                noise_cave1->perlinMap3D(x, y, z);
                noise_cave2->perlinMap3D(x, y, z);
        }
 
-       noise_heat->perlinMap2D(x, z);
-       noise_humidity->perlinMap2D(x, z);
+       if (node_max.Y >= water_level) {
+               noise_filler_depth->perlinMap2D(x, z);
+               noise_heat->perlinMap2D(x, z);
+               noise_humidity->perlinMap2D(x, z);
+
+               if (spflags & MGV7_MOUNTAINS) {
+                       noise_mountain->perlinMap3D(x, y, z);
+                       noise_mount_height->perlinMap2D(x, z);
+               }
+
+               if (spflags & MGV7_RIDGES) {
+                       noise_ridge->perlinMap3D(x, y, z);
+                       noise_ridge_uwater->perlinMap2D(x, z);
+               }
+       }
 
        //printf("calculateNoise: %dus\n", t.stop());
 }
@@ -469,7 +469,7 @@ int MapgenV7::generateBaseTerrain()
 
 int MapgenV7::generateMountainTerrain(int ymax)
 {
-       if (node_max.Y <= water_level)
+       if (node_max.Y < water_level)
                return ymax;
 
        MapNode n_stone(c_stone);
@@ -500,6 +500,9 @@ int MapgenV7::generateMountainTerrain(int ymax)
 
 void MapgenV7::generateRidgeTerrain()
 {
+       if (node_max.Y < water_level)
+               return;
+
        MapNode n_water(c_water_source);
        MapNode n_air(CONTENT_AIR);
        u32 index = 0;
@@ -637,12 +640,12 @@ void MapgenV7::generateBiomes()
 
 void MapgenV7::dustTopNodes()
 {
+       if (node_max.Y < water_level)
+               return;
+
        v3s16 em = vm->m_area.getExtent();
        u32 index = 0;
 
-       if (water_level > node_max.Y)
-               return;
-
        for (s16 z = node_min.Z; z <= node_max.Z; z++)
        for (s16 x = node_min.X; x <= node_max.X; x++, index++) {
                Biome *biome = (Biome *)bmgr->get(biomemap[index]);