Шум Перлина для 1D?

Старайтесь изо всех сил, я не могу найти никаких реальных руководств по Perlin \ Samplex Noise в 1D.

Я искал по всему Интернету, но ничего не нашел. Любые сайты, на которых я встречал упоминание одномерного шума Перлина, обычно очень неясны или просто показывают код


person DubyaDubyaDubyaDot    schedule 10.01.2012    source источник
comment
Код, который вы нашли, вам не подошел? Похоже, что в Интернете есть несколько примеров кода, которые относятся к вашему вопросу (один из которых). Предоставленный код доступен, и вы ищете код, в чем проблема?   -  person M.Babcock    schedule 10.01.2012
comment
Это комбинация всего кода, которому относительно сложно следовать, и если код есть, то вряд ли для него есть какое-либо объяснение.   -  person DubyaDubyaDubyaDot    schedule 10.01.2012
comment
Вы спрашиваете о сложном алгоритме. Конечно, будет трудно следовать любому коду, который его реализует. Вы понимаете, что код должен делать? Если бы вы это сделали, то код в сети, вероятно, было бы легче отслеживать.   -  person M.Babcock    schedule 10.01.2012
comment
Я могу немного понять ход алгоритма, это просто отсутствие документации некоторых людей сбивает меня с толку. возьмем, например, эту функцию из одного из примеров: float fade (in float t) {return t t t * (t * (t * 6.0-15.0) +10.0); } .... Ни заголовка, ни объяснения того, что эта функция должна выполнять, что это такое? что такое 6.0? Просто такие мелочи отталкивают меня от чтения человеческого кода. Копирование кода для меня - это то, что я вынужден делать, поймите, что код - это совсем другая проблема   -  person DubyaDubyaDubyaDot    schedule 10.01.2012


Ответы (2)


Я знаю, что это старый вопрос, но вот одно из самых ясных объяснений интерполяции между фиксированными точками, которая составляет 1d шум Перлина http://webstaff.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf

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

http://paulbourke.net/miscellaneous/interpolation/

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

см. smoothstep в вики. много по теме через гугл. https://en.wikipedia.org/wiki/Smoothstep

видимо гиперссылка нестабильна, вот она снова:

Демистификация симплексного шума

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

Вот несколько наиболее заметных преимуществ:

• Симплексный шум имеет меньшую вычислительную сложность и требует меньшего количества умножений.

• Симплексный шум масштабируется до более высоких измерений (4D, 5D и выше) с гораздо меньшими вычислительными затратами, сложность относится к размерам, а не к классическому шуму.

• Симплексный шум не имеет заметных направленных артефактов.

• Симплексный шум везде имеет четко определенный и непрерывный градиент, который можно довольно дешево вычислить.

• Симплексный шум легко реализовать аппаратно.

К сожалению, даже сейчас, в начале 2005 года, очень немногие люди, кажется, понимают симплексный шум, и почти никто не использует его, поэтому я написал это. Я постараюсь объяснить алгоритм немного более основательно, чем Кен Перлин успел сделать в своих заметках из курса Siggraph 2001 и 2002, и, надеюсь, проясню, что это не так сложно понять, как кажется на первый взгляд. Из того, что я узнал, больше всего людей смущает непонятная природа эталонной реализации Кена Перлина на Java. Он представляет очень компактный код без комментариев для демонстрации принципа, но этот код явно не предназначен для чтения в качестве учебного пособия. После нескольких попыток я отказался от кода и вместо этого прочитал его статью, которая была намного яснее.

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

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

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

person DeltaEnfieldWaid    schedule 23.09.2013
comment
Ссылка мертва - person Neon Warge; 23.03.2017
comment
Он не умер, я нажал на него в тот же день, когда вы его проверили. оно живое. - person DeltaEnfieldWaid; 30.03.2017
comment
Нет необходимости использовать симплексный шум в 1d. Обычный алгоритм был бы дешевле. Также вы можете адаптировать улучшенную версию шума Перлина для достижения еще лучшей производительности. - person Oliort; 11.01.2020
comment
Вы так и не завершили свой ответ: | - person SMUsamaShah; 02.07.2020

Поздно к вечеринке, но доказано, что функция, подобная приведенной ниже, никогда не бывает периодической.

sin (2 * x) + sin(pi * x)

Кривая, демонстрирующая sin (2 * x) + sin (pi * x)

Вы можете использовать функцию в целом, например изменяя 2 на 3, сдвигая график в направлении y, масштабируя частоту x / периоды отдельных синусов, вы также можете перемещать отдельный период на x. Для многих вещей я создал игровую площадку по ссылке ниже в geogebra, чтобы вы могли поиграть с конфигурациями, посмотреть, что лучше всего выглядит, и т. Д. Зеленый график будет результатом, фиолетовый график - если вы хотите, чтобы вся функция была растут до теоретической бесконечности, оранжевый график с точками представляет собой постоянную конфигурацию функции, которую мы видим красным выше, а график с желтыми линиями - все без масштабирования. Наслаждаться!

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

https://www.geogebra.org/graphing/yzgxvd8q

Что можно настроить с помощью графика.

person Community    schedule 20.03.2020