Как реализован Perlin-шум во флеше? - PullRequest
10 голосов
/ 12 декабря 2011

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

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

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

perlin noise in flash

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

Perlin noise as depicted on Wikipedia

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

Perlin noise AS3

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

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

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

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

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

Ответы [ 2 ]

4 голосов
/ 04 марта 2012

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

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

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

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

1 голос
/ 24 декабря 2011

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

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

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

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

...