Skip to content

Commit

Permalink
domain warping on the base terrain
Browse files Browse the repository at this point in the history
  • Loading branch information
jmdejong committed Oct 1, 2023
1 parent 6f71ae4 commit f91a69f
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 8 deletions.
9 changes: 9 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<script src="priorityqueue.js"></script>
<script src="util.js"></script>
<script src="vec2.js"></script>
<script src="noise.js"></script>
<script src="display.js"></script>
<script src="main.js"></script>
<link href="style.css" rel="stylesheet" />
Expand Down Expand Up @@ -48,6 +49,14 @@
base height
<input type="number" name="baseHeight" value="0.5" step="0.1" />
</label>
<label>
domain warp size
<input type="number" name="warpSize" value="300" min="1" />
</label>
<label>
domain warp effect
<input type="number" name="warpEffect" value="0" />
</label>
<br />

<label>
Expand Down
16 changes: 8 additions & 8 deletions main.js
Original file line number Diff line number Diff line change
Expand Up @@ -228,14 +228,14 @@ class World {
this.sediment = {created: 0, deposited: 0, lost: 0};
}

heighten(amplitude, featureSize, base, edge) {
let noise = new FastNoiseLite(this.graph.seed);
noise.SetNoiseType(FastNoiseLite.NoiseType.OpenSimplex2);
noise.SetFractalType(FastNoiseLite.FractalType.FBm);
noise.SetFractalOctaves(8);
noise.SetFrequency(1/featureSize);
heighten(amplitude, featureSize, base, warpSize, warpEffect) {
let noise = new Simplex(this.graph.seed, 8, 1/featureSize);
let xwarp = new Simplex(this.graph.seed ^ 123, 4, 1/warpSize);
console.log(xwarp);
let ywarp = new Simplex(this.graph.seed ^ 321, 4, 1/warpSize);
console.log("warp", warpEffect, warpSize);
for (let node of this.graph.all()) {
node.changeGround(noise.GetNoise(node.pos.x, node.pos.y) * amplitude + base);
node.changeGround(base + amplitude * noise.noise(node.pos.add(vec2(xwarp.noise(node.pos), ywarp.noise(node.pos)).mult(warpEffect))));
}
}

Expand Down Expand Up @@ -378,7 +378,7 @@ function generate(settings) {
let size = settings.size;
let graph = time("initialize graph", () => new NodeGraph(settings.seed, vec2(size, size), settings.nodeSize || 8, settings.nodeRandomness));
let world = new World(graph);
time("heighten", () => world.heighten(settings.amplitude, settings.featureSize, settings.baseHeight));
time("heighten", () => world.heighten(settings.amplitude, settings.featureSize, settings.baseHeight, settings.warpSize, settings.warpEffect));
time("cut edge", () => world.cutEdge(settings.edgeHeight, size * 0.005 * settings.edgePercentage, settings.edgeMode == "add", settings.edgeShape == "parabole"));
let sorted = time("land", () => world.land(settings));
time("drain", () => world.drain(sorted, settings.rainfall));
Expand Down
16 changes: 16 additions & 0 deletions noise.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
"use strict";

class Simplex {

constructor(seed, octaves, frequency) {
this.fnl = new FastNoiseLite(seed);
this.fnl.SetNoiseType(FastNoiseLite.NoiseType.OpenSimplex2);
this.fnl.SetFractalType(FastNoiseLite.FractalType.FBm);
this.fnl.SetFractalOctaves(octaves);
this.fnl.SetFrequency(frequency);
}

noise(pos) {
return this.fnl.GetNoise(pos.x, pos.y);
}
}

0 comments on commit f91a69f

Please sign in to comment.