パーリン ノイズ アルゴリズムとシンプレックス ノイズ アルゴリズムのランダム性の品質は?
2 つのアルゴリズムのどちらがランダム性に優れていますか?
標準の疑似乱数ジェネレーターと比較して、乱数ジェネレーターとして Perlin/Simplex を使用することは理にかなっていますか?
更新: パーリン/シンプレックス ノイズの用途はわかっています。私はランダム性のプロパティにのみ興味があります。
パーリン ノイズ アルゴリズムとシンプレックス ノイズ アルゴリズムのランダム性の品質は?
2 つのアルゴリズムのどちらがランダム性に優れていますか?
標準の疑似乱数ジェネレーターと比較して、乱数ジェネレーターとして Perlin/Simplex を使用することは理にかなっていますか?
更新: パーリン/シンプレックス ノイズの用途はわかっています。私はランダム性のプロパティにのみ興味があります。
パーリン ノイズとシンプレックス ノイズは、完全にランダムではなく、有用なノイズを生成するためのものです。これらのアルゴリズムは、通常、手続き的に生成されたランドスケープなどを作成するために使用されます。たとえば、次のような地形を生成できます (ここからの画像)。
この画像では、ノイズによって次のような 2D 高さマップが生成されます (画像はこちらから):
各ピクセルの色は高さを表します。ハイトマップを生成した後、レンダラーを使用して、画像の「高さ」(色) に一致する地形を作成します。
したがって、アルゴリズムの結果は実際には「ランダム」ではありません。ご覧のとおり、簡単に識別できるパターンがたくさんあります。
シンプレックスは少し「見栄えがよく」、ランダム性が低いことを意味すると思われますが、その主な目的は、同様のノイズを生成しますが、より高い次元にうまくスケーリングすることです。つまり、3D、4D、5D ノイズを生成する場合、シンプレックス ノイズはパーリン ノイズよりも優れており、同様の結果が生成されます。
一般的な疑似乱数ジェネレーターが必要な場合は、Mersenne twisterまたは他の prngsを参照してください。暗号化に関しては、prngs には警告がいっぱいになる可能性があることに注意してください。
アップデート:
(OPの更新された質問への回答)
これらのノイズ関数のランダムな特性については、パーリン ノイズが (非常に) 貧乏人の prng を入力として使用し、隣接する「ランダムな」ピクセル間で平滑化/補間を行うことを知っています。入力のランダム性は、実際には、事前に計算されたランダム ベクトルへの疑似ランダム インデックス付けです。
インデックスは単純な整数演算を使用して計算されますが、それほど凝ったものではありません。たとえば、noise++ プロジェクトは、事前に計算された「randomVectors」(こちらを参照) を使用してソース ノイズを取得し、このベクトルから異なる値を補間します。いくつかの単純な整数演算を使用して、このベクトルに「ランダムな」インデックスを生成し、少量の疑似乱数を追加します。ここにスニペットがあります:
int vIndex = (NOISE_X_FACTOR * ix + NOISE_Y_FACTOR * iy + NOISE_Z_FACTOR * iz + NOISE_SEED_FACTOR * seed) & 0xffffffff;
vIndex ^= (vIndex >> NOISE_SHIFT);
vIndex &= 0xff;
const Real xGradient = randomVectors3D[(vIndex<<2)];
...
次に、ややランダムなノイズが平滑化され、実際には隣接するピクセルとブレンドされて、パターンが生成されます。
初期ノイズを生成した後、パーリン/シンプレックス ノイズにはノイズのオクターブの概念があります。つまり、ノイズを異なるスケールで再ブレンドします。これにより、さらに多くのパターンが生成されます。したがって、ノイズの初期品質は、おそらく、事前計算されたランダム配列と疑似ランダム インデックスの効果を加えたものと同じ程度です。しかし、パーリンノイズがそれに影響を与えた後、見かけのランダム性は大幅に減少します(実際には、より広い領域に広がっていると思います).
AI Game Wisdom 2の「The Statistics of Random Numbers」で述べられているように、どちらが「より良い」ランダム性を生成するかは、それを何に使用するかによって異なります。一般に、PRNG の品質はテスト バッテリーによって比較されます。印刷の時点で、著者は、PRNG のランダム性をテストするための最もよく知られており、最も広く使用されているテスト バッテリーはENTとDiehard であることを示しています。また、乱数をテストする方法と、統計的ランダム性テストがアドホックに見える理由に関する関連する質問も参照してください。
典型的な PRNG のテストの標準的な問題を超えて、PRNG としてのパーリン ノイズまたはシンプレックス ノイズのテストは、次の理由でより複雑になります。
あなたは混乱していると思います。
perlin と simplex は、他のソースから乱数を取得し、乱数を減らして自然の風景のように見せます (乱数だけでは自然の風景のようには見えません)。
したがって、それらは乱数のソースではありません。他の場所からの乱数を処理する方法です。
たとえそれらが情報源であったとしても、それらは良い情報源ではありません (数値は強く相関しています)。