noise_functions/
modifiers.rs1mod abs;
2mod add;
3mod add_seed;
4mod ceil;
5mod clamp;
6mod cos;
7mod div;
8mod fbm;
9mod floor;
10mod frequency;
11mod lerp;
12mod map;
13mod max;
14mod min;
15mod mul;
16mod mul_seed;
17mod neg;
18pub mod open_simplex_2;
19mod pow;
20mod rem;
21mod ridged;
22mod round;
23mod seeded;
24mod sin;
25mod sqrt;
26mod sub;
27mod tan;
28mod tileable;
29mod translate_x;
30mod translate_xy;
31mod translate_xyz;
32mod translate_xyzw;
33mod triangle_wave;
34
35pub use abs::Abs;
36pub use add::Add;
37pub use add_seed::AddSeed;
38pub use ceil::Ceil;
39pub use clamp::Clamp;
40pub use cos::Cos;
41pub use div::Div;
42pub use fbm::Fbm;
43pub use floor::Floor;
44pub use frequency::Frequency;
45pub use lerp::Lerp;
46pub use map::Map;
47pub use max::Max;
48pub use min::Min;
49pub use mul::Mul;
50pub use mul_seed::MulSeed;
51pub use neg::Neg;
52pub use pow::Pow;
53pub use rem::Rem;
54pub use ridged::Ridged;
55pub use round::Round;
56pub use seeded::Seeded;
57pub use sin::Sin;
58pub use sqrt::Sqrt;
59pub use sub::Sub;
60pub use tan::Tan;
61pub use tileable::Tileable;
62pub use translate_x::TranslateX;
63pub use translate_xy::TranslateXy;
64pub use translate_xyz::TranslateXyz;
65pub use translate_xyzw::TranslateXyzw;
66pub use triangle_wave::TriangleWave;
67
68use crate::Noise;
69
70#[derive(Debug, Clone, Copy, PartialEq)]
72pub struct Weighted<Fractal> {
73 pub fractal: Fractal,
74 pub strength: f32,
75}
76
77impl<Fractal> Noise for Weighted<Fractal> {}
78
79#[inline(always)]
82pub const fn fractal_bounding(octaves: u32, gain: f32) -> f32 {
83 let gain = crate::math::const_abs(gain);
84 let mut amp = gain;
85 let mut amp_fractal = 1.0;
86 let mut i = 0;
87
88 while i < octaves {
89 amp_fractal += amp;
90 amp *= gain;
91 i += 1;
92 }
93
94 1.0 / amp_fractal
95}