#simplex-noise #simplex #noise #perlin-noise #procedural #perlin #worley

libnoise

一个简单、高效且可定制的程序化噪声生成库

5 个版本 (稳定)

1.1.2 2024年2月28日
1.1.1 2024年1月12日
1.0.0 2023年11月11日
0.1.0 2023年8月9日

#147 in 数学

Download history 106/week @ 2024-03-11 53/week @ 2024-03-18 57/week @ 2024-03-25 85/week @ 2024-04-01 49/week @ 2024-04-08 54/week @ 2024-04-15 199/week @ 2024-04-22 92/week @ 2024-04-29 129/week @ 2024-05-06 152/week @ 2024-05-13 45/week @ 2024-05-20 59/week @ 2024-05-27 94/week @ 2024-06-03 98/week @ 2024-06-10 67/week @ 2024-06-17 118/week @ 2024-06-24

379 每月下载量

MIT 许可证

5.5MB
3K SLoC

libnoise

format lint test codecov docs.rs Crates.io

受 C++ 的 libnoise 启发的简单、高效且可定制的程序化噪声生成库,具有以下特点:

  • 通过 Source 提供的源实现简单的连贯噪声生成
  • 通过链式适配器创建模块化生成器,以修改和组合生成器的输入和输出,并通过 Generator 特性灵活创建自定义生成器和适配器
  • 通过 NoiseBuffer 高效且缓存友好的采样生成器,大多数生成器复杂性在编译时解决
  • 通过 Visualizer 轻松可视化生成器输出,便于调试

Libnoise 提供生成连贯噪声的实用工具,并可通过应用各种操作来定制它们,这些操作可以修改和组合生成器。该库专注于可定制性,允许用户创建自定义生成器和修饰符。

最相关的文档可以在 文档 中找到,具体请参考 SourceGenerator

使用方法

首先,通过编辑您的 Cargo.toml 将依赖项添加到您的项目中

[dependencies]
libnoise = "1.1"

为了快速入门,使用 Source 中找到的许多源之一创建一个源生成器,并应用 Generator 文档中记录的适配器。有关更详细的介绍,请参阅 快速入门指南

use libnoise::prelude::*;

// build a simplex noise generator seeded with 42
let generator = Source::simplex(42);

// sample the generator for input point [0.2, 0.5]
let value = generator.sample([0.2, 0.5]);

注意维度,它作为常量泛型参数内部表示,通过用二维输入点采样生成器来自动推断。

当然,我们可以创建更多有趣的复杂生成器

use libnoise::prelude::*;

// build a generator
let generator = Source::simplex(42)                 // start with simplex noise
    .fbm(5, 0.013, 2.0, 0.5)                        // apply fractal brownian motion
    .blend(                                         // apply blending...
        Source::worley(43).scale([0.05, 0.05]),     // ...with scaled worley noise
        Source::worley(44).scale([0.02, 0.02]))     // ...controlled by other worley noise
    .lambda(|f| (f * 2.0).sin() * 0.3 + f * 0.7);   // apply a closure to the noise

// sample the generator for input point [0.2, 0.5]
let value = generator.sample([0.2, 0.5]);

我们还可以使用 NoiseBuffer 来高效地用噪声填充 n 维数组,以及使用 Visualizer 来获取给定生成器的视觉表示。上述生成器在采样每个像素位置时产生以下图像

image

通常将第 3 或 4 维解释为时间,这样我们就可以生成时空噪声,例如

image

贡献

欢迎贡献者和功能建议!

如果您想直接联系我,最佳方式是通过 discord(用户名:oogie)。

许可

Libnoise 在 MIT 许可证的条款下分发。

有关详细信息,请参阅 LICENSE-MIT

依赖项

~0.8–14MB
~123K SLoC