Как осуществляется Perlin-шум во флэш-памяти?

На gamedev.SE мы обнаружили, что флэш-реализация Perlin-noise кажется, немного отклоняется от других реализаций.

Я не нашел никаких подробностей реализации в Интернете, но я задавался вопросом, может ли кто-нибудь сказать, какой алгоритм используется для Perlin-шума во флеше.

Использование bitmapData.perlinNoise(32, 32, 1, 200, false, false, 7, true); генерирует такие изображения, где был изменен только параметр numOctaves (1, 2, 4 слева направо):

perlin noise in flash

Однако другие реализации Perlin-шума выглядят совсем по-другому. Например, изображение из статья Википедии о perlin-noise:

Perlin noise as depicted on Wikipedia

Также этот ActionScript Реализация Perlin-noise дает совершенно разные результаты, как вы можете видеть на следующих изображениях (Octaves 1, 2 и 4 слева направо):

Perlin noise AS3

В основном меня интересует внешний вид шума с одной октавой. В реализации вспышки вы можете четко видеть, что шум образует нечто вроде разделенных капель.

Важно. Шум, генерируемый во флэш-памяти, использует false для параметра fractalNoise. Если fractalNoise установлено на true, результаты на самом деле очень похожи на результаты из Википедии и других реализаций.

Описание параметра читается следующим образом:

Логическое значение. Если значение истинно, метод генерирует фрактальный шум; в противном случае он создает турбулентность. Изображение с турбулентностью имеет видимые разрывы в градиенте, что позволяет лучше приблизить более резкие визуальные эффекты, такие как пламя и океанские волны.

Как мы можем видеть, они говорят о турбулентности, чтобы описать метод, который генерирует шум. Поэтому я догадываюсь, что вопрос заключается в следующем: это результат, создаваемый флэш-памятью Perlin-noise? Или есть другое название для такого шума? И самое главное: где можно найти реализацию для создания такого шума?

Ответ 1

По-видимому, существует некоторая путаница в терминологии. Но технически, шум, описанный Перлином, был одной октавой, без суммирования. Это было похоже на первый образ Википедии.

Я почти уверен, что практически никто не использует именно это. Каждый добавляет несколько октав, обычно делая амплитуду большей на более низких частотах. "Насколько большим" является настойчивость. В любом случае, когда вы добавляете его, он называется фрактальным шумом.

"Перлин-шум" фактически означает, что вы создаете кучу случайных градиентов и интерполируете их. Но люди относятся к фрактальному шуму как к шумам Перлина, потому что это сумма нескольких шумовых волн Перлина.

Обратите внимание, что часто, как и в эталонных реализациях, функции шума Perlin и Simplex выводят значения, центрированные на 0 и (иногда), масштабированные до [-1, +1]. Кроме того, они похожи, но не совсем идентичны. Симплексный шум выглядит несколько иначе. Иногда они упоминаются как шум Перлина, потому что Кен Перлин изначально думал о шуме Перлина (он называл его просто "шумом" ), а затем позже ускорял его, устраняя некоторые избыточности и создавая симплекс-шум (который он назвал "улучшенным шумом",). Симплекс может выглядеть немного темнее сам по себе (сетка отличается, так что, очевидно, она выглядит по-другому), а также разделы с помощью более высокого уровня шума не ведут себя так же, как с Perlin.

Ответ 2

это было время с тех пор, как я сделал обработку изображений, но, возможно, некоторые из них помогут:

Ссылки: (И люди, которые знают ответы...) http://www.kelvinluck.com/assets/perlin_noise_experiments/, http://www.quasimondo.com/archives/000672.php, http://www.sjeiti.com/?p=305

Я понимаю, что реализация Flash выводит результаты на основе целочисленных вычислений, а не плавает. Это объясняет, почему рендеринг выполняется быстро, но также немного отличается по внешнему виду.

Надеюсь, что по крайней мере поставит вас в правильном направлении...