4

作業中の2Dゲームの3D高さマップを生成することに興味があります。これを使用して、MinecraftやDwarfFortressのような土地の塊を作成しています。

以前に2Dハイトマップを作成しましたが、完全にランダムなノイズ配列のポイント間を補間して固定サイズのマップを作成する、非常に基本的なアルゴリズムを使用しました。ただし、その横に新しいマップを追加しようとすると、既存のマップの高さが考慮されないため、これは並べて表示されません。

PerlinおよびSimplexノイズについて読んだことがありますが、PerlinまたはSimplexノイズを高さ値の2D配列に適用する方法について混乱しています。

これに関する助けをいただければ幸いです。もうどうしたらいいのかわからない。楽譜にない「オクターブ」という言葉は私を怖がらせます。

4

2 に答える 2

2

正確には、Perlin/Simplexノイズを探す必要があります。これは、ランダムに見えるノイズを出力する関数f(x、y、...)(必要な数の変数)と考えてください。純粋なノイズとの違いは、グラデーションに作用することです。したがって、局所的な変動性が高いプレーンノイズではなく、グラデーションを「描画」するため、より自然に見えます。シンプレックスノイズはPerlinのノイズとほとんど同じですが、Perlinのようにn次元グリッドで動作するのではなく、スペースをシンプレックスに分割します。これにより、計算コストが軽減され、さらにいくつかの利点があります。

怖いように見えるかもしれませんが、実は簡単です。オクターブについては怖いですが、音楽のオクターブとほとんど同じです。元の出力と混合された、より高い(またはより低い)周波数ノイズです。楽譜について言えば、C4とC5を同時に演奏するようなものです。まだCですが、フレーバーが追加されています(波形に小さなスパイクがあります)。恐れずに調査を続けてください。それほど難しくはありません。

タイリングについて:

(Minecraftのように)線形タイリングを意味する場合は、ノイズアルゴリズムに同じシードを使用する必要があります。新しい境界に近づくとすぐに、データの新しいチャンクを生成するだけで、完全に並べて表示されます(ノイズで無限に埋める場合と同じように)。

トーラスタイル(タイルを繰り返す、たとえばPacmanを考えてください)を意味する場合、最良の解決策は、ノイズタイルを生成し、タイルされているかのように境界の近くを補間することです。ノイズは側面に合わせて変形し、完全にタイル化可能になります。

于 2012-02-07T16:50:03.577 に答える
1

あなたの質問の言い回しが間違っているのではないかと思います。ハイトマップは本質的に2Dであり、これを使用して3D地形(メッシュ)を生成します。

http://en.wikipedia.org/wiki/Heightmap

その場合は、パーリンノイズ関数を使用して2D画像を作成し、それを高さマップに使用できます。何が作成されるかわからない場合は、GIMPやPhotoshop、または同様のツールを使用して、例として2Dキャンバスにパーリンノイズを作成できます。

Minecraftは、パーリンノイズ関数を使用して、ノイズの3Dキューブを作成します。したがって、ハイトマップが2Dパーリンノイズである場合、Minecraftは3Dパーリンノイズです。1Dパーリンノイズを生成することもできます。

パーリンノイズ関数の優れている点は、数学を介してテクスチャの「解像度」と「オフセット」を制御できるため、シームレスな環境を作成できることです。Minecraftは、パーリンノイズをベースとして利用し、最後の仕上げとしてセルオートマトンに移行すると思います。

シンプレックスノイズに慣れていません。

編集:ここにいくつかの数学関数をテストするためのリンクがあります(処理中) http://processing.org/learning/basics/noise2d.html

于 2011-07-08T11:58:25.233 に答える