#noise #simd #perlin #simplex #procedural #node-tree

fastnoise2

A safe Rust wrapper for FastNoise2, a node-based noise generation library optimized with SIMD

3 个不稳定版本

0.2.0 2024年8月18日
0.1.1 2024年8月14日
0.1.0 2024年8月14日

#267 in 硬件支持

Download history 206/week @ 2024-08-10 165/week @ 2024-08-17

每月371次下载

MIT许可证

470KB
6K SLoC

C++ 4K SLoC // 0.0% comments Rust 2K SLoC // 0.0% comments GLSL 101 SLoC // 0.1% comments Bitbake 9 SLoC

fastnoise2

Crates.io License Crates.io Version docs.rs

fastnoise2提供了一个易于使用且大部分安全的接口,用于FastNoise2 C++库,该库通过SIMD提供基于节点图模块化的噪声生成。

NoiseTool Node Tree

此crate是FastNoise2的不安全绑定fastnoise2-sys的包装。

示例

以下是一个由FastNoise2的NoiseTool导出的编码节点树的示例。

use fastnoise2::SafeNode;

let (x_size, y_size) = (1000, 1000);
let encoded_node_tree = "EQACAAAAAAAgQBAAAAAAQBkAEwDD9Sg/DQAEAAAAAAAgQAkAAGZmJj8AAAAAPwEEAAAAAAAAAEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM3MTD4AMzMzPwAAAAA/";
let node = SafeNode::from_encoded_node_tree(encoded_node_tree).unwrap();

// Allocate a buffer of enough size to hold all output data.
let mut noise_out = vec![0.0; (x_size * y_size) as usize];

let min_max = node.gen_uniform_grid_2d(
    &mut noise_out,
    -x_size / 2, // x offset
    -y_size / 2, // y offset
    x_size,
    y_size,
    0.01, // frequency
    1337, // seed
);

// use `noise_out`!

您还可以使用FastNoise2的元数据系统手动编码节点树,使用Node,或者通过组合生成器,参见SafeNode

查看examples了解更多信息。

设置

fastnoise2-sys,fastnoise2的基础绑定,使用一个遵循特定编译和/或链接FastNoise2库顺序的构建脚本

  1. 从源码构建,如果启用了build-from-source功能。
  2. 如果环境变量FASTNOISE2_LIB_DIR设置为/path/to/lib/,则会搜索静态FastNoise库的该路径。
  3. 如果没有设置,则会回退到从源码构建。

从源码构建

要使用fastnoise2-sys从源码构建FastNoise2,请确保您有

注意

  • 如果您不想从源码构建,可以从FastNoise2 发布下载预编译的二进制文件。
  • FASTNOISE2_SOURCE_DIR环境变量通常不需要,因为fastnoise2-sys将FastNoise2源代码作为Git子模块包含在内。如果您需要使用不同的源目录,请将FASTNOISE2_SOURCE_DIR设置为指向FastNoise2源代码的根目录。

依赖关系

~0.3–2.7MB
~56K SLoC