@@ -9,73 +9,33 @@ banners(width: 700, ratio: 5)
9
9
10
10
calibrate_noise ( width: 256 , height: 256 )
11
11
12
- var t0 : Int
13
-
14
12
let viewer_size : Int = 1024
15
- var pixbuf : [ UInt8 ]
13
+ var pixbuf : [ UInt8 ] = [ UInt8 ] ( repeating : 0 , count : viewer_size * viewer_size )
16
14
let png_properties : PNGProperties = PNGProperties ( width: viewer_size, height: viewer_size, bit_depth: 8 , color: . grayscale, interlaced: false ) !
17
15
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
+
18
27
var poisson = DiskSampler2D ( seed: 0 )
19
- t0 = clock ( )
20
- pixbuf = [ UInt8] ( repeating: 0 , count: viewer_size * viewer_size)
28
+ let t0 : Int = clock ( )
21
29
for point : ( x: Double , y: Double ) in poisson. generate ( radius: 10 , width: viewer_size, height: viewer_size)
22
30
{
23
31
pixbuf [ Int ( point. y) * viewer_size + Int( point. x) ] = 255
24
32
}
25
- print ( clock ( ) - t0)
33
+ print ( " disk2d: \( clock ( ) - t0) " )
26
34
try png_encode ( path: " tests/disk2d.png " , raw_data: pixbuf, properties: png_properties)
27
35
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