Введение
Конструкция для n-мерных функций шума Симплексный шум является результатом n-мерной функции шума, сопоставимой с шумом Перлина ("классический" шум), но с меньшим количеством направленных артефактов, в более высоких измерениях и более низкой вычислительной нагрузкой. Кен Перлин разработал алгоритм в 2001 году, чтобы устранить ограничения его классической функции шума, особенно в более высоких измерениях. Преимущества простого шума над шумом Перлина: простой шум имеет более низкую вычислительную сложность и требует меньше умножений. Симплексный шум масштабируется до более высоких измерений (4D, 5D) с гораздо меньшими вычислительными затратами: сложность относится к измерениям, а не к классическому шуму. У симплексного шума нет заметных направленных артефактов (визуально изотропный), хотя шум, генерируемый для разных измерений, визуально отличается (например, 2D-шум имеет другой вид, чем 2D-резки 3D-шума, и он выглядит все хуже для более высоких измерений). Симплексный шум имеет хорошо определенный и непрерывный градиент (почти) везде, который можно вычислить довольно дешево. Симплексный шум легко реализовать в аппаратном обеспечении. В то время как классический шум интерполирует между градиентами в окружающих конечных точках гиперсети (т.е. северо-восток, северо-запад, юго-восток и юго-запад в 2D), простой шум делит пространство на простоты (т.е. трехмерные треугольники). Это уменьшает количество точек данных. В то время как гиперкуб в измерениях имеет углы, симплекс в измерениях имеет только углы. Треугольники равносторонние в 2D, но в более высоких измерениях простоты только приблизительно регулярны. Например, плитка в 3D-процессе функции является ориентацией четырехугольного дисфеноида сотового пчелиного улья. Симплексный шум полезен для компьютерной графики, где шум обычно рассчитывается в 2, 3, 4 или, возможно, 5 измерениях. Для более высоких измерений n сфер вокруг n уголков простого не достаточно плотно упакованы, уменьшая поддержку функции и делая ее нулевой в больших частях пространства.
Simplex noise is the result of an n dimensional noise function comparable to Perlin noise ("classic" noise) but with fewer directional artifacts, in higher dimensions, and a lower computational overhead. Ken Perlin designed the algorithm in 2001 to address the limitations of his classic noise function, especially in higher dimensions. The advantages of simplex noise over Perlin noise:
Simplex noise has lower computational complexity and requires fewer multiplications. Simplex noise scales to higher dimensions (4D, 5D) with much less computational cost: the complexity is for dimensions instead of the of classic noise. Simplex noise has no noticeable directional artifacts (is visually isotropic), though noise generated for different dimensions is visually distinct (e. g. 2D noise has a different look than 2D slices of 3D noise, and it looks increasingly worse for higher dimensions). Simplex noise has a well defined and continuous gradient (almost) everywhere that can be computed quite cheaply. Simplex noise is easy to implement in hardware. Whereas classical noise interpolates between the gradients at the surrounding hypergrid end points (i. e., northeast, northwest, southeast and southwest in 2D), simplex noise divides the space into simplices (i. e., dimensional triangles). This reduces the number of data points. While a hypercube in dimensions has corners, a simplex in dimensions has only corners. The triangles are equilateral in 2D, but in higher dimensions the simplices are only approximately regular. For example, the tiling in the 3D case of the function is an orientation of the tetragonal disphenoid honeycomb. Simplex noise is useful for computer graphics applications, where noise is usually computed over 2, 3, 4, or possibly 5 dimensions. For higher dimensions, n spheres around n simplex corners are not densely enough packed, reducing the support of the function and making it zero in large portions of space.
Деталь алгоритма
Симплексный шум чаще всего реализуется как двух-, трех- или четырехмерная функция, но может быть определен для любого количества измерений. Реализация обычно включает в себя четыре шага: скольжение координат, упрощенное подразделение, выбор градиента и суммирование ядра.
Упрощенное подразделение
После определения вышеперечисленного значения внутренней координаты (xi, yi, ) сортируются в убывающем порядке, чтобы определить, в каком из скошенных симплексов ортосхемы Шлефли находится точка. Тогда полученный симплекс состоит из вершин, соответствующих упорядоченному пересечению краев от (0, 0, , 0) до (1, 1, , 1), из которых есть n! возможностей, каждая из которых соответствует одной пермутации координат. Другими словами, начните с нулевой координаты и последовательно добавляйте, начиная с значения, соответствующего величине величины наибольшей внутренней координаты, и заканчивая наименьшим. Например, точка (0,4, 0,5, 0,3) будет лежать внутри симплекса с вершинами (0, 0, 0), (0, 1, 0), (1, 1, 0), (1, 1, 1). Координаты "и" самые большие, поэтому они добавляются первыми. Затем следует координаты xi, и, наконец, zi.
Выбор градиента
Каждая простой вершина добавляется обратно к координатам основания скошенного гиперкуба и перемещается в направление псевдослучайного градиента. Хэш может быть реализован множеством способов, хотя чаще всего используется таблица перестановки или схема манипулирования битами. При выборе набора градиентов следует быть осторожным, чтобы свести к минимуму направленные артефакты.
Правовой статус
Использование реализаций в 3D и выше для синтеза текстурированного изображения было охвачено , если алгоритм был реализован с использованием конкретных методов, описанных в любом из патентных требований, срок действия которых истек 8 января 2022 года.