2

シンプレックスノイズ(基本的にはより複雑なパーリンノイズ)を機能させて、次のような素晴らしいものを提供しようとしています。

パーリンノイズ

しかし、私が得るのは、ランダムに見えるものだけです。

アリ戦争

ここからシンプレックスコードを使用しており、次のように使用しています。

def generate(self):
    columns = []
    for x in range(0, self.width):
        rows = []
        for y in range(0, self.height):
            val = simplex.scaled_raw_noise_2d(0, 254, x, y)
            rows.append(val)
        columns.append(rows)
    return columns

かなり簡単ですが、何かが足りないようです。でもわからない

4

2 に答える 2

0

これは一種の古い質問ですが、これは答えられないままであってはなりません!もちろん、訪問者にとっては、自分でそれを理解したとしても。

私はPythonの経験があまりありませんが、問題は頻度が高すぎること、正確には1.0であるように見えます。つまり、ノイズがズームアウトされすぎて、ノイズがエイリアス化されます。

「ズームイン」するには、頻度を減らす必要があります。ライブラリでそれを行う別の方法がないと仮定すると、これは次のようになります。

def generate(self):
    columns = []
    frequency = 1 / 10  # zoom in 10 times
    for x in range(0, self.width):
        rows = []
        for y in range(0, self.height):
            val = simplex.scaled_raw_noise_2d(0, 254, x * frequency, y * frequency)
            rows.append(val)
        columns.append(rows)
    return columns

ちょうどそれを言うために、これは複数のオクターブノイズ(ふくらんでいる雲のように見えるもの)がどのように機能するかです、それは数オクターブ、または2の累乗(空隙性の累乗のために誤ってオクターブと呼ばれることもあります)にわたるノイズの周波数を操作します変数)次に、それらをすべて足し合わせて正規化するか、適切な範囲にスケーリングします。

于 2013-02-14T00:23:43.400 に答える
0

コードを次のように書くだけでいいと思います

def generate(self):
    return simplex.scaled_raw_noise_2d(0, 254, range(0, self.width), 
                                       range(0, self.width))
于 2012-05-07T20:17:02.320 に答える