public float[] noise(Rect2i region) { Rect2i fullRegion = determineRequiredRegion(region); float[] keyData = getKeyValues(fullRegion); float[] fullData = mapExpand(keyData, fullRegion); return getSubset(fullData, fullRegion, region); }
private void reload() { float realScale = config.scale * 0.01f; Vector2f scale = new Vector2f(realScale, realScale); BrownianNoise brown = new BrownianNoise(new PerlinNoise(seed + 6), config.octaves); humidityNoise = new SubSampledNoise(brown, scale, SAMPLE_RATE); }
@Override public void process(GeneratingRegion region) { SurfaceHeightFacet facet = region.getRegionFacet(SurfaceHeightFacet.class); float[] noise = riverNoise.noise(facet.getWorldRegion()); float[] surfaceHeights = facet.getInternal(); for (int i = 0; i < noise.length; ++i) { surfaceHeights[i] += configuration.maxDepth * TeraMath.clamp(7f * (TeraMath.sqrt(Math.abs(noise[i] * 2.11f)) - 0.1f) + 0.25f); } }
@Override public void setSeed(long seed) { surfaceNoise = new SubSampledNoise(new SimplexNoise(seed), new Vector2f(0.01f, 0.01f), 1); }
@Override public void process(GeneratingRegion region) { SurfaceHeightFacet facet = region.getRegionFacet(SurfaceHeightFacet.class); float[] noise = oceanNoise.noise(facet.getWorldRegion()); float[] surfaceHeights = facet.getInternal(); for (int i = 0; i < noise.length; ++i) { surfaceHeights[i] -= configuration.maxDepth * TeraMath.clamp(noise[i] * 8.0f * 2.11f + 0.25f); } }
public float[] noise(Region3i region) { Region3i fullRegion = determineRequiredRegion(region); float[] keyData = getKeyValues(fullRegion); float[] fullData = mapExpand(keyData, fullRegion); return getSubset(fullData, fullRegion, region); }
@Override public void setSeed(long seed) { BrownianNoise source = new BrownianNoise(new PerlinNoise(seed), 8); surfaceNoise = new SubSampledNoise(source, new Vector2f(0.004f, 0.004f), SAMPLE_RATE); }
@Override public void process(GeneratingRegion region) { SurfaceHeightFacet facet = region.getRegionFacet(SurfaceHeightFacet.class); float[] mountainData = mountainNoise.noise(facet.getWorldRegion()); float[] hillData = hillNoise.noise(facet.getWorldRegion()); SurfaceTemperatureFacet temperatureData = region.getRegionFacet(SurfaceTemperatureFacet.class); SurfaceHumidityFacet humidityData = region.getRegionFacet(SurfaceHumidityFacet.class); float[] heightData = facet.getInternal(); Iterator<BaseVector2i> positionIterator = facet.getRelativeRegion().contents().iterator(); for (int i = 0; i < heightData.length; ++i) { BaseVector2i pos = positionIterator.next(); float temp = temperatureData.get(pos); float tempHumid = temp * humidityData.get(pos); Vector2f distanceToMountainBiome = new Vector2f(temp - 0.25f, tempHumid - 0.35f); float mIntens = TeraMath.clamp(1.0f - distanceToMountainBiome.length() * 3.0f); float densityMountains = Math.max(mountainData[i] * 2.12f, 0) * mIntens * configuration.mountainAmplitude; float densityHills = Math.max(hillData[i] * 2.12f - 0.1f, 0) * (1.0f - mIntens) * configuration.hillAmplitude; heightData[i] = heightData[i] + 1024 * densityMountains + 128 * densityHills; } }
@Override public void setSeed(long seed) { // TODO: reduce the number of octaves in BrownianNoise mountainNoise = new SubSampledNoise(new BrownianNoise(new PerlinNoise(seed + 3)), new Vector2f(0.0002f, 0.0002f), 4); hillNoise = new SubSampledNoise(new BrownianNoise(new PerlinNoise(seed + 4)), new Vector2f(0.0008f, 0.0008f), 4); }
@Override public void process(GeneratingRegion region) { SurfaceTemperatureFacet facet = new SurfaceTemperatureFacet(region.getRegion(), region.getBorderForFacet(SurfaceTemperatureFacet.class)); float[] noise = this.temperatureNoise.noise(facet.getWorldRegion()); for (int i = 0; i < noise.length; ++i) { noise[i] = TeraMath.clamp((noise[i] * 2.11f + 1f) * 0.5f); } facet.set(noise); region.setRegionFacet(SurfaceTemperatureFacet.class, facet); } }
@Override public void setSeed(long seed) { temperatureNoise = new SubSampledNoise(new BrownianNoise(new PerlinNoise(seed + 5), 8), new Vector2f(0.0005f, 0.0005f), SAMPLE_RATE); }
@Override public void process(GeneratingRegion region) { Border3D border = region.getBorderForFacet(SurfaceHumidityFacet.class); SurfaceHumidityFacet facet = new SurfaceHumidityFacet(region.getRegion(), border); float[] noise = humidityNoise.noise(facet.getWorldRegion()); for (int i = 0; i < noise.length; ++i) { noise[i] = TeraMath.clamp((noise[i] * 2.11f + 1f) * 0.5f); } facet.set(noise); region.setRegionFacet(SurfaceHumidityFacet.class, facet); }
@Override public void setSeed(long seed) { riverNoise = new SubSampledNoise(new BrownianNoise(new PerlinNoise(seed + 2), 8), new Vector2f(0.0008f, 0.0008f), SAMPLE_RATE); }
@Override public void process(GeneratingRegion region) { Border3D border = region.getBorderForFacet(SurfaceHeightFacet.class); SurfaceHeightFacet facet = new SurfaceHeightFacet(region.getRegion(), border); SeaLevelFacet seaLevelFacet = region.getRegionFacet(SeaLevelFacet.class); float seaLevel = seaLevelFacet.getSeaLevel(); Rect2i processRegion = facet.getWorldRegion(); float[] noise = surfaceNoise.noise(processRegion); for (int i = 0; i < noise.length; ++i) { noise[i] = seaLevel + seaLevel * ((noise[i] * 2.11f + 1f) / 2f); } facet.set(noise); region.setRegionFacet(SurfaceHeightFacet.class, facet); } }
@Override public void setSeed(long seed) { oceanNoise = new SubSampledNoise(new BrownianNoise(new PerlinNoise(seed + 1), 8), new Vector2f(0.0009f, 0.0009f), SAMPLE_RATE); }