Skip to content

Commit 04dc9f6

Browse files
committed
revert last change
1 parent 545569f commit 04dc9f6

File tree

1 file changed

+25
-61
lines changed

1 file changed

+25
-61
lines changed

sources/noise/compounds.swift

Lines changed: 25 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,7 @@ public
22
struct FBM<Source>:Noise where Source:Noise
33
{
44
private
5-
let generators:[Source],
6-
octaves:Int,
7-
persistence:Double,
8-
lacunarity:Double,
9-
amplitude:Double
5+
let generators:[Source]
106

117
// UNDOCUMENTED
128
public
@@ -29,45 +25,31 @@ struct FBM<Source>:Noise where Source:Noise
2925
init(generators:[Source])
3026
{
3127
self.generators = generators
32-
33-
self.octaves = 1
34-
self.persistence = 0.5
35-
self.lacunarity = 2
36-
self.amplitude = 1
3728
}
3829

3930
@available(*, unavailable, message: "init(amplitude:frequency:seed:) defaults to octaves = 1, which does not make sense for FBM modules")
4031
public
4132
init(amplitude:Double, frequency:Double, seed:Int)
4233
{
4334
self.generators = []
44-
45-
self.octaves = 1
46-
self.persistence = 0.5
47-
self.lacunarity = 2
48-
self.amplitude = 1
4935
}
5036

5137
@available(*, unavailable, message: "use init(_:octaves:persistence:lacunarity:) instead")
5238
public
5339
init(amplitude:Double, frequency:Double, octaves:Int, persistence:Double = 0.75, lacunarity:Double = 2, seed:Int = 0)
5440
{
5541
self.generators = []
56-
57-
self.octaves = 1
58-
self.persistence = 0.5
59-
self.lacunarity = 2
60-
self.amplitude = 1
6142
}
6243

6344
// UNDOCUMENTED, default was changed from 0.75 to 0.5
6445
public
6546
init(_ source:Source, octaves:Int, persistence:Double = 0.5, lacunarity:Double = 2)
6647
{
6748
// calculate maximum range
49+
let range_inverse:Double
6850
if persistence == 0.5
6951
{
70-
self.amplitude = Double(1 << (octaves - 1)) / Double(1 << octaves - 1)
52+
range_inverse = Double(1 << (octaves - 1)) / Double(1 << octaves - 1)
7153
}
7254
else
7355
{
@@ -79,63 +61,48 @@ struct FBM<Source>:Noise where Source:Noise
7961
contribution *= persistence
8062
}
8163

82-
self.amplitude = 1 / accumulation
64+
range_inverse = 1 / accumulation
8365
}
8466

85-
var generators:[Source] = [source]
67+
var generators:[Source] = [source.amplitude_scaled(by: range_inverse)]
8668
generators.reserveCapacity(octaves)
8769
for i in (0 ..< octaves - 1)
8870
{
89-
generators.append(generators[i].reseeded())
71+
generators.append(generators[i].amplitude_scaled(by: persistence).frequency_scaled(by: lacunarity).reseeded())
9072
}
9173

9274
self.generators = generators
93-
self.octaves = octaves
94-
self.persistence = persistence
95-
self.lacunarity = lacunarity
9675
}
9776

9877
public
9978
func evaluate(_ x:Double, _ y:Double) -> Double
10079
{
101-
var Σ:Double = 0,
102-
a:Double = self.amplitude,
103-
f:Double = 1
80+
var Σ:Double = 0
10481
for generator in self.generators
10582
{
106-
Σ += a * generator.evaluate(f * x, f * y)
107-
a *= self.persistence
108-
f *= self.lacunarity
83+
Σ += generator.evaluate(x, y) // a .reduce(:{}) is much slower than a simple loop
10984
}
11085
return Σ
11186
}
11287

11388
public
11489
func evaluate(_ x:Double, _ y:Double, _ z:Double) -> Double
11590
{
116-
var Σ:Double = 0,
117-
a:Double = self.amplitude,
118-
f:Double = 1
91+
var Σ:Double = 0
11992
for generator in self.generators
12093
{
121-
Σ += a * generator.evaluate(f * x, f * y, f * z)
122-
a *= self.persistence
123-
f *= self.lacunarity
94+
Σ += generator.evaluate(x, y, z)
12495
}
12596
return Σ
12697
}
12798

