Back to linear

This commit is contained in:
Daniel Mills 2020-01-15 03:19:22 -05:00
parent c4d2e16433
commit c62be9573d
2 changed files with 10 additions and 66 deletions

View File

@ -23,14 +23,9 @@ public class Settings
public static class GeneratorSettings public static class GeneratorSettings
{ {
public InterpolationType linearFunction = InterpolationType.BEZIER; public InterpolationType linearFunction = InterpolationType.PARAMETRIC_2;
public InterpolationType bilinearFunction = InterpolationType.PARAMETRIC_2; public int linearSampleRadius = 2;
public InterpolationType trilinearFunction = InterpolationType.BEZIER; public int interpolationIntervals = 1;
public double linearSampleFractureMultiplier = 11.4;
public double linearSampleFractureScale = 0.21;
public int linearSampleRadius = 29;
public int bilinearSampleRadius = 1;
public int trilinearSampleRadius = 6;
public double horizontalZoom = 1; public double horizontalZoom = 1;
public double heightFracture = 155; public double heightFracture = 155;
public double beachScale = 76; public double beachScale = 76;

View File

@ -74,80 +74,29 @@ public class IrisInterpolation
public static double getLinearNoise(int x, int z, int rad, NoiseProvider n, NoiseProvider f, InterpolationType type) public static double getLinearNoise(int x, int z, int rad, NoiseProvider n, NoiseProvider f, InterpolationType type)
{ {
int h = rad; int h = rad;
int xa = x - h;
int za = z - h;
int xb = x + h;
int zb = z + h;
double hfx = f.noise(x, z) * Iris.settings.gen.linearSampleFractureMultiplier;
double hfz = f.noise(z, x) * Iris.settings.gen.linearSampleFractureMultiplier;
double na = n.noise(xa + hfx, za + hfz);
double nb = n.noise(xa + hfx, zb - hfz);
double nc = n.noise(xb - hfx, za + hfz);
double nd = n.noise(xb - hfx, zb - hfz);
double px = M.rangeScale(0, 1, xa, xb, x);
double pz = M.rangeScale(0, 1, za, zb, z);
return blerp(na, nc, nb, nd, px, pz, type);
}
public static double getBilinearNoise(int x, int z, int lrad, int birad, NoiseProvider n, NoiseProvider f, InterpolationType linear, InterpolationType bilinear)
{
int h = birad;
int fx = x >> h;
int fz = z >> h;
int xa = (fx << h) - 15;
int za = (fz << h) - 15;
int xb = ((fx + 1) << h) + 15;
int zb = ((fz + 1) << h) + 15;
double na = getLinearNoise(xa, za, lrad, n, f, linear);
double nb = getLinearNoise(xa, zb, lrad, n, f, linear);
double nc = getLinearNoise(xb, za, lrad, n, f, linear);
double nd = getLinearNoise(xb, zb, lrad, n, f, linear);
double px = M.rangeScale(0, 1, xa, xb, x);
double pz = M.rangeScale(0, 1, za, zb, z);
return blerp(na, nc, nb, nd, px, pz, bilinear);
}
public static double getTrilinearNoise(int x, int z, int lrad, int birad, int trirad, NoiseProvider n, NoiseProvider f, InterpolationType linear, InterpolationType bilinear, InterpolationType trilinear)
{
int h = trirad;
int fx = x >> h; int fx = x >> h;
int fz = z >> h; int fz = z >> h;
int xa = (fx << h); int xa = (fx << h);
int za = (fz << h); int za = (fz << h);
int xb = ((fx + 1) << h); int xb = ((fx + 1) << h);
int zb = ((fz + 1) << h); int zb = ((fz + 1) << h);
double na = getBilinearNoise(xa, za, lrad, birad, n, f, linear, bilinear); double na = n.noise(xa, za);
double nb = getBilinearNoise(xa, zb, lrad, birad, n, f, linear, bilinear); double nb = n.noise(xa, zb);
double nc = getBilinearNoise(xb, za, lrad, birad, n, f, linear, bilinear); double nc = n.noise(xb, za);
double nd = getBilinearNoise(xb, zb, lrad, birad, n, f, linear, bilinear); double nd = n.noise(xb, zb);
double px = M.rangeScale(0, 1, xa, xb, x); double px = M.rangeScale(0, 1, xa, xb, x);
double pz = M.rangeScale(0, 1, za, zb, z); double pz = M.rangeScale(0, 1, za, zb, z);
return blerp(na, nc, nb, nd, px, pz, trilinear); return blerp(na, nc, nb, nd, px, pz, type);
} }
public static double getNoise(int x, int z, int lrad, int birad, int trirad, NoiseProvider n, NoiseProvider fli, InterpolationType linear, InterpolationType bilinear, InterpolationType trilinear) public static double getNoise(int x, int z, int lrad, NoiseProvider n, NoiseProvider fli, InterpolationType linear)
{ {
if(linear.equals(InterpolationType.NONE)) if(linear.equals(InterpolationType.NONE))
{ {
return n.noise(x, z); return n.noise(x, z);
} }
else if(bilinear.equals(InterpolationType.NONE)) return getLinearNoise(x, z, lrad, n, fli, linear);
{
return getLinearNoise(x, z, lrad, n, fli, linear);
}
else if(trilinear.equals(InterpolationType.NONE))
{
return getBilinearNoise(x, z, lrad, birad, n, fli, linear, bilinear);
}
else
{
return getTrilinearNoise(x, z, lrad, birad, trirad, n, fli, linear, bilinear, trilinear);
}
} }
} }