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

Я прочитал эту статью по запросу Натана Рида на сайте Programmers.StackExchange. После некоторого чтения я наткнулся на параграф, который я действительно не понимаю. Кто-нибудь может объяснить мне этот абзац более простым языком? (Английский не является моим родным языком) Если вы хотите прочитать оригинал, вы можете найти его в разделе "Moving from interpolation to summation".

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


person Jeroen    schedule 20.08.2013    source источник


Ответы (1)


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

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

  • Найдите вершины x_1,...,x_k ячейки, содержащей x, где ячейка представляет собой квадрат или куб (и т. д.) для шума Перлина и треугольник или тетраэдр (и т. д.) для симплексного шума.
  • Для каждой вершины x_i сгенерируйте случайный единичный вектор n_i и вычислите grad(x_i,x) = (x-x_i) dot n_i. Это «наклон градиента», упомянутый в абзаце.
  • Объедините их вместе с некоторыми весами, так что результат

    w_1 * град(x_1,x) + … + w_k * град(x_k,x)

Параграф описывает, как генерировать веса w_i. Для шума Перлина веса линейно интерполируются (игнорируя сглаживание), поэтому они всегда добавляются к 1. Для симплексного шума мы можем увидеть, как w_i вычисляется в коде позже в вашей ссылке; это

w_i = max(0.6 - d_i^2, 0)^4,

где d_i = |x-x_i| это расстояние от x до x_i. Это «радиально-симметричная функция затухания». Он радиально-симметричен, потому что зависит только от расстояния, а не от направления x-x_i. Затухание просто означает, что оно уменьшается по мере увеличения d_i.

Во второй половине абзаца говорится, что когда мы пересекаем границу между двумя симплексами и заменяем одного из соседей, скажем, x_1, другой вершиной x_1', коэффициент w_1 должен стать равным 0, так что значения совпадают на границе . Эта диаграмма ascii может прояснять или не прояснять:

1--2
| /|
|/ |
3--1’

Значение шума

w_1 град(x_1,x) + w_2 град(x_2,x) + w_3 град(x_3,x)

в верхнем левом треугольнике и

w_1’ град(x_1’,x) + w_2 град(x_2,x) + w_3 град(x_3,x)

в правом нижнем треугольнике. Чтобы они совпадали, w_1 и w_1’ должны быть равны нулю на границе.

person stewbasic    schedule 29.08.2013