9

3D パーリン ノイズ アルゴリズムを低次元に適応させようとしていますが、その理由がよくわからないため、勾配関数に問題があります。

hash元の Perlin 勾配関数は、aと 3 次元座標の4 つの引数を取ります(x, y, z)。以下に示すように、関数の結果は の値に基づいて返さhash mod 16れます。

  • 0:x + y
  • 1:-x + y
  • 2:x - y
  • 3:-x - y
  • 4:x + z
  • 5:-x + z
  • 6:x - z
  • 7:-x - z
  • 8:y + z
  • 9:-y + z
  • 10:y - z
  • 11:-y - z
  • 12:y + x
  • 13:-y + z
  • 14:y - x
  • 15:-y - z

からの戻り値は一種のパターン0を作成します。これは、すべての組み合わせが 1 回表されるためです。11ただし、最後の 4 つは重複しています。最後の 4 つの戻り値に適合するように選択されたのはなぜですか? (x, y)また、2 次元と 1次元の類似のケースは何でしょう(x)か?

4

1 に答える 1

13

...遅い回答は、何もないよりはましですか? ;-)

「改善されたノイズ」実装のgrad関数は、ベクトル x、y、z と疑似ランダム勾配ベクトルの間の内積を計算します。

この実装では、勾配ベクトルは 12 のオプションから選択されます。hash & 15選択の均一性を落とし、12 から 15の数字を追加します。hash % 12

2D パーリン ノイズの場合、次のような目に見える問題なしに 4 つの勾配ベクトルのみを使用しました。

return ((hash & 1) ? x : -x) + ((hash & 2) ? y : -y);
于 2013-06-27T18:59:01.243 に答える