5个版本
0.2.4 | 2024年4月6日 |
---|---|
0.2.3 | 2024年4月4日 |
0.2.1 | 2024年4月4日 |
0.2.0 | 2024年4月4日 |
0.1.0 | 2024年4月4日 |
#360 in 算法
123 每月下载次数
1MB
1.5K SLoC
这是一个程序噪声的集合,用于CPU射线追踪以及作为程序艺术和纹理的构建模块。
噪声针对速度进行了优化。大多数噪声都可用在所有四个维度(1D、2D、3D、4D),一些噪声仅在特定维度可用(或仍在开发中)。
所有噪声都有相同的签名,以便可以将它们作为参数传递给提供的分形函数。所有函数返回的值在-1.0和1.0之间。
此库没有外部依赖。
这些图像由lib.rs文件中的测试生成。您可以在那里看到每个噪声的示例。
例如,Perlin噪声图像是通过以下方式生成的
fn generate_perlin_image() {
let seed = 1;
let mut rng = UniformRandomGen::new(seed);
let width = 256;
let height = 256;
let img = ImageBuffer::from_fn(width, height, |x, y| {
let noise_val = perlin_noise_2d(
&mut rng,
x as f32 / width as f32 * 10.0,
y as f32 / height as f32 * 10.0,
seed,
);
let normalized_val = ((noise_val + 1.0) / 2.0 * 255.0) as u8;
Luma([normalized_val])
});
img.save("images/perlin.png").expect("Failed to save image");
}
此库目前正在开发中。更多噪声和分形函数正在开发中。
噪声函数
随机
pub fn random_noise_1d(rng: &mut UniformRandomGen, x: f32, seed: u32) -> f32;
pub fn random_noise_2d(rng: &mut UniformRandomGen, x: f32, y: f32, seed: u32) -> f32;
pub fn random_noise_3d(rng: &mut UniformRandomGen, x: f32, y: f32, z: f32, seed: u32) -> f32;
pub fn random_noise_4d(rng: &mut UniformRandomGen, x: f32, y: f32, z: f32, t: f32, seed: u32) -> f32;
随机过滤
pub fn random_noise_filtered_1d(rng: &mut UniformRandomGen, x: f32, seed: u32) -> f32;
pub fn random_noise_filtered_2d(rng: &mut UniformRandomGen, x: f32, y: f32, seed: u32) -> f32;
pub fn random_noise_filtered_3d(rng: &mut UniformRandomGen, x: f32, y: f32, z: f32, seed: u32) -> f32;
pub fn random_noise_filtered_4d(rng: &mut UniformRandomGen, x: f32, y: f32, z: f32, t: f32, seed: u32) -> f32;
Perlin
pub fn perlin_noise_1d(rng: &mut UniformRandomGen, x: f32, seed: u32) -> f32;
pub fn perlin_noise_2d(rng: &mut UniformRandomGen, x: f32, y: f32, seed: u32) -> f32;
pub fn perlin_noise_3d(rng: &mut UniformRandomGen, x: f32, y: f32, z: f32, seed: u32) -> f32;
pub fn perlin_noise_4d(rng: &mut UniformRandomGen, x: f32, y: f32, z: f32, t: f32, seed: u32) -> f32;
Musgrave
pub fn musgrave_noise_1d(rng: &mut UniformRandomGen, x: f32, seed: u32) -> f32;
pub fn musgrave_noise_2d(rng: &mut UniformRandomGen, x: f32, y: f32, seed: u32) -> f32;
pub fn musgrave_noise_3d(rng: &mut UniformRandomGen, x: f32, y: f32, z: f32, seed: u32) -> f32;
pub fn musgrave_noise_4d(rng: &mut UniformRandomGen, x: f32, y: f32, z: f32, t: f32, seed: u32) -> f32;
Simplex
pub fn simplex_noise_1d(rng: &mut UniformRandomGen, x: f32, seed: u32) -> f32;
pub fn simplex_noise_2d(rng: &mut UniformRandomGen, x: f32, y: f32, seed: u32) -> f32;
pub fn simplex_noise_3d(rng: &mut UniformRandomGen, x: f32, y: f32, z: f32, seed: u32) -> f32;
pub fn simplex_noise_4d(rng: &mut UniformRandomGen, x: f32, y: f32, z: f32, t: f32, seed: u32) -> f32;
Worley F1
pub fn worley_f1_noise_2d(rng: &mut UniformRandomGen, x: f32, y: f32, seed: u32) -> f32;
分形函数
分形加
Perlin
Musgrave
Simplex
Worley F1
pub fn fractal_noise_add_1d<F: Fn(&mut UniformRandomGen, f32, u32) -> f32>(rng: &mut UniformRandomGen, x: f32, noise_func: F, octaves: i32, freq_falloff: f32, lacunarity: f32, seed: u32) -> f32
pub fn fractal_noise_add_2d<F: Fn(&mut UniformRandomGen, f32, f32, u32) -> f32>(rng: &mut UniformRandomGen, x: f32, y: f32, noise_func: F, octaves: i32, freq_falloff: f32, lacunarity: f32, seed: u32) -> f32;
pub fn fractal_noise_add_3d<F: Fn(&mut UniformRandomGen, f32, f32, f32, u32) -> f32>(rng: &mut UniformRandomGen, x: f32, y: f32, z: f32, noise_func: F, octaves: i32, freq_falloff: f32, lacunarity: f32, seed: u32) -> f32;
pub fn fractal_noise_add_4d<F: Fn(&mut UniformRandomGen, f32, f32, f32, f32, u32) -> f32>(rng: &mut UniformRandomGen, x: f32, y: f32, z: f32, t: f32, noise_func: F, octaves: i32, freq_falloff: f32, lacunarity: f32, seed: u32) -> f32;
分形加绝对值
Perlin
Musgrave
Simplex
Worley F1
pub fn fractal_noise_add_abs_1d<F: Fn(&mut UniformRandomGen, f32, u32) -> f32>(rng: &mut UniformRandomGen, x: f32, noise_func: F, octaves: i32, freq_falloff: f32, lacunarity: f32, seed: u32) -> f32
pub fn fractal_noise_add_abs_2d<F: Fn(&mut UniformRandomGen, f32, f32, u32) -> f32>( rng: &mut UniformRandomGen, x: f32, y: f32, noise_func: F, octaves: i32, freq_falloff: f32, lacunarity: f32, seed: u32) -> f32;
pub fn fractal_noise_add_abs_3d<F: Fn(&mut UniformRandomGen, f32, f32, f32, u32) -> f32>(rng: &mut UniformRandomGen, x: f32, y: f32, z: f32, noise_func: F, octaves: i32, freq_falloff: f32, lacunarity: f32, seed: u32) -> f32;
pub fn fractal_noise_add_abs_4d<F: Fn(&mut UniformRandomGen, f32, f32, f32, f32, u32) -> f32>(rng: &mut UniformRandomGen, x: f32, y: f32, z: f32, t: f32, noise_func: F, octaves: i32, freq_falloff: f32, lacunarity: f32, seed: u32) -> f32;
分形乘
Perlin
Musgrave
Simplex
Worley F1
pub fn fractal_noise_mul_1d<F: Fn(&mut UniformRandomGen, f32, u32) -> f32>( rng: &mut UniformRandomGen, x: f32, noise_func: F, octaves: i32, freq_falloff: f32, lacunarity: f32, offset: f32, seed: u32) -> f32
pub fn fractal_noise_mul_2d<F: Fn(&mut UniformRandomGen, f32, f32, u32) -> f32>(rng: &mut UniformRandomGen, x: f32, y: f32, noise_func: F, octaves: i32, freq_falloff: f32, lacunarity: f32, offset: f32, seed: u32) -> f32;
pub fn fractal_noise_mul_3d<F: Fn(&mut UniformRandomGen, f32, f32, f32, u32) -> f32>(rng: &mut UniformRandomGen, x: f32, y: f32, z: f32, noise_func: F, octaves: i32, freq_falloff: f32, lacunarity: f32, offset: f32, seed: u32) -> f32;
pub fn fractal_noise_mul_4d<F: Fn(&mut UniformRandomGen, f32, f32, f32, f32, u32) -> f32>(rng: &mut UniformRandomGen, x: f32, y: f32, z: f32, t: f32, noise_func: F, octaves: i32, freq_falloff: f32, lacunarity: f32, offset: f32, seed: u32) -> f32;