Симплексный шум просто дает случайные результаты
Я пытаюсь заставить мой симплексный шум (в основном, перлин-шум с более хорошей сложностью) работать и дать мне что-то хорошее, как это:
Тем не менее, все, что я получаю, это то, что кажется случайным:
Я использую симплексный код отсюда и использую его так:
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
Довольно просто, но, похоже, я что-то упустил. Понятия не имею, что, хотя
2 ответа
Это своего рода старый вопрос, но он не должен остаться без ответа! Для посетителей, конечно, даже если вы сами это поняли.
Я не слишком опытен с питоном, но мне кажется, что проблема в том, что частота слишком высока, 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
Просто для того, чтобы сказать это, вот как работает многооктавный шум (материал, похожий на пухлое облако), он манипулирует частотой шума в течение ряда октав или степенями двух (иногда неправильно называемых октавами для степеней лакунарности). переменная), затем складывает их все вместе и нормализует или масштабирует до соответствующего диапазона.
Я думаю, вы должны просто написать свой код как
def generate(self):
return simplex.scaled_raw_noise_2d(0, 254, range(0, self.width),
range(0, self.width))