1
+ using System ;
1
2
using UnityEngine ;
2
3
3
4
namespace Gameframe . Procgen
@@ -11,7 +12,7 @@ public static class SimplexGradientNoise
11
12
private static readonly float SimplexScale1D = 64f / 27f ;
12
13
13
14
#region 1D
14
- public static NoiseSample SampleValue1D ( float pointX , uint seed , float frequency )
15
+ public static NoiseSample Value1D ( float pointX , uint seed , float frequency )
15
16
{
16
17
pointX *= frequency ;
17
18
@@ -44,7 +45,7 @@ private static NoiseSample _Value1DPart(float pointX, int ix, uint seed)
44
45
}
45
46
} ;
46
47
}
47
- public static NoiseSample SampleGradient1D ( float pointX , uint seed , float frequency )
48
+ public static NoiseSample Gradient1D ( float pointX , uint seed , float frequency )
48
49
{
49
50
pointX *= frequency ;
50
51
@@ -86,7 +87,7 @@ private static float Hash1D(int value, uint seed)
86
87
#endregion
87
88
88
89
#region 2D
89
- public static NoiseSample SampleValue2D ( float x , float y , uint seed , float frequency )
90
+ public static NoiseSample Value2D ( float x , float y , uint seed , float frequency )
90
91
{
91
92
x *= frequency ;
92
93
y *= frequency ;
@@ -115,7 +116,7 @@ public static NoiseSample SampleValue2D(float x, float y, uint seed, float frequ
115
116
116
117
return sample * 8 ;
117
118
}
118
- public static NoiseSample SampleGradient2D ( float x , float y , uint seed , float frequency )
119
+ public static NoiseSample Gradient2D ( float x , float y , uint seed , float frequency )
119
120
{
120
121
x *= frequency ;
121
122
y *= frequency ;
@@ -212,7 +213,7 @@ private static float Hash2D(int x, int y, uint seed)
212
213
#endregion
213
214
214
215
#region 3D
215
- public static NoiseSample SampleValue3D ( float x , float y , float z , uint seed , float frequency )
216
+ public static NoiseSample Value3D ( float x , float y , float z , uint seed , float frequency )
216
217
{
217
218
x *= frequency ;
218
219
y *= frequency ;
@@ -280,7 +281,7 @@ public static NoiseSample SampleValue3D(float x, float y, float z, uint seed, fl
280
281
281
282
return sample * 8 ;
282
283
}
283
- public static NoiseSample SampleGradient3D ( float x , float y , float z , uint seed , float frequency )
284
+ public static NoiseSample Gradient3D ( float x , float y , float z , uint seed , float frequency )
284
285
{
285
286
x *= frequency ;
286
287
y *= frequency ;
@@ -351,6 +352,28 @@ public static NoiseSample SampleGradient3D(float x, float y, float z, uint seed,
351
352
352
353
return sample ;
353
354
}
355
+ public static NoiseSample FractalGradient3D ( float x , float y , float z , uint seed , float frequency , int octaves , float lacunarity = 2f , float persistence = 0.5f )
356
+ {
357
+ return _SampleFractal3D ( Gradient3D , x , y , z , seed , frequency , octaves , lacunarity , persistence ) ;
358
+ }
359
+ public static NoiseSample FractalValue3D ( float x , float y , float z , uint seed , float frequency , int octaves , float lacunarity = 2f , float persistence = 0.5f )
360
+ {
361
+ return _SampleFractal3D ( Value3D , x , y , z , seed , frequency , octaves , lacunarity , persistence ) ;
362
+ }
363
+ private static NoiseSample _SampleFractal3D ( Func < float , float , float , uint , float , NoiseSample > action , float x , float y , float z , uint seed , float frequency , int octaves , float lacunarity = 2f , float persistence = 0.5f )
364
+ {
365
+ var sum = action ( x , y , z , seed , frequency ) ;
366
+ var amplitude = 1f ;
367
+ var range = 1f ;
368
+ for ( var i = 1 ; i < octaves ; i ++ )
369
+ {
370
+ frequency *= lacunarity ;
371
+ amplitude *= persistence ;
372
+ range += amplitude ;
373
+ sum += action ( x , y , z , seed , frequency ) * amplitude ;
374
+ }
375
+ return sum * ( 1 / range ) ;
376
+ }
354
377
private static NoiseSample _Value3DPart ( float x , float y , float z , int ix , int iy , int iz , uint seed )
355
378
{
356
379
var unskew = ( ix + iy + iz ) * ( 1f / 6f ) ;
0 commit comments