Houdini fbm(Fractal Brownian Motion) VEX関数

VEX内でfbm関数を使用する場合はプログラム先頭で以下の行を追加する。

#include <voplib.h>

fbm関数の書式 : vop_fbmNoise**(*で指定した型 pos; float rough; int maxoctaves; string noisetype)

関数名末尾の一番目の”*”は関数の返り値の型を意味し、”F”か”V”のどちらか。
二番目の”*”は関数の第一引数の型を意味し、”F”か”V”か”P”のどれか。

“F” : float型
“V” : vector型
“P” : vector4型

例)
vop_fbmNoiseFV(…)
関数の返り値はfloat、第一引数の型はvector

vop_fbmNoiseVV(…)
関数の返り値はvector、第一引数の型はvector

vop_fbmNoiseVP(…)
関数の返り値はvector、第一引数の型はvector4

関数の4つの引数は、参照位置、ラフネス、最大オクターブ、ノイズタイプを意味する。

<使用例>

#include <voplib.h> // fbm関数を使用するためにヘッダファイルを読み込み

vector freq = set(0.5, 1, 0.5);// 周波数
float amp = 1;// 振幅
float rough = 0.5;// ラフネス
int oct = 8;// オクターブ
vector offset = set(1, 0, 0);// オフセット
// オフセットは引いているが、これはaanoiseノードと結果を一致させるため
vector v = amp * vop_fbmNoiseVV(freq * @P - offset, rough, oct, "perlin");
v = set(0, v.y, 0);
@P += v;// 高さのみを摂動

ちなみにvop_fbmNoise**関数はVOP内ではAnti-Aliased Noise(aanoise)ノードに相当する。今回のVEXと同じ結果を得るためには、以下のVOPネットワークを組む。