From 0e2edbb5d4ce62697b4a9625cdaba63d97fac059 Mon Sep 17 00:00:00 2001 From: Dr Scofield Date: Mon, 15 Sep 2008 13:44:58 +0000 Subject: [PATCH] From: mike pitman fixes the terrain spikes, and is the result of mostly a tuning operation on the smooth and flatten tools. I dug in and found that the spikes apparently result from smooth's overly aggressive iteration steps toward the average curvature, which leads to an instability that blows up the heights. I introduced a scaling factor to dampen the 'duration' parameter which tames progress and seems to keep things stable. --- .../Modules/World/Terrain/PaintBrushes/FlattenSphere.cs | 3 ++- .../Modules/World/Terrain/PaintBrushes/SmoothSphere.cs | 3 ++- .../Region/Environment/Modules/World/Terrain/TerrainUtil.cs | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/FlattenSphere.cs b/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/FlattenSphere.cs index 7bf88f0c95..e1d651b189 100644 --- a/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/FlattenSphere.cs +++ b/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/FlattenSphere.cs @@ -42,6 +42,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.PaintBrushes double sum = 0.0; double step2 = 0.0; + double durationFactor = 0.15; //MCP: tuned, but would be nice to come from ini file // compute delta map for (x = 0; x < map.Width; x++) @@ -65,7 +66,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.PaintBrushes { for (y = 0; y < map.Height; y++) { - double z = TerrainUtil.SphericalFactor(x, y, rx, ry, strength) * duration; + double z = TerrainUtil.SphericalFactor(x, y, rx, ry, strength) * duration * durationFactor; if (z > 0) // add in non-zero amount { diff --git a/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/SmoothSphere.cs b/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/SmoothSphere.cs index fc0a579330..fa0389d50e 100644 --- a/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/SmoothSphere.cs +++ b/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/SmoothSphere.cs @@ -42,6 +42,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.PaintBrushes double area = strength; double step = strength / 4.0; + double durationFactor = 0.15; //MCP: tuned, but would be nice to come from ini file // compute delta map for (x = 0; x < map.Width; x++) @@ -80,7 +81,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.PaintBrushes { double da = z; double a = (map[x, y] - tweak[x, y]) * da; - double newz = map[x, y] - (a * duration); + double newz = map[x, y] - (a * duration * durationFactor); if (newz > 0.0) map[x, y] = newz; diff --git a/OpenSim/Region/Environment/Modules/World/Terrain/TerrainUtil.cs b/OpenSim/Region/Environment/Modules/World/Terrain/TerrainUtil.cs index def28eb614..797c6a00aa 100644 --- a/OpenSim/Region/Environment/Modules/World/Terrain/TerrainUtil.cs +++ b/OpenSim/Region/Environment/Modules/World/Terrain/TerrainUtil.cs @@ -34,7 +34,8 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain { public static double MetersToSphericalStrength(double size) { - return Math.Pow(2, size); + //return Math.Pow(2, size); + return (size + 1) * 2.0; // MCP: a more useful brush size range } public static double SphericalFactor(double x, double y, double rx, double ry, double size)