noise


Houdiniのnoise関数をまとめた。ノイズの値はMayaの様に-1~1と固定されていると使いやすいが、Houdiniは関数毎に値の範囲がバラバラで非常に使いずらい。マニュアルに0-1と記載されているものもあるが偏りがあり実際の範囲は異なる。
以下は、freqencyを200ぐらいにした時の最大値と最小値である。0を基準におおよそ-1~1の範囲にフィットさせてみた。

HIPファイル

Alligator Noise

float freq = ch("freq");
float offset = ch("offset");
int turb = 5;
float rough = 0.5;
float atten = 1;
vector noise = anoise(@P*freq - set(offset,0,0), turb, rough, atten);
@P = set(@P.x, noise.y, @P.z);

Curlnoise

float freq = ch("freq");
float offset = ch("offset");
vector noise = curlnoise(@P*freq - set(offset,0,0));
@P = set(@P.x, noise.y, @P.z);

Perlin Flow Noise

float freq = ch("freq");
float offset = ch("offset");
vector noise = flownoise(@P*freq, offset);
@P = set(@P.x, noise.y, @P.z);

Perlin noise

float freq = ch("freq");
float offset = ch("offset");
vector noise = noise(@P*freq - set(offset,0,0));
@P = set(@P.x, noise.y, @P.z);

Original perlin noise

float freq = ch("freq");
float offset = ch("offset");
int turb = 5;
float rough = 0.5;
float atten = 1;
vector noise = onoise(@P*freq - set(offset,0,0), turb, rough, atten);
@P = set(@P.x, noise.y, @P.z);

Simplex noise

float freq = ch("freq");
float offset = ch("offset");
vector noise = xnoise(@P*freq - set(offset,0,0));
@P = set(@P.x, noise.y, @P.z);

Sparse Convolution noise

float freq = ch("freq");
float offset = ch("offset");
int turb = 5;
float rough = 0.5;
float atten = 1;
vector noise = snoise(@P*freq - set(offset,0,0), turb, rough, atten);
@P = set(@P.x, noise.y, @P.z);

Voronoi noise

float freq = ch("freq");
float offset = ch("offset");
int seed;
float f1, f2;
vector v1, v2;
vnoise((@P*freq - set(offset,0,0)),1,seed,f1, f2, v1, v2);
@P = set(@P.x, f1, @P.z);

Worley noise

float freq = ch("freq");
float offset = ch("offset");
int seed; 
float f1, f2, f3, f4;
wnoise((@P*freq - set(offset,0,0)),seed,f1, f2, f3, f4);
@P = set(@P.x, f1, @P.z);

Worley (cellular) noise using a Chebyshev distance metric noise

float freq = ch("freq");
float offset = ch("offset");
int seed; 
float f1, f2, f3, f4;
cwnoise((@P*freq - set(offset,0,0)),seed,f1, f2, f3, f4);
@P = set(@P.x, f1, @P.z);