OpenGLを使用したPerlinのノイズ
-
27-09-2019 - |
質問
私はいくつかの例を通してPerlinの騒音を勉強していました @ http://dindinx.net/opengl/index.php?menu=exemples&submenu=shaders そして、彼のことに気づくのを助けることができませんでした make3DNoiseTexture()
の perlin.c
使用します noise3(ni)
それ以外の PerlinNoise3D(...)
今、それはなぜですか? Perlinのノイズは、異なるノイズ周波数と振幅の合計ではないでしょうか?
Qestion 2が何をしますか ni, inci, incj, inck
支持する?なぜ使用するのか ni
xの代わりに、y座標?なぜそうなのか ni
でインクリメント
ni[0]+=inci;
inci = 1.0 / (Noise3DTexSize / frequency);
Hugo Eliasがx、y座標でperlin2dを作成したのを見て、perlinnoise3d(...)もそうです。
前もって感謝します :)
解決
私は今、他の人を助けることを期待して、自分の質問に答えている理由を理解しています。
Perlinのノイズは、実際には勾配ノイズの合成です。その生産プロセスでは、ランダム生成勾配ベクトルを使用して、入力ポイント自体を入力ポイントを床に床に床に向けるベクトルのドット積を計算する必要があります。
これで、入力ポイントが作成したいテクスチャのXYZ座標などの整数である場合、DOT製品は常に0を返し、フラットノイズが得られます。代わりに、使用します inci, incj, inck
代替インデックスとして。うん、ただのインデックス、他に何もありません。
質問1に戻って、Perlinのノイズを実装する2つの方法があります。
1.ノイズ値を個別に計算し、テクスチャのRGBAスロットに保存します
2.ノイズを事前に順番にして、テクスチャのRGBAスロットの1つに保管してください
noise3(ni)
方法は、方法1の実際の実装です PerlinNoise3D(...)
後者を提案します。
私の個人的な意見では、方法1は、シェーダーの各オクターブをどのように使用するかよりもはるかに柔軟性があるため、はるかに優れています。
他のヒント
使用する理由についての私の推測 noise3(ni)
の make3DNoiseTexture()
代わりにif PerlinNoise3D(...)
シェーダーでそのノイズテクスチャを使用すると、の機能を複製して変更できるようになります。 PerlinNoise3D(...)
シェーダーに直接。
背後にある理由のための私の推測 ni, inci, incj, inck
ボリュームのx、y、zを使用すると、直接的な結果が得られないため、音量サイズとは独立してノイズの解像度を調整することができることです。