Как реализован шум Перлина во флеш-памяти?

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

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

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

шум Перлина во вспышке

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

Шум Перлина, изображенный в Википедии

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

Perlin noise AS3

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

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

Описание параметра гласит:

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

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


person bummzack    schedule 11.12.2011    source источник


Ответы (2)


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

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

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

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

person Superbest    schedule 04.03.2012

Прошло очень много времени с тех пор, как я занимался обработкой изображений, но, возможно, что-то из этого поможет:

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

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

Надеюсь, что это хотя бы направит вас в правильном направлении ...

person Andrew Odri    schedule 24.12.2011
comment
Извините, но это не так. Я даже использовал код из одной из ваших ссылок, чтобы сгенерировать изображения шума, который мне не интересен. Реализация flash не отличается, потому что она основана на целых числах (это не так), и если вы выводите image, в конце концов, у вас будут целые числа, и этого не избежать. Реализация вспышки позволяет вам выбирать между турбулентностью и обычным шумом. Меня интересует алгоритм турбулентности. Если вы поищете изображения в Google на предмет шума турбулентности и шума Перлина, вы увидите разницу. - person bummzack; 24.12.2011