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

Я хотел бы знать, почему шум Перлина до сих пор так популярен после выхода Simplex. Симплексный шум был создан самим Кеном Перлином, и предполагалось, что он возьмет на себя его старый алгоритм, который был медленным для более высоких измерений и с лучшим качеством (без видимых артефактов).

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

Может ли кто-нибудь мне помочь, есть ли обратная сторона симплексного шума? Я слышал слухи, что шум Перлина быстрее, когда дело касается одномерного и двухмерного шума, но я не знаю, правда это или нет.

Спасибо!


person Jón Trausti Arason    schedule 22.06.2011    source источник


Ответы (8)


«Если он не сломан, не чините его».

Посмотрите, сможете ли вы найти кого-нибудь, кто объяснит вам, почему Simplex лучше. «Это быстрее и распространяется на множество измерений» и «попытки симплексного шума уменьшить сложность функций шума более высоких измерений» были тем, что я обнаружил. Большинство из нас работает в двух или трех измерениях, а может и в четырех, если нам повезет, и мы будем делать что-то со временем.

Я думаю, будет справедливо сказать, что Perlin используется мало в реальном времени, слишком медленно обрабатывать, что для большинства целей достаточно стандартного шума Perlin. В предварительных рендерингах (например, используемых в киноиндустрии) время не так важно, поскольку рендеринг в любом случае выполняется медленно; а в моделировании в реальном времени у нас есть достаточно способов уменьшить объем текущей обработки, поэтому маловероятно, что вы собираетесь создавать массивные карты шума каждые несколько нано / миллисекунд - это просто базовая оптимизация в реальном времени.

person Engineer    schedule 04.08.2011
comment
Думаю, это адекватный ответ. Но дело не только в скорости и более высоких измерениях, это также связано с артефактами в шуме Перлина, которые не видны в симплексном шуме. Но, как вы сказали, шума Перлина достаточно, так зачем использовать что-то еще? :-) - person Jón Trausti Arason; 05.08.2011
comment
Это быстрее и распространяется на несколько измерений - с гораздо меньшими вычислительными затратами. , сложность O (N) для N измерений вместо O (2 ^ N) классического шума - person bobobobo; 21.12.2012
comment
4D-шум является обычным явлением для шума при наложении текстур: {X_u, X_v, Y_u, Y_v}, где u и v - пары синус / косинус углов X и Y - person Mark Jeronimus; 20.07.2019

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

Люди склонны быть довольно иррациональными.

person Confusion    schedule 23.06.2011
comment
Хорошая точка зрения. Вот чего я боялся. Представьте, сколько людей используют устаревшие медленные алгоритмы только потому, что название лучшего алгоритма звучит недостаточно броско :-) - person Jón Trausti Arason; 24.06.2011
comment
Я всегда думал, что симплексный шум проще и менее качественный, чем шум Перлина. Так да. - person DeltaEnfieldWaid; 23.08.2014
comment
Это распространенное заблуждение. Simplex не означает более простой метод; это относится к обобщению треугольника до произвольных размеров. Проще говоря, симплексный шум использует сетку треугольников вместо квадратов. - person Lucio Paiva; 05.08.2018
comment
Это странно, особенно потому, что это слово звучит как «простой», так и «сложный». сим-плекс. - person Weckar E.; 28.12.2020

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

[симплексный шум] имеет несколько иной визуальный характер, поэтому он не всегда является прямой заменой классического шума плагином. Приложения, которые зависят от подробных характеристик классического шума, таких как точный размер элемента, точный диапазон значений или статистика более высокого порядка, могут нуждаться в некоторых изменениях, чтобы они хорошо выглядели при использовании симплексного шума.
Stefan Gustavson's Демистификация симплексного шума

person Pikalek    schedule 11.11.2012

Кен Перлин запатентовал свой алгоритм симплексного шума. Насколько мне известно, его классический алгоритм не запатентован.

person Kelvin M    schedule 19.07.2015

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

У Стефана Густавсона есть несколько очень хороших реализаций Simplex Noise на языке C, здесь

person bobobobo    schedule 21.12.2012
comment
Спасибо за URL. Однако на странице не перечислены лицензионные условия кода. Есть идеи, какое лицензирование идет с этим? - person Bram; 26.10.2013
comment
Насколько я знаю, все используют шум Перлина без какой-либо лицензии. Также обратите внимание на очень хорошие реализации Стефана Густавсона на языке C. - person bobobobo; 26.10.2013