12899
public
129100
func evaluate(_ x:Double, _ y:Double, _ z:Double, _ w:Double) -> Double
130101
{
131-
var Σ:Double = 0,
132-
a:Double = self.amplitude,
133-
f:Double = 1
102+
var Σ:Double = 0
134103
for generator in self.generators
135104
{
136-
Σ += a * generator.evaluate(f * x, f * y, f * z, f * w)
137-
a *= self.persistence
138-
f *= self.lacunarity
105+
Σ += generator.evaluate(x, y, z, w)
139106
}
140107
return Σ
141108
}
@@ -147,8 +114,7 @@ struct DistortedNoise<Source, Displacement>:Noise where Source:Noise, Displaceme
147114
{
148115
private
149116
let source:Source,
150-
displacement:Displacement,
151-
strength:Double
117+
displacement:Displacement
152118

153119
public
154120
func amplitude_scaled(by factor:Double) -> DistortedNoise<Source, Displacement>
@@ -171,48 +137,46 @@ struct DistortedNoise<Source, Displacement>:Noise where Source:Noise, Displaceme
171137
}
172138

173139
public
174-
init(displacing source:Source, with displacement:Displacement, strength:Double = 1)
140+
init(displacing source:Source, with displacement:Displacement)
175141
{
176142
self.source = source
177143
self.displacement = displacement
178-
self.strength = strength
179144
}
180145

181146
public
182147
func evaluate(_ x: Double, _ y: Double) -> Double
183148
{
184-
let dx:Double = self.strength * self.displacement.evaluate(x, y),
185-
dy:Double = self.strength * self.displacement.evaluate(y, x)
149+
let dx:Double = self.displacement.evaluate(x, y),
150+
dy:Double = self.displacement.evaluate(y, x)
186151
return self.source.evaluate(x + dx, y + dy)
187152
}
188153

189154
public
190155
func evaluate(_ x: Double, _ y: Double, _ z: Double) -> Double
191156
{
192-
let dx:Double = self.strength * self.displacement.evaluate(x, y, z),
193-
dy:Double = self.strength * self.displacement.evaluate(y, z, x),
194-
dz:Double = self.strength * self.displacement.evaluate(z, x, y)
157+
let dx:Double = self.displacement.evaluate(x, y, z),
158+
dy:Double = self.displacement.evaluate(y, z, x),
159+
dz:Double = self.displacement.evaluate(z, x, y)
195160
return self.source.evaluate(x + dx, y + dy, z + dz)
196161
}
197162

198163
public
199164
func evaluate(_ x: Double, _ y: Double, _ z: Double, _ w:Double) -> Double
200165
{
201-
let dx:Double = self.strength * self.displacement.evaluate(x, y, z, w),
202-
dy:Double = self.strength * self.displacement.evaluate(y, z, w, x),
203-
dz:Double = self.strength * self.displacement.evaluate(z, w, x, y),
204-
dw:Double = self.strength * self.displacement.evaluate(w, x, y, z)
166+
let dx:Double = self.displacement.evaluate(x, y, z, w),
167+
dy:Double = self.displacement.evaluate(y, z, w, x),
168+
dz:Double = self.displacement.evaluate(z, w, x, y),
169+
dw:Double = self.displacement.evaluate(w, x, y, z)
205170
return self.source.evaluate(x + dx, y + dy, z + dz, w + dw)
206171
}
207172
}
208173

209174
extension DistortedNoise where Source == Displacement
210175
{
211176
public
212-
init(_ source:Source, strength:Double = 1)
177+
init(_ source:Source, strength:Double)
213178
{
214179
self.source = source
215-
self.displacement = source
216-
self.strength = strength
180+
self.displacement = source.amplitude_scaled(by: strength)
217181
}
218182
}

0 commit comments

Comments
 (0)