Skip to content

Commit 3ef9d38

Browse files
author
Cory Leach
committed
Smooth noise methods
1 parent c7e0455 commit 3ef9d38

File tree

2 files changed

+96
-0
lines changed

2 files changed

+96
-0
lines changed

Runtime/Utility/SmoothNoise.cs

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
using UnityEngine;
2+
3+
namespace Gameframe.Procgen
4+
{
5+
public static class SmoothNoise
6+
{
7+
public static float Value1d(float x, uint seed)
8+
{
9+
var x0 = Mathf.FloorToInt(x);
10+
var x1 = x0 + 1;
11+
12+
var t = x - x0;
13+
14+
var v0 = SquirrelEiserloh.Get1dNoiseZeroToOne(x0, seed);
15+
var v1 = SquirrelEiserloh.Get1dNoiseZeroToOne(x1, seed);
16+
17+
return Mathf.Lerp(v0, v1, t);
18+
}
19+
20+
public static float Value2d(Vector2 v, uint seed)
21+
{
22+
var x0 = (int) v.x;
23+
var y0 = (int) v.y;
24+
var x1 = x0 + 1;
25+
var y1 = y0 + 1;
26+
27+
var tx = v.x - x0;
28+
var ty = v.y - y0;
29+
30+
var v00 = SquirrelEiserloh.Get2dNoiseZeroToOne(x0, y0, seed);
31+
var v01 = SquirrelEiserloh.Get2dNoiseZeroToOne(x0, y1, seed);
32+
33+
var v10 = SquirrelEiserloh.Get2dNoiseZeroToOne(x1, y0, seed);
34+
var v11 = SquirrelEiserloh.Get2dNoiseZeroToOne(x1, y1, seed);
35+
36+
var edge1 = Mathf.Lerp(v00, v10, tx);
37+
var edge2 = Mathf.Lerp(v01, v11, tx);
38+
39+
return Mathf.Lerp(edge1, edge2, ty);
40+
}
41+
42+
public static float Value3d(Vector3 v, uint seed)
43+
{
44+
var x0 = (int) v.x;
45+
var y0 = (int) v.y;
46+
var z0 = (int) v.z;
47+
48+
var x1 = x0 + 1;
49+
var y1 = y0 + 1;
50+
var z1 = z0 + 1;
51+
52+
var tx = v.x - x0;
53+
var ty = v.y - y0;
54+
var tz = v.z - z0;
55+
56+
var v000 = SquirrelEiserloh.Get3dNoiseZeroToOne(x0, y0, z0, seed);
57+
var v010 = SquirrelEiserloh.Get3dNoiseZeroToOne(x0, y1, z0, seed);
58+
var v001 = SquirrelEiserloh.Get3dNoiseZeroToOne(x0, y0, z1, seed);
59+
var v011 = SquirrelEiserloh.Get3dNoiseZeroToOne(x0, y1, z1, seed);
60+
61+
var v100 = SquirrelEiserloh.Get3dNoiseZeroToOne(x1, y0, z0, seed);
62+
var v110 = SquirrelEiserloh.Get3dNoiseZeroToOne(x1, y1, z0, seed);
63+
var v101 = SquirrelEiserloh.Get3dNoiseZeroToOne(x1, y0, z1, seed);
64+
var v111 = SquirrelEiserloh.Get3dNoiseZeroToOne(x1, y1, z1, seed);
65+
66+
//Lerp along all edges along the x axis
67+
var xEdge1 = Mathf.Lerp(v000, v100, tx);
68+
var xEdge2 = Mathf.Lerp(v010, v110, tx);
69+
var xEdge3 = Mathf.Lerp(v001, v101, tx);
70+
var xEdge4 = Mathf.Lerp(v011, v111, tx);
71+
72+
//Lerp over y
73+
var yEdge1 = Mathf.Lerp(xEdge1, xEdge2, ty);
74+
var yEdge2 = Mathf.Lerp(xEdge3, xEdge4, ty);
75+
76+
//Finally lerp over z
77+
return Mathf.Lerp(yEdge1, yEdge2, tz);
78+
}
79+
80+
private static float Smooth(float t)
81+
{
82+
return t * t * t * (t * (t * 6f - 15f) + 10f);
83+
}
84+
}
85+
}

Runtime/Utility/SmoothNoise.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)