The Book of Shaders FBM算法:如何实现分形布朗运动效果

The Book of Shaders FBM算法:如何实现分形布朗运动效果

【免费下载链接】thebookofshaders Step-by-step guide through the abstract and complex universe of Fragment Shaders. 【免费下载链接】thebookofshaders 项目地址: https://gitcode.com/gh_mirrors/th/thebookofshaders

想要在图形编程中创建逼真的山脉、云层和自然纹理吗?分形布朗运动(FBM)算法就是你的终极解决方案!FBM算法通过叠加不同频率和振幅的噪声,能够生成具有自相似性的分形图案,是程序化地形生成和视觉效果制作的黄金法则。😊

什么是分形布朗运动?

FBM算法 是一种基于噪声叠加的技术,通过将不同倍频(octaves)的噪声函数相加,创造出细节丰富的分形图案。这种算法的核心思想是:在循环中逐步增加噪声的频率(通过lacunarity参数)并减少其振幅(通过gain参数),从而在多个尺度上添加细节。

分形布朗运动2D效果 FBM算法生成的2D分形布朗运动效果

FBM算法的核心原理

FBM算法的基本实现代码如下:

const int octaves = 1;
float lacunarity = 2.0;
float gain = 0.5;

float amplitude = 0.5;
float frequency = 1.0;

for (int i = 0; i < octaves; i++) {
    value += amplitude * noise(frequency * position);
    frequency *= lacunarity;
    amplitude *= gain;
}

这个简单的循环结构能够产生令人惊叹的复杂效果!🌟

FBM算法的关键参数

倍频数(Octaves)

控制噪声叠加的层数。每增加一个倍频,就会在更高的频率上添加更多细节。

空隙度(Lacunarity)

决定每个倍频之间频率的倍增系数,通常设置为2.0。

增益(Gain)

控制每个倍频振幅的衰减速度,影响整体粗糙度。

实际应用场景

山脉生成

FBM的自相似性特性使其成为生成山脉的理想选择。侵蚀过程在多个尺度上产生相似的地形特征。

山脉效果 使用FBM算法生成的山脉地形

湍流效果(Turbulence)

通过使用噪声的绝对值,可以创建尖锐的山谷效果:

for (int i = 0; i < OCTAVES; i++) {
    value += amplitude * abs(snoise(st));
    st *= 2.0;
    amplitude *= 0.5;
}

湍流效果 FBM算法生成的湍流效果

云层模拟

通过域扭曲技术,FBM还能用于创建逼真的云层纹理:

云层效果 FBM算法生成的云层纹理

FBM变体算法

山脊噪声(Ridge Noise)

通过反转湍流噪声的山谷,可以创建尖锐的山脊效果:

n = abs(n);           // 创建褶皱
n = offset - n;       // 反转使褶皱位于顶部
n = n * n;            // 锐化褶皱

山脊效果 FBM山脊噪声效果

快速上手指南

  1. 设置基础参数:从1个倍频开始,lacunarity设为2.0,gain设为0.5
  2. 逐步增加细节:将倍频数增加到4-8个
  3. 调整视觉效果:修改lacunarity和gain来获得不同的纹理特征

进阶技巧

域扭曲(Domain Warping)

通过使用FBM来扭曲另一个FBM的空间,可以创造出更加复杂的视觉效果。这就像是《盗梦空间》中的梦中梦!🎭

域扭曲效果 Inigo Quiles的FBM域扭曲作品

总结

FBM算法是图形编程中不可或缺的强大工具,特别适合创建自然景观和有机纹理。通过掌握倍频数、空隙度和增益这三个关键参数,你就能够生成从细腻的云层到雄伟山脉的各种视觉效果。

记住:实践是最好的老师!多尝试不同的参数组合,你会发现FBM算法的无限可能性。✨

【免费下载链接】thebookofshaders Step-by-step guide through the abstract and complex universe of Fragment Shaders. 【免费下载链接】thebookofshaders 项目地址: https://gitcode.com/gh_mirrors/th/thebookofshaders

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值