1

私はhttp://dindinx.net/OpenGL/index.php?menu=exemples&submenu=shadersのいくつかの例を通してパーリンのノイズを研究していましたが、彼が代わりにmake3DNoiseTexture()使用perlin.cしていることに気付くのを助けることができませんでしたnoise3(ni)PerlinNoise3D(...)

それはなぜですか?パーリンのノイズは、さまざまなノイズ周波数と振幅の合計であるはずではありませんか?

質問 2 は何ni, inci, incj, inckの略ですか。nix、y 座標の代わりに使用する理由 Hugo Elias が x,y 座標でPerlin2Dni
ni[0]+=inci;
inci = 1.0 / (Noise3DTexSize / frequency);
作成したのを見て、PerlinNoise3D(...) もそうです。

前もって感謝します :)

4

2 に答える 2

3

私は今、その理由を理解し、それが他の人々に役立つことを期待して、私自身の質問に答えるつもりです。

Perlin's Noiseは、実際には勾配ノイズの合成です。その生成プロセスでは、ランダムに生成された勾配ベクトルを使用して、入力ポイントのフローリングのコーナーの1つから入力ポイント自体を指すベクトルの内積を計算する必要があります。

これで、入力ポイントが、作成するテクスチャのxyz座標などの整数である場合、内積は常に0を返し、フラットなノイズが発生します。したがって、代わりにinci, incj, inck、代替インデックスとして使用します。うん、ただのインデックス、他には何もない。

質問1に戻ると、Perlinのノイズを実装する方法は2つあります
。1。ノイズ値を個別に計算し、テクスチャのRGBAスロットに保存します
。2。ノイズを事前に合成し、RGBAスロットの1つに保存します。テクスチャで

noise3(ni)はメソッド1の実際の実装ですがPerlinNoise3D(...)、後者を提案しています。

私の個人的な意見では、シェーダーで各オクターブを使用する方法にはるかに柔軟性があるため、方法1の方がはるかに優れています。

于 2010-12-02T11:41:25.963 に答える
1

代わりにを使用noise3(ni)する理由についての私の推測は、シェーダーでそのノイズテクスチャを使用するときに、シェーダーで直接の機能を複製および変更できるようにする必要があるということです。make3DNoiseTexture()PerlinNoise3D(...)PerlinNoise3D(...)

背後にある理由の私の推測はni, inci, incj, inck、ボリュームのx、y、zを直接使用しても良い結果が得られないため、代わりに周波数でノイズをスケーリングすることにより、ボリュームサイズとは無関係にノイズの解像度を調整することが可能であるということです。

于 2010-11-23T14:31:25.840 に答える