mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-10-27 06:20:02 +00:00
Fix continent zoom compounding
- Build independent continent generators before applying zoom. - Share continent construction across runtime contexts. - Cover repeated construction and shared-generator isolation.
This commit is contained in:
7 files changed
+314
-5
No files matched your search
@@ -5,6 +5,7 @@ import art.arcane.iris.generation.stream.GenerationStreams;
|
||||
import art.arcane.iris.configuration.IrisSettings;
|
||||
import art.arcane.iris.pack.loading.IrisData;
|
||||
import art.arcane.iris.generation.image.IrisImageMapRuntime;
|
||||
import art.arcane.iris.generation.terrain.ContinentGenerator;
|
||||
import art.arcane.iris.generation.terrain.InferredType;
|
||||
import art.arcane.iris.generation.biome.IrisBiome;
|
||||
import art.arcane.iris.generation.terrain.IrisDimension;
|
||||
@@ -258,9 +259,7 @@ public final class DimensionTerrainContext implements DataProvider {
|
||||
inferredStreams.put(InferredType.SHORE, shoreBiomeStream);
|
||||
|
||||
ProceduralStream<InferredType> bridgeStream = focusBiome == null
|
||||
? dimension.getContinentalStyle()
|
||||
.create(rng.nextParallelRNG(234234565), dimensionData)
|
||||
.bake().scale(1D / dimension.getContinentZoom()).bake().stream()
|
||||
? ContinentGenerator.create(dimension, rng, dimensionData).stream()
|
||||
.convert(value -> value >= dimension.getLandChance()
|
||||
? InferredType.SEA
|
||||
: InferredType.LAND)
|
||||
|
||||
@@ -52,6 +52,7 @@ import art.arcane.iris.generation.decoration.IrisDecorationPart;
|
||||
import art.arcane.iris.generation.decoration.IrisDecorator;
|
||||
import art.arcane.iris.generation.noise.IrisGenerator;
|
||||
import art.arcane.iris.generation.noise.IrisGeneratorStyle;
|
||||
import art.arcane.iris.generation.terrain.ContinentGenerator;
|
||||
import art.arcane.iris.generation.terrain.IrisDimension;
|
||||
import art.arcane.iris.generation.context.IrisContext;
|
||||
import art.arcane.iris.generation.context.ChunkContext;
|
||||
@@ -390,8 +391,7 @@ public class IrisComplex implements DataProvider {
|
||||
.convertAware2D(ProceduralStream::get), "shoreBiomeStream", engine, cacheSize);
|
||||
inferredStreams.put(InferredType.SHORE, shoreBiomeStream);
|
||||
bridgeStream = focusedBiomes != null ? focusedBiomes.convert(IrisBiome::getInferredType) :
|
||||
GenerationStreams.cache2D(engine.getDimension().getContinentalStyle().create(rng.nextParallelRNG(234234565), getData())
|
||||
.bake().scale(1D / engine.getDimension().getContinentZoom()).bake().stream()
|
||||
GenerationStreams.cache2D(ContinentGenerator.create(engine.getDimension(), rng, getData()).stream()
|
||||
.convert((v) -> v >= engine.getDimension().getLandChance() ? InferredType.SEA : InferredType.LAND), "bridgeStream", engine, cacheSize);
|
||||
ProceduralStream<IrisBiome> proceduralBaseBiomeStream = focusedBiomes != null ? focusedBiomes :
|
||||
GenerationStreams.cache2D(bridgeStream.convertAware2D((t, x, z) -> inferredStreams.get(t).get(x, z))
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
package art.arcane.iris.generation.terrain;
|
||||
|
||||
import art.arcane.iris.pack.loading.IrisData;
|
||||
import art.arcane.volmlib.util.math.RNG;
|
||||
import art.arcane.volmlib.util.noise.CNG;
|
||||
|
||||
public final class ContinentGenerator {
|
||||
private static final int CONTINENT_SEED_SALT = 234234565;
|
||||
|
||||
private ContinentGenerator() {
|
||||
}
|
||||
|
||||
public static CNG create(IrisDimension dimension, RNG parentSeedSource, IrisData packData) {
|
||||
return scaleByContinentZoom(createContinentalStyleGenerator(dimension, parentSeedSource, packData), dimension);
|
||||
}
|
||||
|
||||
private static CNG createContinentalStyleGenerator(IrisDimension dimension, RNG parentSeedSource, IrisData packData) {
|
||||
return dimension.getContinentalStyle().createNoCache(deriveContinentSeed(parentSeedSource), packData);
|
||||
}
|
||||
|
||||
static RNG deriveContinentSeed(RNG parentSeedSource) {
|
||||
return parentSeedSource.nextParallelRNG(CONTINENT_SEED_SALT);
|
||||
}
|
||||
|
||||
private static CNG scaleByContinentZoom(CNG generator, IrisDimension dimension) {
|
||||
return generator.bake().scale(1D / dimension.getContinentZoom()).bake();
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user