28

パーリン ノイズを使用して地形を生成しようとしています。デカルト座標を使用して生成する方法は理解していますが、球体でどのように機能するかについて頭を悩ませることはできません。2D サーフェスを球体に投影できることは知っていますが、歪みによってノイズ分布が台無しになることはありませんか? 球の表面に一様なノイズを生成するために思いつく最良のアイデアは、球上の点を 3D デカルト座標にマッピングし、3D ノイズ関数を使用することです。(基本的に、ノイズの立方体を生成し、コーナーを「削って」いわば丸くすることです。) 私が見逃しているより良い方法はありますか?

4

2 に答える 2

13

このアプローチは、2 次元フィールド (2D 平面上のすべてのポイントにノイズ値があります) ではなく、実際には 3 次元ノイズ フィールド (3D 空間のすべてのポイントにスカラー ノイズ値があります) を使用することだと思います。

2D ノイズ関数を使用して高さマップを生成する場合、ノイズ値に従って z 値をオフセットします。

3D フィールドを使用する場合、球の表面上のポイントでノイズをサンプリングし、ノイズ値を使用して各ポイントを球の中心から放射状に離したり、球の中心に向けてオフセットしたりします。

3D ノイズの生成は明らかに難しく、処理も遅くなりますが、球の周りにサーフェスを巻き付けるという複雑な処理に対処する必要はありません。また、ノイズ関数は連続的であるため、継ぎ目はありません。

これは明らかに任意の形状に適用できます。

于 2012-12-27T17:00:55.407 に答える
5

ここでの本当のパズルは、周波数と振幅を使用して定義されるパーリン ノイズ基底関数 (オクターブと呼ばれますか?) を変更して、n 次元平面ではなく球体上にあるようにする方法です。

したがって、球上で定義された一連の基底関数 (指定された方向、周波数、および振幅) が必要です。方向は、たとえば値がゼロのポイントです。球上の任意の点について、方向ベクトルまでの角距離を測定します。角距離を周波数で割り、その角度のサインを計算します。最後に、振幅でスケーリングします。

基底関数を 2 次元で異なるように変化させたい場合は、もう少し手の込んだことを行うことができますが、投影を方向付けるために 2 番目の方向パラメーターが必要になります。また、2 つの角度距離を計算する必要があります。やり過ぎかもしれませんが。基底関数がたくさんある場合、上記のアルゴリズムの循環パターンは互いに完全にぼやけてしまう可能性があるため、最初に簡単な解決策を試してみます.

これらのパーリン ノイズ基底関数を使用して、これらの束の合計として球上のパーリン ノイズを評価できるようになりました。球をテッセレートして頂点の角を評価するかどうかは、あなた次第です。それが私がすることです。

于 2011-07-02T07:52:04.477 に答える