タイル化できるノイズ関数を作成するのに2倍の費用がかかるのはなぜですか?


12

いくつかの場所で、Perlinノイズループをシームレスに作成するには、わずかに異なる方法で2回計算し、2つの結果を合計する必要があることを見てきました。

このPerlinノイズ数学FAQは、式を提供します:

Floopバツyz=tzFバツyz+zFバツyztt

ノイズ関数方向にループさせる。また、これを拡張して、2次元でループするには 4回の評価が必要であり、3次元でループするには8回の評価が必要であると述べています。FzFF

これにより、タイル間のシームレスな結合が連続的であるだけでなく継続的に微分可能であることを理解していますが、必要なタイルサイズを法としてグリッドポイントを減らしてノイズ関数を1回評価するだけで、直感的にそうなると思います。ノイズ関数が、すぐに周囲のグリッドポイント(2Dノイズの場合は4、3Dノイズの場合は8)のみに基づいている場合、計算するポイントがタイルの右端を通過するときは、必ず左端のグリッドポイントを使用します他のグリッドポイントと同じ品質のノイズですか?

この複数の計算手法をいくつかの場所で見てきたので、何らかの利点が必要だと思いますが、グリッドポイントが大きくなりすぎて最初に戻るように単純に折り返すという欠点を見つけるのに苦労しています。私は何が欠けていますか?

回答:


18

人々がこれを一般的に推奨するのは残念です。ノイズ関数の2つ(または4つなど)の翻訳されたコピーをそのようにブレンドすることは、かなり悪い考えです。高価なだけでなく、見た目も正確ではありません!

パーリンノイズ ブレンドパーリンノイズ

左側には、Perlinノイズがあります。右側には、Perlinノイズの2つのインスタンスがあり、左から右に積み重ねられてブレンドされています。

違いは微妙ですが、2番目の画像は中央を縦に走る縦列のコントラストが低いことがわかります。それは、ノイズ関数の2つの異なるインスタンス間の50%のブレンドです。このようなブレンドは、元のノイズ関数のようには見えません。まるで泥だらけの混乱のように見えます。

OK、それはかなりではないので、という悪いだけで、生のノイズを見て...しかし、あなたはその後、画像上の任意の非線形変換を行う場合は、不均一なコントラストが問題を引き起こす可能性があります。たとえば、60%でしきい値処理された画像を次に示します。(たとえば、海に島を生成することを考えてください。)

しきい値付きパーリンノイズ しきい値付きブレンドパーリンノイズ

これで、右側の画像の中央の白い領域が少なくなり、どのようになっているのかがはっきりとわかります。

前述のように、Perlinのようなグリッドベースのノイズの場合、より良い方法は、グリッドポイントで疑似ランダムなグラデーションを並べることです。これは簡単で安価であり、その後、補間アルゴリズムを通常どおりグラデーションに適用できます(タイルテクスチャの双一次補間のように)。これは、その上にではなく、基になるノイズアルゴリズムで動作するため、奇妙なアーティファクトのないタイリングノイズを生成します。Worleyノイズ(セルラーノイズ)をベースとして使用するランダムな特徴点を並べて、同様の戦略を使用できます。

ただし、複数オクターブのノイズがあると、必ずしもそれほど簡単ではありません。オクターブ間の相対的なスケール(別名 "lacunarity")が整数または単純な有理数でない場合、すべてのオクターブのグリッドが一致する便利なタイルポイントを見つけることができない場合があります。各オクターブを個別にタイル化できますが、その場合、全体的なノイズは依然としてタイル化できません。


4
サイド画像によるサイドは本当に説明のための直感的な感覚を身につけるための違いを作ります。私は自分の答えのためにこれを念頭に置くつもりです。
-trichoplax
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.