void vnoise(float position, float jitter, int &seed, float &f1, float &f2, float &pos1, float &pos2)
1Dノイズを生成します。
void vnoise(float position, float jitter, int &seed, float &f1, float &f2, float &pos1, float &pos2, int period)
周期1Dノイズを生成します。
void vnoise(float posx, float posy, float jittx, float jitty, int &seed, float &f1, float &f2, float &pos1x, float &pos1y, float &pos2x, float &pos2y)
2Dノイズを生成します。これは、他の形式と同様ですが、vectorではなくfloatのペアを使用します。
void vnoise(float posx, float posy, float jittx, float jitty, int &seed, float &f1, float &f2, float &pos1x, float &pos1y, float &pos2x, float &pos2, int periodx, int periody)
周期2Dノイズを生成します。
void vnoise(vector position, vector jitter, int &seed, float &f1, float &f2, vector &pos1, vector &pos2)
3Dノイズを生成します。
void vnoise(vector position, vector jitter, int &seed, float &f1, float &f2, vector &pos1, vector &pos2, int periodx, int periody, int periodz)
void vnoise(vector position, vector jitter, int &seed, float &f1, float &f2, vector &pos1, vector &pos2, vector period)
周期3Dノイズを生成します。
void vnoise(vector4 position, vector4 jitter, int &seed, float &f1, float &f2, vector4 &pos1, vector4 &pos2)
4Dノイズを生成します。
void vnoise(vector4 position, vector4 jitter, int &seed, float &f1, float &f2, vector4 &pos1, vector4 &pos2, int periodx, int periody, int periodz, int periodw)
void vnoise(vector4 position, vector4 jitter, int &seed, float &f1, float &f2, vector4 &pos1, vector4 &pos2, vector4 period)
周期4Dノイズを生成します。
position
ノイズをサンプリングする位置。
jitter
各軸のノイズに追加するランダム量。
seed
最も近いシードポイントに関連付けられた整数値を出力します。このシードは、すべての点に対して固有であることがほぼ保証されています(つまり、近い2点に同じシード値が関連付けられることがほぼありません)。
pos1
, pos2
これらの変数には、近い順に、2つの一番近いシードポイントの位置が上書きされます。
f1
, f2
これらの変数には、近い順に、最も近いシードポイントまでの距離が上書きされます。
これらの距離を組み合わせてノイズパターンを生成することができます。生成されるノイズは、性質上、非常に“細胞っぽく”なる傾向があります。
実際に、良い事の1つは、if (f2 - f1)
のエクスプレッションを使用することで“細胞”の境界を決めることができます。if (f2 - f1)
は、空間内のポイントが2つの細胞間の境界を超えるとtrueになります。
period
, periodx
, periody
, periodz
, periodw
periodの引数を含めた場合、その関数は、反復(周期)ノイズを生成します。
ボロノイノイズは、Worleyノイズ関数(wnoise)とほぼ同じ結果を生成します。 しかし、ボロノイノイズ関数は振動させることができ(つまり、ポイントを空間内にランダムにばら撒くことができます)、 さらに、2つの一番近いシードポイントの実際の場所を返します。それに対しwnoiseは、2つの一番近いシードポイントまでの距離だけを返します。
この関数はwnoiseよりも若干処理が重いですが、実際のポイント位置を返すので、Worleyノイズのいくつかの欠点を克服することができます。 例えば、以下のコードは、セル境界に沿って均等な境界を取得します:
if (f2 - f1 < tolerance * (distance(p1, p2) / (f1 + f2)) ...
このコードは、2つのランダムな空間内のポイント間の距離に基づいて境界幅を“正規化”します。
vnoise()には、周期的な形式の関数もあります。
Examples ¶
// 1Dノイズ float fp0, fp1, p1x, p1y, p2x, p2y; vector vp0, vp1; vnoise(s*10, 0.8, seed, f1, f2, fp0, fp1); vnoise(s*10, t*10, 0.8, 0.8, seed, f1, f2, p1x, p1y, p2x, p2y); vnoise(P*10, {.8, .8, .8}, seed, f1, f2, vp0, vp1);
See also | |
noise |