参考 : https://thebookofshaders.com/13/?lan=ch
https://blog.csdn.net/candycat1992/article/details/50346469
houdini的 aanoise自带了一个fbm, 这里记录一个代码实现的fbm用于学习
float freq = ch('Freq'); // scale (x)
vector offset = chv('Offset');
float amp = ch('Amp'); // y
int octaves = chi('Octaves');
float roughness = ch('Roughness');
float lacunarity = ch('Lacunarity');
vector sample_p = (@P + offset) * freq;
float sum = 0;
float contribution = 1.0;
for(int i=0; i<=octaves; i++)
{
sum += fit(noise(sample_p), 0, 1, -0.5, 0.5) * contribution;
sample_p *= lacunarity;
contribution *= roughness;
}
@P.y = sum * amp;