Путаница между симплексом, шумом перлина и их гибридом очень распространена в Интернете на данный момент. Самая известная и цитируемая статья, которую я знаю, — это Стефана Густавсона. В нем г-н Густавсон говорит следующее
Я буду использовать гибридный подход для ясности, используя метод градиентного хеширования из классического шума, но симплексную сетку и прямое суммирование шумовых вкладов симплексного шума.
Таким образом, в результате получается не симплексный шум и не шум Перлина, а скорее смешанный или гибридный алгоритм шума, который имеет некоторые черты обоих».
Шум Перлина — это классический шум, и он использует предопределенные (сгенерированные каким-то образом) векторы градиента и таблицу перестановок (которые содержат индексы таблицы градиентов). Таким образом, чтобы получить градиент из координаты (x, y, z), вы применяете какую-то хэш-функцию, классический шум Перлина просто использует модуль, а затем вы берете индекс из таблицы перестановок, которая, в свою очередь, дает вам другой индекс, который вы используете для захвата градиента со стола. Использование операции по модулю в качестве хэш-функции мгновенно дает повторяющийся характер шума Перлина.
Таблица перестановок выглядит примерно так; [0, 1, 2, ..., sizeof(gradient_table) - 1].
Симплексный шум запатентован (по крайней мере, для генерации текстур в 3D и выше), и его алгоритм описан здесь. . Симплексный шум использует два уникальных изобретения, чтобы отличить его от шума Перлина.
1) Нет таблицы градиентов и таблиц перестановок. Вместо этого градиенты генерируются «на лету» с помощью алгоритма битовой манипуляции.
2) Вместо координатной сетки, состоящей из квадрата (в 2D), она состоит из простейшей геометрической формы, который замостил плоскость. В 2D это треугольник, в 3D тетраэдр. Эта координатная сетка уменьшает видимые артефакты сетки.
Есть также некоторые незначительные, но все же очень важные особенности симплексного шума, которые делают его гораздо более элегантным алгоритмом. Например, внутренние продукты не создаются, поскольку все вклады вершин вносятся с использованием сферического ядра. Даже преобразование между простой координатной сеткой и декартовой (или нормальной) оптимизировано до одного умножения, что делает преобразование очень дешевым.
В качестве беззастенчивой саморекламы я предоставлю ссылку на мой репозиторий функции шума, в котором я пытаюсь реализовать все максимально правильно. Цель состоит в том, чтобы предоставить какую-то стандартную кросс-платформенную реализацию множества шумовых функций.
person
Entalpi
schedule
26.04.2017