5

さて、ウェブ上で見つけられるPerlinとSimplexノイズの間の多くの比較があります。しかし、私が最も興味を持っているのは、3次元の両方の処理時間の単純な比較があるものを本当に見つけることができませんでした。私はその人気のあるPDFを読みました(そしてそのほとんどを理解しました-イェーイ!)が簡単な質問に答えることはできません。最適な実装を想定した場合、3Dの方が速いのはどれですか。

このstackoverflowの質問の回答は、シンプレックスが私の場合のかなり明確な勝者であることを示唆しています。もちろん、正反対を主張する他のリソースがあります。

ただし、一般的なステートメントでは、パーリンノイズの複雑さはO(2 ^ N)であるのに対し、シンプレックスの複雑さはO(N ^ 2)であるようです。これは、3Dの場合、Perlinの場合は8、Simplexの場合は9を意味します。しかし、あるサイトで、シンプレックスは実際にはO(N)であるというステートメントを見つけました。では、ここで何真実であり、それが3Dの速度にとって実際に何を意味するのでしょうか。

私はここで途方に暮れています、私は本当に主に3Dアプリケーション(洞窟を含むランダムな地形生成用)の使用法に興味があり、それを同じくらい速くしたい場合はどちらを使用すべきかという質問に対する良い答えを見つけることができません可能。

だから多分誰かがここで私を助けることができます:)

4

2 に答える 2

9

1)http://www.fundza.com/c4serious/noise/perlin/perlin.html
2)http://www.6by9.net/b/2012/02/03/simplex-noise-for-c-and -python

次の2つの実装を使用した、ノイズの8Mサンプルの「マイラップトップ」での実行時間:(g ++ -O6)

1)1.389s、つまり5.7M ops /秒2)0.607s、つまり13.2M ops/秒

だが...

本当に、本当に最適化に行くとき、人は勉強する必要があります

  • より高いレベルの最適化(各段階で実際に行われること:代替案はありますか?)
  • ブランチ
  • 記憶パターン
  • 依存関係
  • LUTサイズ
  • 必要な個々の算術演算、それらのレイテンシーとスループット
  • SIMDを使用した悪用可能な並列処理
  • 生存変数の数
于 2012-10-05T13:50:22.283 に答える
2

シンプレックスノイズは見栄えが良くなりますが、必ずしも高速であるとは限りません。それはすべて実装に依存します。経験則として、これは「ほぼ同じ速度」であり、コードが適切であれば、どちらのバリアントを使用しても大きなペナルティはありません。

私が書いたインターネット上に浮かんでいるコードのほとんどは、速度が最適化されていないが、わかりやすくするために書かれていることに注意してください。数年前のIanMcEwanと私によるGLSLの実装は、速度がかなり最適化されていますが、現在は古くなっているハードウェアと、当時のGLSLのバージョンに最適化されています。それ以降のGLSLの重要な変更には、整数型とビット単位の論理演算が含まれます。これにより、ハッシュ関数の一部が扱いにくく、不必要に複雑になります。順列多項式の必要性は、GLSLにビット単位の論理演算子がないことによって動機付けられました。WebGLのGLSLにはまだ欠けていますが、他のすべてのプラットフォームで整数がサポートされるようになりました。

4Dのシンプレックスノイズは、ほとんどの場合、4Dのクラシックノイズよりも高速です。他のすべてのケースは、言語、プラットフォーム、およびコード最適化の量によって異なります。

シンプレックスノイズには、単純な解析的導関数があります。クラシックノイズはその点でよりトリッキーです。多くの場合、アンチエイリアシングや地形マッピングのように、分析派生物は非常に便利です。

于 2013-11-15T10:20:24.547 に答える