Skip to content

Commit d67fd56

Browse files
committed
clean up noise benchmark tests
1 parent 861401e commit d67fd56

File tree

3 files changed

+90
-62
lines changed

3 files changed

+90
-62
lines changed

sources/noise/cell.swift

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ struct CellNoise2D:_CellNoise2D, HashedNoise
184184
public
185185
init(amplitude:Double, frequency:Double, seed:Int = 0)
186186
{
187-
self.amplitude = amplitude * 1/2
187+
self.amplitude = amplitude / 2
188188
self.frequency = frequency
189189
self.permutation_table = PermutationTable(seed: seed)
190190
}
@@ -221,6 +221,74 @@ struct CellNoise2D:_CellNoise2D, HashedNoise
221221
}
222222
}
223223

224+
/*
225+
public
226+
struct TilingCellNoise2D:_CellNoise2D, HashedTilingNoise
227+
{
228+
let permutation_table:PermutationTable,
229+
amplitude:Double,
230+
frequency:Double,
231+
wavelengths:Math.IntV2
232+
233+
init(amplitude:Double, frequency:Double, permutation_table:PermutationTable, wavelengths:Math.IntV2)
234+
{
235+
self.amplitude = amplitude
236+
self.frequency = frequency
237+
self.permutation_table = permutation_table
238+
self.wavelengths = wavelengths
239+
}
240+
241+
public
242+
init(amplitude:Double, frequency:Double, wavelengths:Int, seed:Int = 0)
243+
{
244+
self.init( amplitude: amplitude, frequency: frequency,
245+
wavelengths_x: wavelengths,
246+
wavelengths_y: wavelengths,
247+
seed: seed)
248+
}
249+
250+
public
251+
init(amplitude:Double, frequency:Double, wavelengths_x:Int, wavelengths_y:Int, seed:Int = 0)
252+
{
253+
self.amplitude = amplitude / 2
254+
self.frequency = frequency
255+
self.permutation_table = PermutationTable(seed: seed)
256+
self.wavelengths = (wavelengths_x, wavelengths_y)
257+
}
258+
259+
fileprivate
260+
func hash(point:Math.IntV2) -> Int
261+
{
262+
return self.permutation_table.hash(Math.mod(point, self.wavelengths))
263+
}
264+
265+
public
266+
func closest_point(_ x:Double, _ y:Double) -> (point:(Int, Int), r2:Double)
267+
{
268+
return self._closest_point(x, y)
269+
}
270+
271+
public
272+
func evaluate(_ x:Double, _ y:Double) -> Double
273+
{
274+
let (_, r2):((Int, Int), Double) = self.closest_point(x, y)
275+
return self.amplitude * r2
276+
}
277+
278+
public
279+
func evaluate(_ x:Double, _ y:Double, _:Double) -> Double
280+
{
281+
return self.evaluate(x, y)
282+
}
283+
284+
public
285+
func evaluate(_ x:Double, _ y:Double, _:Double, _:Double) -> Double
286+
{
287+
return self.evaluate(x, y)
288+
}
289+
}
290+
*/
291+
224292
public
225293
struct CellNoise3D:HashedNoise
226294
{

sources/noise/gradient.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ struct ClassicNoise3D:_ClassicNoise3D, HashedNoise
112112

113113
// UNDOCUMENTED
114114
public
115-
struct ClassicTilingNoise3D:_ClassicNoise3D, HashedTilingNoise
115+
struct TilingClassicNoise3D:_ClassicNoise3D, HashedTilingNoise
116116
{
117117
let permutation_table:PermutationTable,
118118
amplitude:Double,

tests/LinuxMain.swift

Lines changed: 20 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -9,73 +9,33 @@ banners(width: 700, ratio: 5)
99

1010
calibrate_noise(width: 256, height: 256)
1111

12-
var t0:Int
13-
1412
let viewer_size:Int = 1024
15-
var pixbuf:[UInt8]
13+
var pixbuf:[UInt8] = [UInt8](repeating: 0, count: viewer_size * viewer_size)
1614
let png_properties:PNGProperties = PNGProperties(width: viewer_size, height: viewer_size, bit_depth: 8, color: .grayscale, interlaced: false)!
1715

16+
func benchmark<Generator>(noise generator:Generator, name:String, offset:Double = 0) where Generator:Noise
17+
{
18+
let t0:Int = clock()
19+
for (i, (x, y)) in Domain2D(samples_x: viewer_size, samples_y: viewer_size).enumerated()
20+
{
21+
pixbuf[i] = UInt8(max(0, min(255, generator.evaluate(x, y) + offset)))
22+
}
23+
print("\(name): \(clock() - t0)")
24+
try! png_encode(path: "tests/\(name).png", raw_data: pixbuf, properties: png_properties)
25+
}
26+
1827
var poisson = DiskSampler2D(seed: 0)
19-
t0 = clock()
20-
pixbuf = [UInt8](repeating: 0, count: viewer_size * viewer_size)
28+
let t0:Int = clock()
2129
for point:(x:Double, y:Double) in poisson.generate(radius: 10, width: viewer_size, height: viewer_size)
2230
{
2331
pixbuf[Int(point.y) * viewer_size + Int(point.x)] = 255
2432
}
25-
print(clock() - t0)
33+
print("disk2d: \(clock() - t0)")
2634
try png_encode(path: "tests/disk2d.png", raw_data: pixbuf, properties: png_properties)
2735

28-
29-
let V:CellNoise2D = CellNoise2D(amplitude: 255, frequency: 0.01)
30-
t0 = clock()
31-
for (i, (x, y)) in Domain2D(samples_x: viewer_size, samples_y: viewer_size).enumerated()
32-
{
33-
pixbuf[i] = UInt8(max(0, min(255, V.evaluate(x, y))))
34-
}
35-
print(clock() - t0)
36-
try png_encode(path: "tests/cell2d.png", raw_data: pixbuf, properties: png_properties)
37-
38-
let V3:CellNoise3D = CellNoise3D(amplitude: 255, frequency: 0.01)
39-
t0 = clock()
40-
for (i, (x, y)) in Domain2D(samples_x: viewer_size, samples_y: viewer_size).enumerated()
41-
{
42-
pixbuf[i] = UInt8(max(0, min(255, V3.evaluate(x, y))))
43-
}
44-
print(clock() - t0)
45-
try png_encode(path: "tests/cell3d.png", raw_data: pixbuf, properties: png_properties)
46-
47-
let P:FBM<ClassicNoise3D> = FBM<ClassicNoise3D>(ClassicNoise3D(amplitude: 255, frequency: 0.001), octaves: 10, persistence: 0.62)
48-
t0 = clock()
49-
for (i, (x, y)) in Domain2D(samples_x: viewer_size, samples_y: viewer_size).enumerated()
50-
{
51-
pixbuf[i] = UInt8(max(0, min(255, P.evaluate(x, y) + 127.5)))
52-
}
53-
print(clock() - t0)
54-
try png_encode(path: "tests/classic3d.png", raw_data: pixbuf, properties: png_properties)
55-
56-
let PT:Noise = ClassicTilingNoise3D(amplitude: 255, frequency: 16 / Double(viewer_size), wavelengths: 16)
57-
t0 = clock()
58-
for (i, (x, y)) in Domain2D(samples_x: viewer_size, samples_y: viewer_size).enumerated()
59-
{
60-
pixbuf[i] = UInt8(max(0, min(255, PT.evaluate(x, y) + 127.5)))
61-
}
62-
print(clock() - t0)
63-
try png_encode(path: "tests/classic_tiling3d.png", raw_data: pixbuf, properties: png_properties)
64-
65-
let SS:FBM<GradientNoise2D> = FBM<GradientNoise2D>(GradientNoise2D(amplitude: 180, frequency: 0.001), octaves: 10, persistence: 0.62)
66-
t0 = clock()
67-
for (i, (x, y)) in Domain2D(samples_x: viewer_size, samples_y: viewer_size).enumerated()
68-
{
69-
pixbuf[i] = UInt8(max(0, min(255, SS.evaluate(x, y) + 127.5)))
70-
}
71-
print(clock() - t0)
72-
try png_encode(path: "tests/gradient2d.png", raw_data: pixbuf, properties: png_properties)
73-
74-
let SS3D:FBM<GradientNoise3D> = FBM<GradientNoise3D>(GradientNoise3D(amplitude: 180, frequency: 0.001), octaves: 10, persistence: 0.62)
75-
t0 = clock()
76-
for (i, (x, y)) in Domain2D(samples_x: viewer_size, samples_y: viewer_size).enumerated()
77-
{
78-
pixbuf[i] = UInt8(max(0, min(255, SS3D.evaluate(x, y) + 127.5)))
79-
}
80-
print(clock() - t0)
81-
try png_encode(path: "tests/gradient3d.png", raw_data: pixbuf, properties: png_properties)
36+
benchmark(noise: CellNoise2D(amplitude: 255, frequency: 0.01), name: "cell2d")
37+
benchmark(noise: CellNoise3D(amplitude: 255, frequency: 0.01), name: "cell3d")
38+
benchmark(noise: FBM<ClassicNoise3D>(ClassicNoise3D(amplitude: 255, frequency: 0.001), octaves: 10, persistence: 0.62), name: "classic3d", offset: 127.5)
39+
benchmark(noise: TilingClassicNoise3D(amplitude: 255, frequency: 16 / Double(viewer_size), wavelengths: 16), name: "classic_tiling3d", offset: 127.5)
40+
benchmark(noise: FBM<GradientNoise2D>(GradientNoise2D(amplitude: 180, frequency: 0.001), octaves: 10, persistence: 0.62), name: "gradient2d", offset: 127.5)
41+
benchmark(noise: FBM<GradientNoise3D>(GradientNoise3D(amplitude: 180, frequency: 0.001), octaves: 10, persistence: 0.62), name: "gradient3d", offset: 127.5)

0 commit comments

Comments
 (0)