Я еще не работал с симплексным шумом, но могу подумать о нескольких причинах:

  • Может быть, потому, что мы привыкли к квадратам и углам 90 градусов? Квадраты, кубы ... для нас гораздо более естественны, чем треугольники, тетраэдры или гипертетраэдры.
  • Каждый слой шума Перлина - это просто растровое изображение.
  • Результатом шума Перлина являются квадраты, которые легко разбить на мозаику. А текстуры часто представляют собой выложенные плиткой квадраты.
  • Обычно вы используете малоразмерный шум. По моему опыту, наиболее распространены 2D и 3D.
  • Симплексный шум просто сложнее понять и реализовать
  • Вероятно, сэмплеры в графической карте могут выполнять интерполяцию ортогональных растровых изображений, используемых в шуме Перлина, но не интерполяцию растровых изображений под углом 60 градусов, используемых в симплексном шуме. (этот пункт может быть ошибочным, я не работал с видеокартами несколько лет)
person CodesInChaos    schedule 22.06.2011
comment
Хм, хорошо, я попытаюсь разобраться с этим, имея мои текущие знания о шуме Перлина, симплексном шуме и дробном броуновском движении. Мое мнение здесь, возможно, неверно, поэтому, пожалуйста, поправьте меня, если что-то я говорю не правильно. Утверждение 1. Может быть правдой, но всегда можно изменить выходной сигнал шума, чтобы он выглядел квадратным с углами 90 градусов. Утверждение 2: Afaik, fbm использует шум, будь то перлин, симплекс или любой другой шум, и создает слои октав. Симплекс и перлин - это просто шум и не имеет ничего общего со слоями. Утверждение 3: То же, что и мой ответ на утверждение 1 - person Jón Trausti Arason; 23.06.2011
comment
В основном я знаю шум Перлина в процедурной генерации текстур. И там вы концептуально создаете его, создавая растровые изображения, состоящие из случайных пикселей в градациях серого, а затем смешивая несколько слоев, используя разные коэффициенты масштабирования. freespace.virgin.net/hugo.elias/models/m_perlin.htm Показывает, как создать шум Перлина, просто смешав несколько слоев случайных растровых изображений пикселей. - person CodesInChaos; 23.06.2011
comment
Утверждение 4: Хорошо, конечно, вы также можете использовать 1D и 2D в симплексе, и он не предлагает артефактов, таких как шум Перлина. Утверждение 5: Я прошу не согласиться, оно было разработано специально для того, чтобы упростить реализацию на аппаратном уровне, но с точки зрения ЦП, я не знаю, мне было действительно легко преобразовать в него. Утверждение 6: Я не знаю, но, как и мой ответ на утверждение 5, согласно Кену Перлину, симплекс должен быть легче реализован в графическом процессоре. - person Jón Trausti Arason; 23.06.2011
comment
Я нашел интересную статью о симплексном шуме под названием «Демистификация симплексного шума» на webstaff.itn. liu.se/~stegu/simplexnoise/simplexnoise.pdf Основная причина, по которой люди думают, что симплексный шум сложен, заключается в том, что я хотел бы процитировать статью выше: - person Jón Trausti Arason; 23.06.2011
comment
Из того, что я узнал, больше всего людей смущает непонятная природа эталонной реализации Кена Перлина на Java. Он представляет очень компактный код без комментариев, чтобы продемонстрировать принцип, но этот код явно не предназначен для чтения в качестве учебного пособия. После нескольких попыток я отказался от кода и вместо этого прочитал его статью, которая была намного яснее. - person Jón Trausti Arason; 23.06.2011
comment
Что касается вашего комментария о смешивании нескольких слоев вместе, это не часть шума Перлина, то есть fBm. fBm генерирует несколько слоев шума и смешивает их вместе. Такая же концепция используется для симплексного шума. Никаких изменений :) - person Jón Trausti Arason; 23.06.2011
comment
Хм, похоже, что в большинстве статей, которые я прочитал, слово «шум Перлина» используется неправильно. - person CodesInChaos; 23.06.2011

Я бы ответил на этот вопрос прямо, потому что шум Перлина очень прост для понимания. С другой стороны, симплексный шум гораздо более сложный и опасный зверь. Настроить и запустить реализацию Perlin намного проще, чем симплексную, и поэтому она пользуется большим спросом. В случае симплекса не помогает то, что оба очень похожи в визуальных эффектах (особенно после того, как вы немного измените шум).

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

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

person Entalpi    schedule 26.04.2017

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

person Bad Radish    schedule 25.05.2019
comment
Не так уж далеко от того, как я бы это объяснил. У меня есть несколько моментов, которые нужно добавить: одиночные октавы симплекса более точечны, но все же имеют меньше направленных артефактов в хорошем импл. При добавлении большого количества октав пятнистость исчезает, но смещение направления остается, что делает Simplex более качественным выбором. Если вам нужна одна октава, то, чтобы избежать как прямоугольности, так и неоднородности, я использую симплекс, который был изменен для получения результатов с меньшим количеством точек (например, мой алгоритм OpenSimplex2S, показанный внизу i.imgur.com/gvhRwmX.png) или фрагмент 3D + Perlin с ротацией домена i.imgur.com/k06UVx5.png - person KdotJPG; 16.04.2021