1 个不稳定版本
0.1.1 | 2021年1月20日 |
---|---|
0.1.0 |
|
#11 in #sphere
12KB
106 行
球面蓝噪声发生器
用于在单位球面上生成具有蓝噪声分布的点的库。
此算法的基本思想是
- 首先在球面上生成随机(白色)分布的点。
- 然后将每个点视为物理电荷粒子,并对每个点施加来自其他粒子的排斥力。
- 随着时间的推移,粒子收敛到类似于蓝噪声的平衡状态。
因此,此算法的时间复杂度为 O(N^2),其中 N 是点的数量。(可以通过使用类似于 barnes-hut 算法的八叉树来加快速度)
可视化
此动画的代码可在 examples
文件夹中找到。
示例
use spherical_blue_noise::*;
let blue_noise_vec: Vec<(f32, f32, f32)> = BlueNoiseSphere::new(16, &mut rand::thread_rng()).into_iter().collect();
println!("{:?}", blue_noise_vec);
参考
基本思想基于以下论文
Wong, Kin-Ming 和 Wong, Tien-Tsin. "Spherical Blue Noise", Pacific Graphics Short Papers, 2018, 链接
依赖项
~5.5MB
~135K SLoC